일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바 실습
- 데이터분석
- 혼공머신
- JSP/Servlet
- 머신러닝
- CNN
- 중학1-1
- 컴퓨터구조
- C++
- SQL
- 데이터베이스
- 자바
- 정보처리기사필기
- 정수와유리수
- 텍스트마이닝
- pandas
- 파이썬
- html/css
- numpy/pandas
- 정보처리기사실기
- 파이썬라이브러리
- 연습문제
- 데이터입출력구현
- 딥러닝
- CSS
- 영어공부
- 코딩테스트
- 운영체제
- 중학수학
- 컴퓨터비전
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
딥러닝 비전 8 - [비전 에이전트 5] 우편번호 인식기 v.1 본문
벌써 7시가 훌쩍 넘었지만 이 단원까지만 공부하고 새벽 공부를 마치려고 한다. 오늘도 새벽 2시 반에 일어나서 5시간 가까이 공부를 진행 중이다. 이것까지 하면 5시간이 조금 넘을 것 같다.
우편번호 인식기 v1. 실습해보기
6장에서 재미있는 비전 에이전트 4개를 만들었다. 여기서는 사람이 필기한 우편번호를 인식하는 다섯 번째 비전 에이전트를 만든다. 필기한 우편번호를 인식하려면 필기 숫자 인식기가 필요한데, 이를 대비하여 프로그램 7-5의 42행에서 학습된 신경망을 dmlp_trained.h5 파일에 저장해두었다.
먼저 프로그램 7-7의 실행 결과를 보고 사용자 인터페이스를 파악하자. 5개의 빨간색 박스는 마우스로 숫자를 써 넣는 곳이다. e는 박스를 지우고, s는 박스에 숫자를 떼내어 명암 영상으로 표시하고, r은 인식을 하고, q는 끝내는 명령어다.
우편번호 인식기 v1.(DMLP 버전) 구현하기
이 코드는 사용자가 손으로 쓴 숫자 이미지를 인식하고 분류하는 GUI 애플리케이션이다. cv2를 사용해 윈도우 화면에서 숫자를 쓰고, tensorflow 모델로 숫자를 인식하는 프로그램으로, 숫자 이미지를 직접 그리고 인식 결과를 화면에 표시한다.
코드 요약
- 모델 로드: 학습된 신경망 모델을 불러온다.
- 초기화 및 그리기 설정: 초기 이미지를 설정하고, 숫자를 그릴 수 있는 영역을 만든다.
- 이미지 추출 및 인식: 숫자 이미지를 추출하고 모델을 통해 인식하며, 인식 결과를 화면에 표시한다.
- 이벤트 기반 작동: 키보드와 마우스를 이용해 그림을 그리고, 인식 결과를 시각화 및 확인할 수 있다.
코드 실행하기
하지만 실행해보니 글씨만 써지고 키보드가 하나도 동작하지 않았다. 이 부분은 어떻게 해결할 수 있을까?
코드를 수정하여 실행했지만 여전히 문제는 해결되지 않았다.
주석 설명
- try 블록: 프로그램의 주요 루프를 try 블록 안에 넣어서 예외 발생 시 프로그램이 안전하게 종료되도록 한다.
- while True: 루프: 무한 루프를 통해 프로그램이 지속적으로 실행되도록 한다.
- cv.imshow('Writing', img): "Writing" 창에 현재 그림 상태(img)를 표시한다.
- key = cv.waitKey(1) & 0xFF: 1밀리초 동안 키 입력을 기다리고, 하위 8비트만 사용하여 정확하게 키를 감지한다.
- 키 입력 처리:
- if key == ord('e'): 'e' 키가 눌리면 reset() 함수를 호출해 화면을 초기화한다.
- elif key == ord('s'): 's' 키가 눌리면 show() 함수를 호출해 현재 그려진 숫자 이미지를 시각화한다.
- elif key == ord('r'): 'r' 키가 눌리면 recognition() 함수를 호출해 그려진 숫자를 인식하고 결과를 표시한다.
- elif key == ord('q'): 'q' 키가 눌리면 break를 통해 무한 루프를 종료하고 프로그램을 종료한다.
- except KeyboardInterrupt: 사용자가 Ctrl+C를 눌러 프로그램을 강제 종료할 경우 발생하는 KeyboardInterrupt 예외를 처리하여, 종료 메시지를 출력하고 안전하게 종료되도록 한다.
- finally 블록: 프로그램이 종료될 때 항상 실행되는 코드로, 모든 창을 닫고 메모리를 해제하는 역할을 한다.
- cv.destroyAllWindows(): OpenCV의 모든 창을 닫는다.
- cv.waitKey(1): 창이 완전히 닫힐 수 있도록 대기 시간을 주어 안전하게 창을 닫는다.
이 코드 구조는 프로그램이 예기치 않게 종료되더라도 창을 안전하게 닫고, 메모리 누수를 방지해주는 역할을 한다.
학습을 마치고
도무지 해결이 되지 않아 이 프로그램은 다음에 다시 시도해보기로 했다. 오늘은 아침에 할일이 있어 여기에만 시간을 투자할 수가 없다. 오후에 다시 한번 이 코드를 실행하며 연구하다가 그래도 안 되면 다음으로 넘어갈 생각이다.
가끔씩 이런 상황이 발생한다. 분명 책과 같은 코드임에도 실행이 안 되고 내 컴퓨터 상황에는 맞지 않는 코드가 종종 있다.
'인공지능 > 컴퓨터 비전' 카테고리의 다른 글
컴퓨터 비전 6 - OpenCV 동영상 실습해보기 1 : 사진 이미지와 동영상 이미지 출력하기 (0) | 2024.11.14 |
---|---|
컴퓨터 비전 5 - 플라스크 실습해보기 (0) | 2024.11.14 |
딥러닝 비전 7 - 다중 퍼셉트론 구현하기 2 : 하이퍼 매개변수 다루기 (2) | 2024.11.13 |
딥러닝 비전 6 - 다층 퍼셉트론 구현하기 1 : 필기 숫자 인식과 성능 시각화 (0) | 2024.11.13 |
딥러닝 비전 5 - 학습 알고리즘 (0) | 2024.11.13 |