광학 문자 인식(ocr.html)
1. about
1.1. 소개
이미지 파일에서 글자를 추출(OCR)하거나 이미지의 일부를 잘라낸다.
1.2. 다운로드
https://github.com/logicielkr/misc/tree/master/Javascript_Source_Code/ocr
1.3. 호환성
다음의 환경에서 테스트했다.
- Firefox 최신버전
- Google Chrome 최신버전
IE 나 WebAssembly 를 지원하지 않은 legacy 에서 사용할 수 없는 것은 확실하다.
1.4. 의존성
CDN 에서 다음의 Javascript 라이브러리를 불러온다.
- jquery
- cropper.js
- opencv.js
- tesseract.js
2. 사용법
2.1. Notice
첫 번째 실행에서 참을 수 없을 만큼 느리다.
다음과 같이 CDN 에서 불러오는 데 크기가 매우 큰 것들 때문이고, 일단 웹브라우저의 cache 에 담긴 다음에는 쓸 만은 한다.
- opencv.js
- tesseract.js 에서 사용하는 데이타
정확도 높은 OCR 프로그램은 거인들이 제공하는 서비스를 권한다.
이 프로그램을 처음 만들 때는 거인들의 서비스가 신통치 않은 부분이 있어서 이미지에 맞추어서 적당히 소스를 변경해가면서 사용하면 쓸만은 했었지만, 이 글을 작성하는 시점에는 거인들의 서비스가 많이 개선되어, 이 프로그램을 계속해서 발전시켜 나갈 동기가 사라졌다.
필자도 이 프로그램은 이미지의 일부는 잘라내는 기능으로만 사용하고 있다.
2.2. 사용법
ocr.html 을 웹브라우저에서 불러온다.
이미지 파일 1개를 드래그 앤 드롭(Drag and Drop) 하거나, 상단의 "찾아보기"를 클릭해서 이미지를 선택한다.
마우스로 이미지의 일부를 선택한다.
마우스의 휠(Wheel) 기능을 이용하면, 이미지를 확대하거나 축소할 수 있다.
"변환" 버튼을 클릭해서 이미지를 추출한다.
이미지에 따라 다음과 같이 전처리를 지정할 수 있다.
- 흑백 : 이미지를 흑백으로 변환한 후에 OCR 를 수행한다.
- 노이즈- : 이미지의 노이즈를 제거한 후에 OCR 를 수행한다.
- 반전 : 이미지를 반전시킨 후에 OCR 를 수행한다(사진속에 포함된 글자에 적합).
"잘라내기" 버튼을 클릭해서 선택한 이미지를 잘라낸다.
3. 개발자를 위하여
3.1. OCR 프로그램의 정확도에 영향을 미치는 것들
Tesseract 의 버전
OCR 프로그램의 종류에 따라서도 달라질 수 있다.
이미지 전처리
전처리에 따라 정확도가 현저하게 차이가 나며, 이미지의 상태에 따라 다른 전처리를 해야 한다.
모든 이미지를 커버하는 슈퍼 전처리 같은 것은 없다.
이미지 전처리는 opencv 로 할 수도 있지만, ImageMagick 따위를 이용할 수도 있겠다.
이 프로그램은 도표나 선을 예정하지 않았으므로, 이에 특별히 취약하다.
이미지에 따라 자동으로 전처리의 종류를 결정하고, 다양한 전처리를 할 수 있다면, 정확도를 더 많이 끌어올릴 수 있을 것이라고 생각한다.
localization 전략을 사용한다면, 템플릿 같은 것을 사용할 수도 있을 것으로 생각한다.
whitelist 를 지정할 수 있다면 정확도가 약간 높아진다.
정확도가 매우 높은 수준까지 높아지는 것은 아니고, 다른 요소들이 더 많은 영향을 미친다.
Tesseract 에 공급되는 데이타
데이타를 개선 하는 작업을 "Tesseract Training" 이라고 부르는 것 같다.
상세한 사항에 대해서는 구글에서 검색하는 것으로 한다.
문서에 사용된 폰트 파일을 구해서 "Tesseract Training" 을 하면 인식율이 높아진다.
대한민국에서 유통되는 문서는 한글, 숫자, 영문이 뒤섞여 있는 경우가 많으므로 "Tesseract Training Data" 를 만들 때에도 이를 고려 할 필요는 있겠다.
모든 폰트를 "Tesseract Training" 으로 돌릴 수도 있겠지만, "Tesseract Training Data" 의 파일 크기가 너무 커질 수 있다.