OCR을 구현해보자

Date:     Updated:

카테고리:

태그: , ,

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별로 패키지를 제공한다.

image

윈도우의 경우 따로 설치파일을 제공한다.

windows 다운로드 : https://github.com/UB-Mannheim/tesseract/wiki

image

최신버전을 다운받은 후 설치를 진행하자

image

OCR을 위한 언어팩은 따로 다운로드 해야되니 설치할 때는 기본으로 설치한다.

image

설치 경로를 지정하고 메모해둔다.

image

설치 경로로 이동한다.

tessdata 라는 폴더로 이동한다. 이곳에 OCR 사용에 필요한 언어파일을 다운로드해야한다.

언어팩 : `https://github.com/tesseract-ocr/tessdata’

image

한글 OCR를 위해서 kor.traineddata를 다운로드 한다.

Tesseract 설치경로의 tessdata에 카피한다.

image

3-1 Tesseract 동작

image

환경변수에 윈도우 설치경로를 지정한다.

명령프롬프트(cmd) 창에서 아래와 같이 확인한다.

image

경로가 이상없다면 명령어가 정상적으로 실행된다.

샘플로 검색내용을 캡쳐한 이미지로 테스트를 진행한다.

image

파일은 test.png로 저장하였다.

공식 사이트의 명령어 구조는 아래와 같다.

image

쉽게 그냥 실행해보자

tesseract test.png stdout -l kor

image

이미지에서 텍스트를 추출하였지만 뭔가 좀 이상하게 출력된다.

옵션을 수정해서 다시 실행해보자

tesseract test.png stdout -l kor --psm 4 -c preserve_interword_spaces=1

image

원본 이미지와 거의 유사하게 변환이 된다.

문제점은 특수분자, 기호, 고유명사(ex : 삼성SDS, SK이노베이션)등은 자동으로는 변환이 제대로 되지 않는다.

이제 이것을 바탕으로 다음시간에는 파이썬으로 구현을 해볼 예정이다.


개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
댓글 또는 메일로 알려주시면 감사하겠습니다.

맨 위로 이동하기

python 카테고리 내 다른 글 보러가기

댓글 남기기