컴퓨터비전 마지막 프로젝트로 만들었던 숫자인식기.
단순히 웹캠으로 숫자를 비춰주면 어떤 숫자인지 판별해서 출력해주는 프로그램이다.
전체 프로그램은 Python을 이용해 구현했고, ctypes-opencv를 이용해 영상 처리 부분을 구현했으며, GUI는 PyQT를 이용해서 구현했다.
시간이 좀 부족해서 단순히 기본 템플릿 이미지(0~9)와 입력받은 영상의 일치하는 정도를 본 다음 가장 일치하는 정도가 높은 숫자를 출력해주는 방식으로 구현했는데, 비교 할 때 지표를 좀 더 추가한다면 적중률이나 폰트에 따른 편차 등이 줄어들지 않을까 싶다.
Python만 이용해서 구현했더니 속도가 너무 떨어져서(초당 1프레임도 안 나오는 듯) 픽셀 연산 부분은 따로 C++을 이용해서 구현 한 다음, DLL로 만들어서 Python에서 해당 함수들을 호출하는 방식으로 구현했다.

- 소스코드


- 발표자료
- 실행 가능한 버전(압축을 푼 뒤 NumberRecognizer.exe 파일을 실행)
- 결과

원본 이미지


Threshold 적용 후


Threshold를 적용 한 후, Morphology까지 적용


- 소스코드
선배들이 쉽다고 하는게 이해가 안갔는데, 막상 만들어놓고 보니 쉽긴 쉽다.
다만, 각 Color Space 별 특징이나 다른점 등을 이해하는게 어려운 듯.
역시나 이번껏도 막상 만들어놓고 제대로 만든건지 의문이다...
책 주문해놨으니, 오면 좀 제대로 봐야지...-_-;;


- 프로그램 작동 동영상


- 소스코드
우여곡절 끝에 겨우겨우 첫번째 Assignment를 끝냈다.
사실 선배들은 별로 필요 없는 프로그램이라고 했지만, 그래도 시작한건 끝내야하지 않을까 하는 생각에 한번 만들어봤다.
프로그램 자체는 별다른 기능이 없다.
하나의 이미지(이 프로그램상에서는 'test.jpg'라는 파일)를 읽어들여서 윈도우에 띄워 준 후, 해당 윈도우의 두 점을 클릭하면 새로운 윈도우가 뜨면서 클릭한 두 점 사이의 영역에 대한 R, G, B 평균값을 출력해 주는 것.
사실 이게 제대로 만든 프로그램인지 아직까지 잘 모르겠지만...공부하다보면 이 소스를 떠올리며 '그 땐 그랬지'라고 말 할 수 있겠지...
어쨌거나 더 열심히!

- 테스트 이미지 



- 소스코드

아직 OpenCV라는 Library에 대해 제대로 이해하고 있지 않기도 하고, 참고할만한 Reference를 찾아보지 않고 무작정 다뤄보는거라 어렵다.
게다가 C, C++을 다 잊어버린 상태라...-_-;
일단 선배들이 올려준 자료들을 보며 Assignment들을 해보고 있긴 한데...이벤트처리가 아직 미숙한 관계로 첫번째 Assignment의 절반만 해봤다.(참고로 아래 이미지는 그냥 작업하던 회사 컴퓨터에 있던 앨범아트를 쓴 것 뿐이다...-_-)


Xcode용 프로젝트 파일(소스코드 포함)

아래 코드는 특정 이미지를 불러와서 해당 이미지에 마우스 왼쪽버든을 클릭하는 이벤트가 발생 했을 때, 해당 위치에 "TEST"라는 텍스트가 출력되는 프로그램.
아주아주 매우매우 간단하지만...이 코드를 작성하는데도 시간이 좀 걸렸다...ㅠ_ㅠ
그래도 결과가 눈에 바로바로 보이니까 재미있다. :)
앞으로 열심히 해봐야지~!

+ Recent posts