우와!
지난 realtime object detection model을 이용한 시각장애인 음성안내 카메라 서비스 플젝을 마무리하고
이젠 비전 안봐~ 했는데 어쩌다보니 비전 카테고리에 글을 쓸일이 생겼네요..ㅋㅋㅋㅋ 원래 인생이 그렇지 머 ~~
광학 문자 인식 (Optical Character Recognition;OCR)은 입력/ 필기 / 인쇄된 텍스트 '이미지'를 기계가 읽을 수 있는 인코딩된 '텍스트'로 변환하는 데 사용되는 기술이다.
즉, input = 이미지 / output = 텍스트
OCR을 하기 위해서 어떤 api 또는 파이썬 라이브러리를 사용할 수 있는지 조사해봤다.
내가 사용할 input 이미지는 겨울방학에 비타민에서 진행된 시계열 프로젝트의 발표 ppt이다.
1. Tesseract
- 오픈소스 / 무료
- 개발환경 구성
macOS의 경우 homebrew로 $ brew install tesseract 하면 설치 가능
하지만 나는 윈도우이므로
깃헙에서 Tesseract installer for Windows 를 찾아 설치한다.
버전 따로 찾을 필요 없이 윈도우 64bit용 가장 최신 버전 (tesseract 5.4.0)이 가장 최근 installer로 떴다. (2024년 7월 7일 기준) installer를 다운받고 실행시킨다.
미리 만들어둔 conda python 3.9환경에서 opencv, pytersseract를 설치해준다.
- 인식 구현
이제 환경 setting은 마쳤으니까 우리의 pdf 파일에 있는 텍스트들을 Tesseract OCR 엔진으로 인식해보자.
두근두근~~
그런데 이런 에러가 발생했다.
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.
Troubleshooting : 아래 코드 한 줄 추가해주면 끝!
pytesseract.pytesseract.tesseract_cmd = r'C:/Program Files/Tesseract-OCR/tesseract.exe'
(단 경로는 아까 설치할 때 설치했던 본인의 경로로 바꿔줘야함)
결과를 보면 이미지의 일부가 텍스트로 잘못 detect된 경우(False Positive)와,
일부 글씨를 detection은 했지만, recognition이 잘못된 경우가 존재했다. ('시계열'이라는 text가 있음을 detect했지만, 이를 'AIS'로 recognized)
하나만 더 해보자!
여기서도 글씨 detection은 했지만, recognition이 잘못된 경우가 존재했다. ('모멘텀'을 'aay'로 인식)
첫 페이지에서 '시계열'을 잘못 인식한 이유는 ppt에서 이미지 상 '시계열'이라는 텍스트가 현재 자간이 좁은 상태 / 글씨가 너무 작았기 때문일 것이라 추측된다. 왜냐하면 두번째 페이지에서는 '시계열'이라는 단어가 제대로 인식되었기 때문이다.
두번째 페이지에서 '모멘텀'의 오인식 원인으로는 내 뇌피셜 : tesseract 라이브러리를 다운받을 때 한국어 trained data : tessdata에 해당 단어들이 미포함된 상태로 학습된 것이 원인인 것 같다.
왜냐하면 아래처럼 개 크게
모멘텀
만 써서 이미지를 넣는 방식으로 재실험했음에도 불구하고 tesseract-OCR output이 잘못 나오기 때문이다.
현재 내가 프로젝트에서 OCR을 이용하는 부분은 PDF 이미지들만 input으로 입력되는 상황이기 때문에
recall값이 낮을 염려는 많이 안해도 될 것 같다. (보통 찾아보니까 영수증, 손글씨 이런 이미지를 input으로 넣었을 때 존재하는 글씨를 아예 detection을 하지 못하는 경우 : False Negative 에 대해서 염려가 많아 이미지 전처리를 다양하게 하던데, 내 use case는 해당 경우는 아님)
오늘 OCR API 중 tesseract-OCR을 이용한 간단 구현을 해보았다.
다른 tool들도 실험해보면서 best performance를 낼 수 있는 method 선정까지 오늘 다 해보려 했지만
저녁 밥먹고 넘 배불러서 산책나가고 싶다.
그래서 다음 편(들)에는 다른 tool들 실험, performance를 비교할 수 있는 지표 선정, 그리고 어떻게 잘못 인식된 글씨들을 최대한 바로잡을 수 있을지에 대한 고민 (여기서부터는 nlp로 접근), 그리고 마지막으로 reconstruction 단계에서 알아서 배열, 출력된 결과물을 내가 원하는 방식으로 re-reconstruct 할 수 있을지에 대한 방법에 대해서 적어봐야겠다~~
'Study > 비전' 카테고리의 다른 글
[OCR] 광학 문자 인식 기술 (2) (2) | 2024.07.12 |
---|---|
[Object Detection] R-CNN (0) | 2024.03.26 |
CV Tasks에 대하여 (2) | 2024.03.14 |