우와!

지난 realtime object detection model을 이용한 시각장애인 음성안내 카메라 서비스 플젝을 마무리하고

이젠 비전 안봐~ 했는데 어쩌다보니 비전 카테고리에 글을 쓸일이 생겼네요..ㅋㅋㅋㅋ 원래 인생이 그렇지 머 ~~ 

 

 

 

광학 문자 인식 (Optical Character Recognition;OCR)은 입력/ 필기 / 인쇄된 텍스트 '이미지'를 기계가 읽을 수 있는 인코딩된 '텍스트'로 변환하는 데 사용되는 기술이다.

즉,  input = 이미지 / output = 텍스트

 

OCR을 하기 위해서 어떤 api 또는 파이썬 라이브러리를 사용할 수 있는지 조사해봤다. 

내가 사용할 input 이미지는 겨울방학에 비타민에서 진행된 시계열 프로젝트의 발표 ppt이다. 

 

 

1. Tesseract

 

- 오픈소스 / 무료

 

GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract

github.com

 

- 개발환경 구성

 

macOS의 경우 homebrew로 $ brew install tesseract 하면 설치 가능

하지만 나는 윈도우이므로 

깃헙에서 Tesseract installer for Windows 를 찾아 설치한다. 

 

 

버전 따로 찾을 필요 없이 윈도우 64bit용 가장 최신 버전 (tesseract 5.4.0)이 가장 최근 installer로 떴다. (2024년 7월 7일 기준) installer를 다운받고 실행시킨다. 

 

여기서 + Additional language data 의 [+]를 눌러주고 쭉 내리다보면 'Korean'이 나온다. 체크박스 체크해주기.
여기서 Tesseract를 꼭 실행시킬 파이썬 가상환경이 존재하는 드라이브에 설치한다. 그리고 위의 installer exe 설치 안내문에 WARNING이라고 나와있듯이 웬만하면 걍 자동으로 뜨는 권장 Destination Folder에 설치한다.

 

 

와 설치를 완료했다. 그럼 아까 설정한 경로에 Tesseract-OCR 디렉토리가 새롭게 추가됨을 확인할 수 있다.

 

 

미리 만들어둔 conda python 3.9환경에서 opencv, pytersseract를 설치해준다. 

 

중간에 pytesseract 철자 잘못써서 삐꾸나서 가림. 무시해주세요.

 

 

- 인식 구현

 

이제 환경 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