반응형

OCR이라는 기술은 정확히는 몰라도 한 번쯤은 들어봤거나 차량 번호판 인식, 카드번호 인식과 같이 이미 직ㆍ간접적으로 경험해 본 적이 있을 것입니다. OCR(Optical character recognition)의 역사는 생각한 것보다 매우 깁니다. 1928년에 독일의 G. Taushek가 미리 준비된 몇 개의 표준 pattern 문자와 입력 문자를 비교하여 표준 pattern 문자와 가장 유사한 것을 해당 문자로 선정하는 pattern matching 기법을 이용한 문자 인식 방법을 특허로 등록하면서 시작되었습니다. 연구소나 기업 등에서 대형 컴퓨터를 통하여 수행되던 것이 PC와 이미지 스캐너의 보급으로 우리 가까이 사용되기 시작하여 역사로는 이미 20년이 넘었다고 볼 수 있습니다. 하지만 굉장히 오래전부터 개발이 되어있음에도 불구하고 그 성능이 충분치 않습니다. 특히 종이(서류) 인식이나 한글과 같은 언어의 인식률은 매우 낮은 상태 입니다.

< 참고 : 위키백과 >

Global OCR 시장 1위 ABBYY 사인 경우에는 깨끗한 스캔 이미지에서는 높은 인식율을 보이지만 조금만 어려워진 환경, 스마트폰에서 촬영되거나, Scan, Fax 등의 이미지에서는 낮은 인식율로 업무 자동화에는 어려움을 겪고 있습니다.

저는 처음 OCR을 시작 했을 때 Tesseract 라이브러리를 이용하여 테스트했습니다. 몇 장의 이미지를 처리했을 때 나온 결과는 상당히 만족스러웠죠. 사용방법이 간단하기도 하고 신기했습니다.

그런데 추가적으로 다른 몇장의 이미지를 인식했을 때 말도 안되는 결과를 보고 좌절하고 말았습니다.

간단히 제가 느꼈던 느낌을 경험해 볼 수 있도록 Tesseract를 사용하여 가장 기본적인 OCR이 가능하도록 소개 드리도록 하겠습니다.


먼저, Tesseract가 설치되어 있지 않다면, 이전 글을 참고하시여 설치를 진행해 주시기 바랍니다.

import pytesseract
import cv2 
import matplotlib.pyplot as plt

테스트 하려는 이미지는 한글, 영어, 숫자가 혼합된 이미지 입니다.

path = 'asset/images/ocr_test.jpg'
image = cv2.imread(path)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# use Tesseract to OCR the image 
text = pytesseract.image_to_string(rgb_image, lang='kor+eng')
print(text)

결과>>

더보기

김윤웅

Kim Yunwoong

0123456789#$

생각보다 인식이 잘되었습니다. 그런데....

조금 희릿하거나, 노이즈가 있는 경우에는 매우 심각한 결과가 나오기도 합니다.

더보기

y - wesTPoRT,CT 06880

yHOLE FOODS NARKE
399 post RD WEST ~ ;

903) 227-6858

pAcoN LS NP
pacon LS N

BACON LS NP
pacon tS N

365


Tesseract OCR은 일부 이미지에서는 좋은 인식율을 보이지만, 그와 반대로 완전히 실패한 결과가 나오기도 합니다. 조금더 일관성 있는 결과를 만들기 위한 노력에 대해 다음 글에 작성하도록 하겠습니다.

Source Code

[ Colab ] Basic OCR


다음글

 

반응형