본문으로 바로가기

최근... (음 제가 보통 예약글로 발행하니까.. 어쩌면 연달아서) 발행한 글에서 케라스를 이용해서 MNIST 필기 숫자를 익하는 CNN 알고리즘을 간단하게 테스트하는 투토리얼을 학습한 후 마치 지가 한듯이(^^) 글을 올린적이 있는데요.[바로가기] 이번에는 그 때의 학습된 모델을 저장하고, 다시 읽어 와서 적용만 하는 부분과 내가 쓴 글씨를 인식하는 부분을 보여드릴려고 합니다. 먼저 학습을 수행한 이전 글[바로가기]에서 

저 위치에 model.save 명령으로 학습이 완료된 모델을 저장해둡니다. 이 내용은 김태영님의 블록과 함께 하는 파이썬 딥러닝 케라스[바로가기]에 있는 내용입니다. 아무튼 저렇게 저장하고 나면.. 이제 다른 파일에서 저 모델을 읽어주면 됩니다.^^

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

import sys
import tensorflow as tf
import keras

print('Python version : ', sys.version)
print('TensorFlow version : ', tf.__version__)
print('Keras version : ', keras.__version__)

저걸 실행하면 텐서플로우는 1.5, 케라스는 2.1.5라고 뜹니다. 당연히 제 경우죠^^

from keras.models import load_model
model = load_model('MNIST_CNN_model.h5')

이제. 위 코드로 이미 저장된 학습 모델을 읽어옵니다. 와우~

model.summary()

model.summary를 확인해보면

그때 학습한 모델이 맞네요^^ 이제.. 중요합니다.ㅋㅋㅋㅋ. 

연습장에다가 제가 숫자를 적은거죠.. 흠. 멋지게 테스트하고 싶었지만.. 그냥 이렇게 하는 걸로...ㅠㅠ

그리고, 저는 맥이라서 PhotoScape X로 크기를 28*28 픽셀로 일일이 바꾸어 주었습니다. pil이나, opencv로 멋지게 하는 것은 다음에.ㅠㅠ.

이렇게 크기를 조절하고.

음영반전을 주고, 블랙앤화이트 효과도 주었습니다.~~ 이걸...

import matplotlib.pyplot as plt
%matplotlib inline

test1 = plt.imread('./my_num/re_1.jpg')
plt.imshow(test1);

로 읽어보면...

이렇게 됩니다. 흠...ㅠㅠ.

test_num = plt.imread('./my_num/re_1.jpg')
test_num = test_num[:,:,0]
test_num = (test_num > 125) * test_num
test_num = test_num.astype('float32') / 255.

plt.imshow(test_num, cmap='Greys', interpolation='nearest');

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

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

이렇게 하면... 내가 쓴 숫자가 뭔지 확인할 수 있습니다. 세 번째줄의 > 125는 그냥 귀찮아서 자세히 안 알아보고 threshold 개념으로 125라고 줘버렸습니다. 지금은 그걸 정하는게 중요한게 아니라서요~^^

아하~~ 제가 쓴 숫자 1을 1이라고 생각해주는군요^^

2도...

3도... ㅎㅎㅎ. 살짝 무리하게 쓴 0은 몰라봤지만... 그래도 괜찮은 결과입니다.^^ 오늘 중요한 것은 학습된 모델을 그냥 사용만 해서, 내가 쓴 숫자를 확인해 보았다는 거죠.. 킁~~~^^


댓글을 달아 주세요

  1. BlogIcon 멜로요우 2018.04.18 08:45 신고

    숫자도 인식할수 있는 코드가 이렇게 따로 있네요. 볼때마다 대단하신거같아요!!

  2. BlogIcon 공수래공수거 2018.04.18 09:21 신고

    신기합니다
    재미있을듯도 하구요^^

  3. BlogIcon 스티마 2018.04.18 11:47 신고

    샘플이 아닌, 실제 데이터로 테스트를 하시다니,
    실전 적용이 바로 눈앞인건가요? ^^

  4. BlogIcon 북두협객 2018.04.18 13:27 신고

    이와 관련된 업무에 종사하시는지 궁금해지네요~

  5. BlogIcon 요니피그 2018.04.18 13:30 신고

    이런게 있다는 거 지난번에 와서 알게 되었는데 정말 컴터는 알면 알수록 알아야하는 것도 배울것들도 정말 많네요

  6. BlogIcon 휴식같은 친구 2018.04.18 13:47 신고

    0은 아무래도 정석대로 읽어내는 시스템이라 이상한 글짜로 인식하는건 맞겠는데요.
    신기하네요.
    잘 보고 갑니다.

  7. BlogIcon luvholic 2018.04.18 14:09 신고

    필기를 해서 모니터로 띄우셨네요! ㅋㅋ
    오늘도 작업결과를 잘 보고 갑니다~

  8. BlogIcon 귀요미디지 2018.04.18 16:14 신고

    뭔가 재미난 확인 학습 같아요 ㅎ
    오늘도 즐거운 하루 되세요 ^^

  9. BlogIcon peterjun 2018.04.19 01:39 신고

    '학습'이라는 게 키워드네요.
    참 신기해요. ^^

  10. BlogIcon Deborah 2018.04.19 02:35 신고

    아주 잘 하셨네요. 전 생소한 분야긴 하지만 이렇게 하시는걸 보면 대단하다고 느껴져요.

  11. BlogIcon 핑구야 날자 2018.04.19 06:45 신고

    필기체인식하는 건 정말 대단한 것 같아요 간단한 거 같아도

  12. BlogIcon 즐거운 우리집 2018.04.19 07:20 신고

    아주 잘 알아보네요.
    멋집니다 ^^

  13. BlogIcon Bliss :) 2018.04.19 12:25 신고

    시리즈 글이네요^^ 지가 한듯이ㅋㅋㅋㅋㅋㅋ에 빵 터졌습니다. 학습이 완료된 것은 자기의 지식 맞습니다아!! 숫자인데..저는 갑자기 제 얼굴을 컴으로 인식해보고 싶어졌어요. 사물 인식 결과 오징어가 나오면 안되는데....말이지요 - -; 맛점의 힘으로 활기찬 오후 되세요^^

  14. BlogIcon IT넘버원 2018.04.19 17:42 신고

    숫자도 인식해서 신기하기도 하고 재밌네요.^^