2월 3주차_프로젝트 진행상황 - chloe73/openCV GitHub Wiki

☀️이번주 목표 : 영어 인식 실습하기 숫자 인식 마무리 단계

import tensorflow as tf
import cv2
import matplotlib.pyplot as plt
from tensorflow.keras import datasets, layers, models

(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

# 픽셀 값을 0~1 사이로 정규화합니다.
train_images, test_images = train_images / 255.0, test_images / 255.0

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.summary()

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.summary()

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=5)

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
print(test_acc)

인식률

인식률_99

gray = cv2.imread("4_num.jpg", cv2.IMREAD_GRAYSCALE)

plt.imshow(gray)

plt.show()

# 이미지 사이즈 변경

gray = cv2.resize(255 - gray, (28, 28))

test_num = gray.flatten() / 255.0

test_num = test_num.reshape((-1, 28, 28, 1))

# 이미지 숫자 테스트

print('The Answer is ', model.predict_classes(test_num))

시도

숫자인식0~5 숫자인식 0~9

실패한 것

0, 5 이미지

문제점

  • 이미지의 비율

해결

  • 사진의 가로세로를 숫자에 딱맞게 자름
  • resize 되어서 사진이 작아지더라도 이미지의 비율을 맞게 조정함

image

느낀것 : 그래서 추출할 객체의 컨투어(윤곽)을 검출하여 객체를 가공하는구나 싶었다