[인턴 프로젝트] 2. EasyOCR을 써보자

코드짜는침팬지·2023년 7월 20일
0
post-thumbnail

EasyOCR은 네이버 Clovaai의 CRAFT, deep-text-recognition benchmark 을 기반으로 만든 오픈 소스 라이브러리다. 코드는 파이썬으로 작성 되었고, 딥러닝을 기반으로 하여 텍스트를 이미지나 스캔한 문서에서 추출하는 기능을 제공한다.

라틴 문자 체계를 사용하는 언어뿐만 아니라 아시아 언어 등 80개 이상의 언어를 인식할 수 있다고 한다.

EasyOCR의 작동 방식은 크게 두 단계로 이루어져 있다:

  1. 텍스트 감지: 이 단계에서는 이미지 내에서 텍스트가 위치한 영역을 감지한다. 이 과정을 통해 텍스트가 있는 영역의 좌표를 알 수 있게 된다. 이 기능은 CRAFT(Character Region Awareness for Text Detection)라는 알고리즘을 사용하여 수행된다.

  2. 문자 인식: 감지된 텍스트 영역에서 개별 문자를 인식하고 이를 텍스트로 변환한다. 이 과정은 Convolutional Recurrent Neural Network (CRNN)이라는 딥러닝 모델을 사용한다.

EasyOCR의 깃허브 주소는 다음을 참고하면 된다.

https://github.com/JaidedAI/EasyOCR

CRAFT의 깃허브 주소는 다음을 참고하면 된다.

https://github.com/clovaai/CRAFT-pytorch

deep-text-recongition-benchmark의 깃허브 주소는 다음을 참고하면 된다.

https://github.com/clovaai/deep-text-recognition-benchmark

EasyOCR을 사용하기 전 우선 CRAFT와 deep-text-recognition-benchmark 공부해보면 좋은데
양이 많으므로 나중에 따로 리뷰 하겠다. 특히 VGG16이랑 U-NET은 딥러닝 분야에서 자주 쓰인다.

일단 환경설정부터 시작하자.

아나콘다 설치

  1. 다음 페이지를 방문한다. https://www.anaconda.com/distribution/.
  2. 본인의 컴퓨터에 맞는 OS버전을 설치한다. (Windows, macOS, Linux).
  3. 인스톨러를 설치하고 "Add Anaconda to my PATH environment variable"로 환경변수 추가한다.(default로 추가되니 그냥 next만 누르면 된다.)

아나콘다 환경 만들기

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 실행하기

이제 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()

일부 흐릿한 이미지들은 인식을 못하는것을 볼 수 있다.

profile
학과 꼴찌 공대 호소인

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 잘 읽었습니다, 고맙습니다!

답글 달기

관련 채용 정보