개발관련/인공지능,머신러닝,딥러닝

Google TeachableMachine + Python 간단한 프로그램 제작하기

Dol42 2021. 2. 22. 23:05

구글 티처블 머신이란?

구글 티처블 머신은 머신러닝을 처음 접하는 사람들이 좀 더 쉽게 배우고, 활용 가능하게 도와주는 툴이다. 학습뿐만 아니라 생성한 모델(Tensorflow.js나 Keras, Tensor flow.lite 등 다양하게 생성 가능하다. 또한 웹 배포도 가능하다!)을 다운로드 받아 다양한 프로젝트에 접목시켜 사용 가능하다.

구글 티처블 머신 사용하기 

teachablemachine.withgoogle.com/

 

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.

teachablemachine.withgoogle.com

위 주소에 접속하여 Get Started를 눌러 시작하면 된다.

구글 드라이브를 사용해 프로젝트를 저장하거나 파일로 저장 가능하다. 

이미지, 오디오, 포즈 이렇게 3가지가 현재 생성 가능하다.(추후 업데이트 예정)

이번엔 Image Project를 사용하여 간단한 손 인식 프로그램을 제작하고자 한다. 이미지를 직접 업로드시킬 수도 있지만 나는 주로 웹캠을 사용하여 학습하는 편이다.
Class를 만들어 하나하나 학습이 가능하다. 

Class명을 정한 뒤, Hold to Record를 누르면 누른동안의 이미지가 샘플로 추가가 된다. 

이렇게 손이 보이는 모델을 Class1, 손이 안 보이는 모델을 Class 2로 샘플 이미지를 저장했다.

 

그 뒤 Training을 눌러 주면 된다. 컴퓨터 사양이나 인터넷 속도에 맞추어 paramater를 정해주면 된다.

짜잔 이렇게 간단하게 손 인식하도록 머신러닝 모델을 학습시켰다.

이제 이 모델을 내보내서 파이썬 프로그램과 합쳐주도록 하자. Export Model을 눌러주자.

내보낼 모델을 선택 가능하다. 다양한 형태로 출력 가능하다. 나는 PC에서 사용하기 위해 일반 Tensorflow Keras 모델로 저장했다. 

다운로드된 압축파일을 풀면 다음과 같이 labels.txt와 keras_model.h5 파일이 생성된다. 이제 이 모델을 파이썬에서 사용하기 위해 필요한 환경을 구축해보자.


환경 구축하기

설치할 것은 opencv-python과 tensorflow이다. 
웹캠을 사용하여 컴퓨터 비전 프로그래밍을 진행하기 위해 opencv를 설치하자. opencv-python은 opencv의 python API이다. Numpy와 아주 찰떡궁합이다. 

OpenCV(Open Source Computer Vision)은 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다. 다양한 프로그래밍 언어를 지원하고, 다양한 OS를 지원한다.

tensorflow2를 사용하기 위해 tensorflow의 버전은 최소 2.3 이상으로 설치해야 한다. 

pip install opencv-python 
pip install tensorflow==2.3

웹캠 테스트 하기

import numpy as np
import cv2

# 영상 촬영 장치와 연결하기
capture = cv2.VideoCapture(0)

# 영상의 Width와 Height 크기조절
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)


while True:
    if cv2.waitKey(10) > 0: 
        break

    ret, frame = capture.read()
    # 영상을 한 프레임씩 읽어온다. 
    # ret:프레임 제대로 읽었는지 확인,정상이면 True이 출력된다.
    # frame: 읽은 프레임이 출력됨(이미지)

    cv2.putText(frame,'test',(0,25), cv2.FONT_HERSHEY_PLAIN,1,(255,255,255))
    #영상에 텍스트를 삽입한다.(넣을영상,넣을텍스트,텍스트위치(x,y),폰트명,폰트크기,색상(R,G,B))
    cv2.imshow("camera test", frame)
    #영상을 출력한다.

 

python + 머신러닝 모델 사용하기

import tensorflow.keras
import numpy as np
import cv2

# 모델 위치
model_filename ='D:\\codeDev\\teachablemachine\\keras_model.h5'

# 케라스 모델 가져오기
model = tensorflow.keras.models.load_model(model_filename)

# 카메라를 제어할 수 있는 객체
capture = cv2.VideoCapture(0)

# 카메라 길이 너비 조절
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)

# 이미지 처리하기
def preprocessing(frame):
    #frame_fliped = cv2.flip(frame, 1)
    # 사이즈 조정 티쳐블 머신에서 사용한 이미지 사이즈로 변경해준다.
    size = (224, 224)
    frame_resized = cv2.resize(frame, size, interpolation=cv2.INTER_AREA)
    
    # 이미지 정규화
    # astype : 속성
    frame_normalized = (frame_resized.astype(np.float32) / 127.0) - 1

    # 이미지 차원 재조정 - 예측을 위해 reshape 해줍니다.
    # keras 모델에 공급할 올바른 모양의 배열 생성
    frame_reshaped = frame_normalized.reshape((1, 224, 224, 3))
    #print(frame_reshaped)
    return frame_reshaped

# 예측용 함수
def predict(frame):
    prediction = model.predict(frame)
    return prediction

while True:
    ret, frame = capture.read()

    if cv2.waitKey(100) > 0: 
        break

    preprocessed = preprocessing(frame)
    prediction = predict(preprocessed)

    if (prediction[0,0] < prediction[0,1]):
        print('hand off')
        cv2.putText(frame, 'hand off', (0, 25), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 0))

    else:
        cv2.putText(frame, 'hand on', (0, 25), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 0))
        print('hand on')

    cv2.imshow("VideoFrame", frame)

실행하면 이렇게 동작한다.

이렇게 간단한 구글 티처블머신 + 파이썬으로 머신러닝 프로그램을 제작해 보았다.

 

반응형