가끔 구글에 검색을 해봤는 데 최근에도 Tesseract를 사용한 OCR의 인식률을 높힐 수 있는 방법에 대한 포스팅이 없는 것 같아서 

인식률을 높히기 위해 고생 중인 Tesseract 사용자 분들을 위해 제 경험을 토대로 알려드리고자 합니다.


시작하기에 앞서, 이번 포스팅은 제가 Tesseract를 약 4개월동안 사용하고 낸 결론을 바탕으로하며 모바일 기준으로 적는 것임을 알려드립니다.



1. 모바일 Tesseract 활용을 위한 프로세스


모바일을 통해 OCR을 돌린다는 것은 PC에서 돌리는 것과 활용의 폭 차이가 매우 큽니다.

PC처럼 이미 가진 이미지 파일을 불러와서 OCR을 실행하는 것이 아니라 인쇄된 문서와 같은 것을 카메라로 촬영하여 즉시 텍스트로 출력시킬 수 있기 때문입니다. 이러한 활용 방식은 이미 많이 알려져있는 방식이지만, 아무래도 카메라로 촬영해서는 인식률 차이가 엄청나게 차이나서 많이들 고민하시는 부분입니다.


이 부분을 해결하기 위해서는 영상처리 기술이 필요하게 되는 데, 이중 가장 중요한 기법을 하나 소개하겠습니다.

바로 'Perspective Transform' 이라는 기술입니다.

자세히 이해할 필요는 없기 때문에 그냥 어떤 기술인지 알 수 있도록 링크를 하나 걸어드리겠습니다.


Perspective Transform 소개


간단히 줄여서 말씀드리자면 눕혀져있는 문서이미지를 정확하게 펴는 기술로, 캠스캐너라는 앱에서 체험하실 수 있는 기술입니다.

사용해보지 않으신 분들은 무료버전이 존재하니 한 번 설치해서 A4용지를 촬영해보시기를 권장합니다.


OpenCV에서 getPerspectiveTransform 함수를 활용하여 기능을 구현할 수 있는 데, 요즘 안드로이드 스튜디오에서 워낙 NDK개발을 쉽게할 수 있도록 만들어 놓기도 하였고 Android 버전의 OpenCV도 나왔기 때문에 영상처리라고 겁먹지 마시고 구현해보려고 노력하신다면 충분히 기본적인 기능 구현은 가능합니다.


이후 만약 문서에 깔끔하게 글자만 있는 게 아니라 잡영이나 홀로그램 등, OCR 인식에 방해할만한 요소가 있다면 원래대로라면 이를 없애줄 전처리가 필요하지만 그 부분은 영상처리의 전문지식을 요하는 터라 그나마 보완해줄 수 있는 방법으로 GrayScale을 Tesseract 실행 전에 이미지에 적용해주는 방법이 있습니다.



요약해드리자면

Perspective Transform - GrayScale(외 전처리 기술) - Tesseract - (후처리)순입니다. 

별거 없어 보이지만 매우 큰 차이를 보이고, 실제 기업들도 OCR 관련 기술들은 비슷한 프로세스를 따르고 있으니 시도해보시면 좋을 것 같습니다.



2. Tesseract에서 권장하는 환경


1) 폰트 크기 약 11-13pt 사이

2) 300dpi 이상의 이미지

3) 글자가 반듯하게 나오도록 Rotation

4) 글자 외의 Table이나 Border 삭제

5) 문장별로 적절하게 분할



다음 포스팅은 이번 포스팅에서 소개한 프로세스를 직접 실행하는 것을 보여드리는 것으로 할 것 같습니다.

이미 만들어 둔게 있긴 한데 저도 좀 정리를 해야할 것 같아서 언제 업데이트 해드릴지는 잘 모르겠네요.. ㅠㅠ



참고

1) Perspective Transform 소개 : http://miatistory.tistory.com/5

2) Tesseract 권장 환경 : https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality


+ Recent posts