OCR

OCR - Pytesseract 를 이용한 OCR

하급코더 2021. 3. 16. 00:09

이 내용은 예전에 딥러닝 스터디를 진행하면서 익힌 내용입니다. 근데 딥러닝은 안썼다.

www.pyimagesearch.com/2020/05/25/tesseract-ocr-text-localization-and-detection/

 

Tesseract OCR: Text localization and detection - PyImageSearch

In this tutorial, you will learn how to utilize Tesseract to detect, localize, and OCR text, all within a single, efficient function call.

www.pyimagesearch.com

파이 이미지 서치에 회원가입을 하고 자료를 신청하면 이메일로 자료를 보내주는데, 그 보내준 자료를 바탕으로 작성했던 내용입니다.

 

당시 스터디를 진행하셨던 선생님의 깃헙에서도 같은 내용을 확인할 수 있습니다.

 

github.com/dhrim/pis_study/tree/master/OCR

 

이번에는 장고에서 이를 활용할 수 있도록 함수 형태로 만드는 것으로 진행해보겠습니다.

 

-----------------------------------------------------------

 

OCR 은 optical character recognition (광학식 문자 인식)의 약자입니다. 간단한 예로는 수능 시험의 채점 방식이 있습니다. 우리나라에서의 OCR은 1989년도 우체국에서 처음 도입했을 만큼 오래된 기술입니다.

 

Pytesseract는 tesseract의 파이썬 wrapper입니다. (원본 C++ 구현체)

 

tesseract는 굉장히 오래된 OCR 오픈소스입니다. 2005년 휴렛페커드에 의해서 오픈소스가 공개되었고, 2006년부터는 구글이 개발하고 있습니다.

 

pytesseract 는 tesseract 의 warpper에 불과하므로, tesseract-ocr의 별도 설치가 필요합니다. 아래 코드와 같이 입력해서 알맞은 환경에서 사용하도록 설치를 진행합니다. 추가로 opencv를 기본적으로 사용하기에 같이 설치합니다.

 

<ubuntu (& google colab)>

sudo apt install tesseract-ocr

pip install pytesseract
pip install opencv-python

(colab에서 사용하려면 앞에 !를 붙여줍니다.)

 

 

<windows>

github.com/UB-Mannheim/tesseract/wiki

 

UB-Mannheim/tesseract

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

github.com

pip install opencv-python

 

 

 

아래는 opencv로 이미지를 불러와서 tesseract에 넣어주기만 하는 간단한 코드입니다.

 

<ocr_app/ocr_method/pytesseract_ocr.py>

import pytesseract
import cv2


def tesseract_ocr_extract(image_path):
    image = cv2.imread(image_path)
    rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = pytesseract.image_to_data(rgb, output_type=pytesseract.Output.DICT)
    return_list = [{
            "left": results["left"][i],
            "top": results["top"][i],
            "width": results["width"][i],
            "height": results["height"][i],
            "text": results["text"][i],
            "confidence": int(results["conf"][i])
            } for i in range(len(results["text"]))]
    return return_list

설명할게 별로 없습니다. left는 x좌표, top은 y좌표 라는 것 정도이고,  opencv는 좌상귀가 0점 이라는 것 정도...

 

text에는 추출한 텍스트가, confidence에는 확률이 기입됩니다.

 

위 함수를 바탕으로 다른 카테고리에서 연재중인 Django에 활용할 겁니다.

 

 

OCR.ipynb
0.04MB

스터디할 당시에 만들었던 OCR 관련 파일도 올려두었습니다. 이 포스팅보다는 저게 더 도움이 될지도 모르겠군요.