안녕하세요? 만들오 입니다.
오늘은 opencv를 이용해 숫자를 그리면 어떤 숫자인지 맞춰보는 프로젝트를 구현하려고 합니다.
모델을 만들고 평가하는 예제는 정말 잘 구현되어있습니다.
저는 김태영님의 블로그를 참고하고 있습니다. https://tykimos.github.io/lecture/
정말 알기쉽게 정리해주셨으니 머신러닝/Tensorflow/Keras에 관심있으신 분은 꼭 방문해보시기 바랍니다.
위 블로그에서 학습 모델 보기/저장하기/불러오기를 해보신 이후 기준으로 글을 작성하겠습니다.
총 2편으로 구성할 예정이며, 오늘은 opencv를 이용해 손글씨를 쓰고 저장하는 코드를 소개하겠습니다.
1. 모듈 설치
pip install opencv-python
위 모듈을 설치하면 opencv와 numpy가 설치됩니다.
2. 전체 코드
import cv2, os
import numpy as np
img_save_path = "./img/"
if not os.path.exists(img_save_path):
os.mkdir(img_save_path)
onDown = False
xprev, yprev = None, None
def onmouse(event, x, y, flags, params):
global onDown, img, xprev, yprev
if event == cv2.EVENT_LBUTTONDOWN:
print("DOWN : {0}, {1}".format(x,y))
onDown = True
elif event == cv2.EVENT_MOUSEMOVE:
if onDown == True:
print("MOVE : {0}, {1}".format(x,y))
cv2.line(img, (xprev,yprev), (x,y), (255,255,255), 20)
elif event == cv2.EVENT_LBUTTONUP:
print("UP : {0}, {1}".format(x,y))
onDown = False
xprev, yprev = x,y
cv2.namedWindow("image")
cv2.setMouseCallback("image", onmouse)
width, height = 280, 280
img = np.zeros((280,280,3), np.uint8)
figNum = 1
while True:
cv2.imshow("image", img)
key = cv2.waitKey(1)
if key == ord('r'):
img = np.zeros((280,280,3), np.uint8)
print("Clear.")
if key == ord('s'):
img_save = cv2.resize(img_gray, dsize=(28,28), interpolation=cv2.INTER_AREA)
cv2.imwrite("{0}image{1}.jpg".format(img_save_path, str(figNum).zfill(2)), img_save)
figNum = figNum + 1
print("Image saved")
if key == ord('q'):
print("Good bye")
break
cv2.destroyAllWindows()
3. 코드 설명
Opencv로 창을 만들고, 마우스 이벤트를 받아 선을 그리게 됩니다.
키보드 버튼 "r"을 누르면 그림을 전부 지우고
"s"를 누르면 크기를 28x28 사이즈로 조절하고 ./img 폴더 안에 image01.jpg 이름으로 저장합니다.
"q"를 누르면 프로그램을 종료합니다.
4. 마무리
Tensorflow로 교육을 시키기 위해선 데이터셋이 필요합니다. 위 코드를 이용해 데이터셋을 만들 수 있고,
일단은 숫자를 그려서 기본 예제인 MNIST의 결과를 확인하는 것을 다음글로 마무리 하겠습니다.
감사합니다.
* 이 글은 티스토리 카카오계정 연동정책으로 인해 이전 블로그(오코취) 글을 옮겨왔습니다.
[끝].
728x90
'소프트웨어 > 파이썬' 카테고리의 다른 글
[파이썬] Jupyter notebook 쉽게 암호 설정하기 (1) | 2021.01.23 |
---|---|
[파이썬] 윈도우 화면 선택영역 모니터링 (0) | 2021.01.23 |
[파이썬] Opencv를 이용한 MNIST 숫자인식 확인하기#2 (0) | 2021.01.23 |
[파이썬] Websocket 으로 영상 송수신하기 (8) | 2021.01.23 |
[파이썬] Websocket 통신서버 만들기 (0) | 2021.01.23 |
댓글