[References]
https://www.youtube.com/watch?v=AfkKy4oIpjs
아래 사이트에서 Python 3.8.6 버전을 설치한다.
https://www.python.org/downloads
'Windows 키 + R'을 눌러 관리자 권한으로 명령 프롬프트를 실행한다.
python의 pip를 이용하여 'TensorFlow', 'Pillow', 'Numpy', 'OpenCV', 'pySerial'을 설치한다.
C:\> py -3.7 -m pip install tensorflow==2.3.1 (Python 3.8.6 버전에서 설치)
C:\> py -3.7 -m pip install pillow
C:\> py -3.7 -m pip install numpy
C:\> py -3.7 -m pip install opencv-python
C:\> py -3.7 -m pip install opencv-contrib-python
C:\> py -3.7 -m pip install pyserial
https://teachablemachine.withgoogle.com 접속한다.
Get Started 클릭한다.
'Image Project'를 클릭한다.
원하는 개수의 클래스(분류 기준)를 설정한다.
게임에 사용할 기술의 개수에 맞게 클래스를 설정한다.
각각의 클래스에 이름을 부여하고 각 분류에 맞는 이미지(웹캠)를 업로드한다.
이미지를 업로드하는 것보다는 캠으로 원하는 동작을 캡처하는 것이 좋다.
학습시킬 이미지의 개수는 많을 수록 좋다.
Training(학습)을 시킨다.
TensorFlow 메뉴에서 Keras를 선택한 후 'Download my model' 버튼을 눌러 생성한 모델을 다운로드한다.
다운받은 폴더를 열어보면 두 개의 파일이 생성되어 있다.
IDLE (Python 3.8 32-bit)를 클릭한다.
실행하면 다음과 같은 "Python Shell" 창이 뜬다.
상단 메뉴의 "File - New File"을 누른다.
코딩을 할 수 있는 새로운 창이 생긴다.
새 창에 아래와 같은 코드를 넣어준다.
파이썬 코드 파일은 'keras_modes.h5' 파일과 같은 폴더 안에 있어야 한다.
import tensorflow.keras
from PIL import Image, ImageOps
import numpy as np
import cv2
import pyautogui as gui
np.set_printoptions(suppress=True)
model = tensorflow.keras.models.load_model('keras_model.h5', compile=False)
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame', frame)
image = cv2.resize(frame, dsize=(224, 224), interpolation=cv2.INTER_CUBIC)
image_array = np.asarray(image)
normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
data[0] = normalized_image_array
prediction = model.predict(data)
print(prediction)
if prediction[ : , 0] > 0.9 :
# 장풍 ('a' + 'd' + 'tab')
gui.keyDown('a')
gui.keyUp('a')
gui.keyDown('d')
gui.keyUp('d')
gui.keyDown('tab')
gui.keyUp('tab')
if prediction[ : , 1] > 0.9 :
# 어퍼컷 ('x' + 'd' + 'tab')
gui.keyDown('x')
gui.keyUp('x')
gui.keyDown('d')
gui.keyUp('d')
gui.keyDown('tab')
gui.keyUp('tab')
if prediction[ : , 2] > 0.7 :
# 평상시
None
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
테스트하고자 하는 게임을 실행한다.
'F5 키'를 눌러 파이썬 코드를 실행한다.
카메라가 작동하기까지는 시간이 조금 필요하다. 인내심을 가지고 기다린다.
카메라에 손바닥을 펴 잘 작동하는지 테스트해본다.
카메라에 주먹을 쥐어 잘 작동하는지 테스트해본다.