OCR을 구현해보자
카테고리: python
태그: ocr, pytesseract, python
1. 시작 동기
이미지로 만들어진 PDF파일에서 텍스트 부분을 검색해야 되는 업무가 발생했다. OCR 전문 업체를 검색하고 자료를 검토하는 도중 SW 비용이 생각보다 많이 발생이 예정되었다. 정밀도가 많이 필요한 작업인지 여부가 문제였는데 일단 오픈소스로 개발을 진행해여 오차률을 분석하기로 하였다.
2. OpenSource OCR
오픈소스이며 한글이 가능한 대표적인 OCR은 3가지가 있다.
2-1 Tesseract
공식사이트 : https://github.com/tesseract-ocr/tesseract
Tesseract 라인 인식을 중심으로 장단기신경망(LSTM) 기반의 OCR 엔진이다.
- 유니코드(UTF-8)를 지원 하며 “기본적으로” 100개 이상의 언어를 인식 할 수 있다.
- PNG, JPEG 및 TIFF를 포함한 다양한 이미지 형식을 지원한다.
- 일반 텍스트, hOCR(HTML), PDF, IMAGE PDF, TSV 및 ALTO와 같은 다양한 출력 형식을 지원한다.
- 더 나은 OCR 결과를 얻으려면 Tesseract에 제공하는 이미지의 품질을 개선 해야 한다.
- GPU를 사용하지 않는다.
2-2 EasyOCR
공식사이트 : https://github.com/JaidedAI/EasyOCR
Tesseract 라인 인식을 중심으로 장단기신경망(LSTM) 기반의 OCR 엔진이다.
- 유니코드(UTF-8)를 지원 하며 “기본적으로” 100개 이상의 언어를 인식 할 수 있다.
- PNG, JPEG 및 TIFF를 포함한 다양한 이미지 형식을 지원한다.
- 일반 텍스트, hOCR(HTML), PDF, IMAGE PDF, TSV 및 ALTO와 같은 다양한 출력 형식을 지원한다.
- 더 나은 OCR 결과를 얻으려면 Tesseract에 제공하는 이미지의 품질을 개선 해야 한다.
- GPU를 사용하지 않는다.
3. Tesseract 설치
Tesseract, EasyOCR 두가지 모두 성능 테스트를 위해 사용해야 하지만 먼저 Tesseract로 실습을 진행하였다.
3-1 Windows 모듈 설치하기
설치 가이드 : https://tesseract-ocr.github.io/tessdoc/Installation.html
설치 가이드를 보면 각종 OS별로 패키지를 제공한다.
윈도우의 경우 따로 설치파일을 제공한다.
windows 다운로드 : https://github.com/UB-Mannheim/tesseract/wiki
최신버전을 다운받은 후 설치를 진행하자
OCR을 위한 언어팩은 따로 다운로드 해야되니 설치할 때는 기본으로 설치한다.
설치 경로를 지정하고 메모해둔다.
설치 경로로 이동한다.
tessdata
라는 폴더로 이동한다. 이곳에 OCR 사용에 필요한 언어파일을 다운로드해야한다.
언어팩 : `https://github.com/tesseract-ocr/tessdata’
한글 OCR를 위해서 kor.traineddata
를 다운로드 한다.
Tesseract 설치경로의 tessdata
에 카피한다.
3-1 Tesseract 동작
환경변수에 윈도우 설치경로를 지정한다.
명령프롬프트(cmd) 창에서 아래와 같이 확인한다.
경로가 이상없다면 명령어가 정상적으로 실행된다.
샘플로 검색내용을 캡쳐한 이미지로 테스트를 진행한다.
파일은 test.png
로 저장하였다.
공식 사이트의 명령어 구조는 아래와 같다.
쉽게 그냥 실행해보자
tesseract test.png stdout -l kor
이미지에서 텍스트를 추출하였지만 뭔가 좀 이상하게 출력된다.
옵션을 수정해서 다시 실행해보자
tesseract test.png stdout -l kor --psm 4 -c preserve_interword_spaces=1
원본 이미지와 거의 유사하게 변환이 된다.
문제점은 특수분자, 기호, 고유명사(ex : 삼성SDS, SK이노베이션)등은 자동으로는 변환이 제대로 되지 않는다.
이제 이것을 바탕으로 다음시간에는 파이썬으로 구현을 해볼 예정이다.
개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
댓글 또는 메일로 알려주시면 감사하겠습니다.
댓글 남기기