Logistic Regression을 사용하여 직접 촬영한 손글씨 이미지로부터 숫자를 인식시켜 보았습니다.
1. A4용지에 0 ~ 9까지 숫자를 적은 후, 카메라로 찍었습니다. 그리고나서 이미지를 10개로 나누어서 저장했습니다.
이미지 크기는 똑같을 필요없지만 중앙에 숫자가 오도록 이미지를 잘라줘야 합니다.
2. 세션을 시작하면서 디스크에 저장했던 모델 파라미터를 가져옵니다. 이미지로부터 숫자를 예측할 때 사용되어집니다.
sess = tf.Session() |
모델 파라미터를 저장했다가 불러오는 것은 다음 포스팅을 참고하세요.
예제로 배우는 텐서플로우 강좌 - 7. 훈련된 모델 파라미터 저장하기 http://webnautes.tistory.com/1237 |
3. 흑백 이미지로 읽어서 28 x 28 크기의 이미지로 변환합니다. 현재 흰바탕에 검은 글씨입니다.
gray = cv2.imread(str(no)+".png", 0) |
4. 검은색 바탕의 흰글씨로 이진화한 후, 숫자 영역외의 공백을 모두 제거합니다.
(thresh, gray) = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) while np.sum(gray[0]) == 0: |
5. 숫자가 중앙에 오도록 공백을 다시 추가합니다.
if rows > cols: |
6. 이미지를 0 ~ 1 사이 값을 갖는 크기 784( = 28 x 28 )의 일차원 배열로 변환합니다.
flatten = gray.flatten() / 255.0 |
7. 입력 이미지로부터 예측한 숫자를 출력합니다.
print (sess.run(tf.argmax(y_model,1), feed_dict={x: images})) |
테스트 결과 8을 5로 인식하는 오류가 있습니다. Logistic regression을 사용하여 훈련시킨 모델의 예측 정확도가 91% 정도 이기 때문입니다.
실제로 해보면 잘 인식되는 손글씨도 있고 잘 인식안되는 손글씨도 있습니다.
좀 더 고급 알고리즘을 사용하면 정확도를 좀 더 올릴 수 있습니다. 텐서플로우 공부를 진행하며 개선해볼 예정입니다.
[0 1 2 3 4 5 6 7 5 9] |
..
..
8. 전체 코드입니다. 모델을 훈련시키는 코드와 모델을 사용하여 이미지를 인식하는 두개의 코드로 구성됩니다.
이 코드를 먼저 실행하여 훈련 결과물인 모델 파라미터를 디스크에 저장합니다.
코드 설명은 다음 포스팅을 참고하세요.
예제로 배우는 텐서플로우 강좌 - 6. Logistic Regression( MNIST 데이터를 이용한 손글씨 인식 ) http://webnautes.tistory.com/1236 |
import tensorflow as tf |
9. 훈련된 모델을 사용하여 이미지로부터 숫자를 예측하는 코드입니다.
import tensorflow as tf |
참고한 코드
https://github.com/opensourcesblog/tensorflow-mnist/blob/master/mnist.py
마지막 업데이트 - 2018. 9. 5
'Deep Learning & Machine Learning > 강좌&예제 코드' 카테고리의 다른 글
Tensorflow 강좌 - 텍스트 분류( Text classification )를 위해 뉴럴 네트워크 학습 시키기 (0) | 2019.01.17 |
---|---|
Tensorflow 강좌 - Neural Network를 이용하여 실제 손글씨 숫자 인식해보기(MNIST) (7) | 2018.09.15 |
예제로 배우는 텐서플로우 강좌 - 7. 훈련된 모델 파라미터 저장하기 (0) | 2018.08.31 |
예제로 배우는 텐서플로우 강좌 - 6. Logistic Regression( MNIST 데이터를 이용한 손글씨 인식 ) (0) | 2018.08.31 |
예제로 배우는 텐서플로우 강좌 - 5. Linear Regression (15) | 2018.08.30 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!