반응형
본 내용은 teachable machine과 python 3.10 버전을 이용하여 진행하였습니다.
먼저 모델 학습을 위하여 https://teachablemachine.withgoogle.com/ 사이트에 접속합니다.
시작하기를 눌러 이미지 프로젝트를 선택해줍니다.
새 이미지 프로젝트에서 표준 이미지 모델을 선택해줍니다.
Class 1의 예제가 뜰 텐데, 여기서는 웹캠을 사용하여 이미지를 판독함으로 웹캠을 선택해줍니다.
길게 눌러서 녹화하기를 계속 누르면서 카메라 앞에 판독할 물건을 자세히 보여줍니다.
약 200장 정도면 충분합니다.
또한 Class 1의 이름에서 맞는 모델명의 이름으로 변경해줍니다.
마찬가지로 추가 Class를 넣어 비교할 모델들의 이미지 샘플을 녹화해줍니다.
완료하였으면 학습을 눌러 모델이 추출될 때까지 대기한 뒤,
결과창에서 모델이 웹캠의 사물을 잘 인식하는지 테스트해줍니다.
여기서는 Tensorflow의 Keras의 모델을 다운받아줍니다.
다운로드를 완료하면 위와 같은 파일들을 받을 수 있습니다.
"""
python 3.10.0
pip install opencv-python
pip install numpy
pip install tensorflow tf
"""
import cv2
import numpy as np
import tensorflow as tf # 현재 케라스는 tensorflow에 합병됨
import os
cap = cv2.VideoCapture(0) # 열린 웹캠의 정보 값을 cap에 전달
model=tf.keras.models.load_model('keras_model.h5', compile=False)
# teachable machine에서 가져온 모델값을 가져온다.
classes = ['nail polish', 'holder', 'nothing'] # 모델명의 값에 맞게 변경
while cap.isOpened : # 카메라가 연결되었을 경우
ret, img = cap.read() # 카메라로부터 이미지를 읽어옴
if ret : # 이미지를 읽었을 경우
img = cv2.flip(img, 1) # 이미지 좌우 반전
img = img[:480, 80:560]
# 이미지를 480x480으로 만들기 위해 가로 세로값을 지정(공백은 0)
#480,480일 경우 세로 카메라의 값이 눌리는 경우가 있기 때문이다.
img = cv2.resize(img, (224, 224))
# 케라스 모델에 적용하기 위해 크기변환
# 케라스 모델은 기본적으로 224*224를 인식함
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 이미지 색상을 BGR에서 RGB로 변경
img_input = img.astype(np.float32)/127.0 - 1 # 이미지를 0 ~ 1사이의 값으로 변경(전처리)
# 모든 수치의 값들이 0 ~ 255의 사이이기 때문에,
# 127로 나누면 0 ~ 2 의 값이 되고,
# 여기서 1을 빼줌으로써 평균값이 0이 되도록 만드는 방법을 실행한다.
img_input=np.expand_dims(img_input, axis = 0)
# 이미지 데이터에 배치 차원을 추가한다.
# 딥러닝 모델은 일반적으로 배치 단위로 데이터를 처리하므로,
# 단일 이미지라도 배치 차원을 추가해야 된다.
predict=model.predict(img_input) # 이미지를 모델에 넣어 예측
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 이미지 다시 변환
img = cv2.resize(img, (480, 480)) # 이미지 크기 다시 변경
idx = np.argmax(predict) # predict에서 가장 높은 값의 인덱스 값을 출력하기
cv2.putText(img, text = classes[idx], org = (10, 30),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=1,
color=(0,0,255),
thickness = 2)
# 왼쪽 상단에 현재 predict 값이 지정하는 변수값 출력시키기
print(classes[idx])
cv2.imshow('camera', img) # 이미지를 화면에 출력
#h,w,c = img.shape # 이미지의 높이, 너비, 채널을 받아옴
#print(h,w,c) #@ 이미지의 높이, 너비, 채널을 출력
if cv2.waitKey(1) == ord('q') : # q를 누르면 종료
break
위와 같은 코드를 입력한 후, 같은 위치에 다운받은 모델을 넣어 웹캠이 사물을 잘 인식하는지 확인합니다.
이상으로 Teachable machine을 이용하여 간단한 웹캡 판별 모델을 만들어 보았습니다.
반응형
'공부를 함시다 > Python' 카테고리의 다른 글
[Python] 얼굴 인식 후 배경 흐리게 처리하기 (0) | 2024.10.20 |
---|---|
[Python] 웹캠 출력하기 (0) | 2024.08.04 |
[Python] 파이썬 코드를 exe로 만들기(pyinstaller) (0) | 2024.03.22 |
[Python] 파일을 찾을 수 없다는 오류 (0) | 2024.03.14 |
[Python] 셀레니움 네이버 로그인 (0) | 2024.03.11 |