텐서플로우로 숫자 인식 학습된 모델을 읽어 OpenCV 의 MouseCallback을 이용하여

입력한 숫자 이미지의 결과를 반복하여 확인 하는 예제 입니다. 

숫자이미지를 마우스로 그리고 BackSpace입력시 숫자인식 결과를 반복적으로 보여줍니다.

종료하고자 할 경우 ESC 버튼을 누르면 종료됩니다.  OpenCV 의 MouseCallback 참고하세요

 

텐서플로우 숫자 인식 모델을 읽어 손글씨 숫자를 인식 검증하는 예제

 

# OpenCV MouseCallback
import cv2
import numpy as np
from skimage import io
from skimage.transform import resize
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras


# 학습된 모델을 LOAD 
model = keras.models.load_model('My_MNIST_CNN_DATA.h5')
model.summary()

drawing = False # True is Mouse Click
ix, iy = -1, -1


# Mouse Callback
def draw_circle(event, x, y, flags, param):
     global ix, iy, drawing, mode

     if event == cv2.EVENT_LBUTTONDOWN:
         drawing = True
          ix, iy = x, y

     if event == cv2.EVENT_MOUSEMOVE:
          if drawing == True:
          cv2.circle(img, (x, y), 5, (255, 255, 255), -1)

     elif event == cv2.EVENT_LBUTTONUP:
         drawing = False
         cv2.circle(img, (x, y), 5, (255, 255, 255), -1)


def Answer(img):
     img = cv2.resize(img, (28, 28), interpolation=cv2.INTER_AREA)

     test_num = img[:,:,0]
     test_num = (test_num > 0.1) * test_num
     test_num = test_num.astype('float32')
     plt.imshow(test_num, cmap='Greys', interpolation='nearest')
     test_num = test_num.reshape((1, 28, 28, 1))
     print('Answer : ', model.predict_classes(test_num))

# black Area Create
img = np.zeros((300, 300, 3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)


# Image Mouse input
while(1):
     cv2.imshow('image', img)
     k = cv2.waitKey(1) & 0xFF

     if k == 27: # ESC-CLOSE
        break
     elif k == 8: # Back Space
          Answer(img)
          img = np.zeros((300, 300, 3), np.uint8)

#---------------------------------------
cv2.destroyAllWindows()

 

실행 결과

 

숫자 이미지 입력
결과이미지

+ Recent posts