EasyOCR은 네이버 Clovaai의 CRAFT, deep-text-recognition benchmark 을 기반으로 만든 오픈 소스 라이브러리다. 코드는 파이썬으로 작성 되었고, 딥러닝을 기반으로 하여 텍스트를 이미지나 스캔한 문서에서 추출하는 기능을 제공한다.
라틴 문자 체계를 사용하는 언어뿐만 아니라 아시아 언어 등 80개 이상의 언어를 인식할 수 있다고 한다.
EasyOCR의 작동 방식은 크게 두 단계로 이루어져 있다:
텍스트 감지: 이 단계에서는 이미지 내에서 텍스트가 위치한 영역을 감지한다. 이 과정을 통해 텍스트가 있는 영역의 좌표를 알 수 있게 된다. 이 기능은 CRAFT(Character Region Awareness for Text Detection)라는 알고리즘을 사용하여 수행된다.
문자 인식: 감지된 텍스트 영역에서 개별 문자를 인식하고 이를 텍스트로 변환한다. 이 과정은 Convolutional Recurrent Neural Network (CRNN)이라는 딥러닝 모델을 사용한다.
EasyOCR의 깃허브 주소는 다음을 참고하면 된다.
CRAFT의 깃허브 주소는 다음을 참고하면 된다.
deep-text-recongition-benchmark의 깃허브 주소는 다음을 참고하면 된다.
EasyOCR을 사용하기 전 우선 CRAFT와 deep-text-recognition-benchmark 공부해보면 좋은데
양이 많으므로 나중에 따로 리뷰 하겠다. 특히 VGG16이랑 U-NET은 딥러닝 분야에서 자주 쓰인다.
일단 환경설정부터 시작하자.
easyocr로 새로운 환경을 만들건데 다음 명령어를 따르면 된다.
command:
conda create -n easyocr python=3.9
환경실행:
conda activate easyocr
easyocr 설치:
pip install easyocr
요구사항을 설치하기 위해 path를 찾아보자.
import easyocr
import os
print(easyocr)
<module 'easyocr' from 'C:\Users\joong\AppData\Roaming\Python\Python39\site-packages\easyocr\init.py'>
이제 아나콘다 프롬프트에서 디렉토리를 변경해주고
cd C:\Users\joong\AppData\Roaming\Python\Python39\site-packages\easyocr
요구사항을 설치해주자
pip install -r requirements.txt
opencv가 headless로 설치되는데 이거 쓰면 cv2.imshow가 안되서 상당히 불편하다.
환경을 따로 만들어준 이유
이제 easyocr을 실행 해보자
import cv2
import numpy as np
import easyocr
import matplotlib.pyplot as plt
from PIL import ImageFont, ImageDraw, Image
#src is gray scale of image
image = cv2.imread('yourpath')
src = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
reader = easyocr.Reader(['en'])
result = reader.readtext('yourpath')
image = Image.fromarray(image)
font = ImageFont.truetype("malgun.ttf", 15) # Adjusted font size to 5
draw = ImageDraw.Draw(image)
for i in result:
x = i[0][0][0]
y = i[0][0][1]
w = i[0][1][0] - i[0][0][0]
h = i[0][2][1] - i[0][1][1]
draw.rectangle(((x, y), (x+w, y+h)), outline="blue", width=2)
draw.text((int((x+x+w)/2), y-20), str(i[1]), font=font, fill="black") # Adjusted font color to black
#figsize 20 12
plt.figure(figsize=(20,12))
plt.imshow(image)
plt.show()
일부 흐릿한 이미지들은 인식을 못하는것을 볼 수 있다.
정말 잘 읽었습니다, 고맙습니다!