마라톤 번호 인식 프로그램
마라톤을 뛰어 본 사람이라면 그 역사적인 순간을 사진으로 얼마나 간직하고 싶어 하는지 알 것이다.
(그렇다고 한다. 참고로 저는 마라톤을 뛰어본 적도 없고 앞으로 그럴 계획도 없다.)
그들이 가장 필요로 하는 것은 자신이 멋지게 뛸 때의 모습을 누군가 찍어줘서 SNS에 올릴 수 있도록 도와주는 것이다. 실제로 수많은 마라톤 대회에서는 고용된 사진사가 구간별로 사진을 찍어주고 있고, 이렇게 찍어낸 사진 수만 장을 아르바이트 생을 동원하여 정리 배열한다.
이세돌 사범과 알파고의 경기 이후 인공지능이 많은 일자리를 뺏을 것이라고 걱정하는 기사를 많이 나왔다. 사진 분류 아르바이트생들에게는 미안하지만, 이 브런치를 통해서 그들이 연락해온다면 그들이 머신러닝을 통해서 자신의 생산성을 높이는데 도와줄 용의가 충분히 있음을 밝힌다.
다음의 과정으로 개발한다.
1. 글자 인식(숫자) 학습
2. 번호판 인식 학습
3. 정확도를 높이기 위한 고민
엥? 저거 3개만 하면 되네.
먼저 글자 인식의 경우 이미 Google이 어지간한 언어는 다 학습시켜 놔서 더 이상 우리가 할게 없다.
그냥 가져다 쓰자.
1. 글자 인식(숫자) 학습 (Clear)
- https://github.com/tesseract-ocr/tesseract
확인해보니 35개 언어에 대해서 이미 학습을 다 시켜놓으셨다. 한국어도 보이네.
2. 번호판 인식
번호판 인식은 자동차 번호판 인식이 제일 흔하니 한 번 찾아보자.
- https://github.com/ruifeng2357/VehiclePlateOCR
헐.. 중국사람이 만들어 놓은 번호판 인식이 있네. (그 외에도 참 많다.)
그러면 이미 다 끝난 건가? 마라톤 사진을 한번 넣어보자.
- 엥? 하나도 인식을 못하네.
- 가설
1) 자동차 번호판은 주로 사진에 꽉 차게 찍히거나 특정 위치에서 찍힌다.
(주차장에 진입할 때 찍히는 것을 생각해보면 그럴 수도 있을 것 같다.)
2) 번호판의 모양이 자동차 번호판의 모양/색깔이 다르다.
(학습 데이터가 같은 나라의 번호판이라면 모양과 색이 유사할 테니 이 번호판은 인식이 잘 되지 않을 수도)
3) 한 화면에 너무 많은 번호판이 잡혀 계산량이 많다.
(사실 이 부분 때문에 아예 인식이 안되지는 않겠지만, 연산량을 줄이기 위한 작업은 필요할 것 같다.)
--> 이 부분은 OpenCV로 FaceDetection을 실행하고 그 하단에서 번호판을 찾는 식으로 진행하였다. 대부분의 경우 얼굴 아래에 번호판이 있으며(물구나무 제외), 얼굴크기에 비례하여 번호판의 크기가 변화한다고 생각하면 상당히 많은 연산을 줄일 수 있다.
일단 1번과 2번을 해결하기 위해서 번호판을 학습시키기로 한다.
랜덤 하게 샘플링한 이미지와 실제 번호판이 매칭 되는 경우를 찾아내며 학습에 성공.
학습한 결과가 파일로 잘 저장되었다.
자. 그러면 다시 한번 돌려 보자.
우와.. 대부분을 잘 찾아냈다.
(6043을 못 찾아낸 것은 번호판을 손으로 가려서 정확도를 위해서 버려진 것이다.)
무언가 순식간에 지나간 것 같다.
사실 비 전공자가 막상 해보려면 꽤 어려울 수도 있다.
하지만 여기서 중요한 사실은 예전에 수십 명이 팀을 이루어서 하던 프로젝트가 이제 1명이 끙끙대면서도 할 수 있다는 점이다.
이것이 포인트다.
엄청난 생산성 향상은 그 이후에 무서운 사회적 파고를 몰고 왔다는 역사적 사실 말이다.
누군가는 이것을 특이점(Singularity)이라고 말한다.
위기감이 느껴지지 않는 분들을 위해서, 다음번에는 더 재미있는 이야기로 찾아뵙도록 하겠다.