본문 바로가기

IT/개발

easyOCR을 이용하여 이미지에서 문자 인식해보기(초간단)

반응형

EasyOCR은 이미지 내의 텍스트를 감지하고 인식하는 데 사용할 수 있는 오픈 소스 라이브러리입니다

 

Python 프로그래밍 언어로 작성되어 사용하기도 편하고 상당히 훌륭한 인식율을 보여줍니다.

물론 다양한 언어를 지원하고 있어 응용범위도 넓습니다. 

 

1. easyOCR의 특징 

 

(1) 다양한 언어 지원

  EasyOCR80개 이상의 언어를 지원하며, 이를 통해 전 세계 다양한 문화와 언어의 텍스트 인식이 가능합니다.

 영어, 중국어, 한국어, 일본어, 아랍어 등 다양한 언어를 포함하고 있습니다.

 

(2) 딥러닝 기반

Convolutional Neural Networks(CNN)Recurrent Neural Networks(RNN), 그리고 CTC(Connectionist Temporal Classification) loss를 사용하여 텍스트 인식 모델을 구현하였으며 높은 정확도와 강력한 텍스트 인식 능력을 제공합니다.

 

(3) GPU 지원

GPU를 사용하여 처리 속도를 향상시킬 수 있습니다

 

(4) 간단한 API

사용자 친화적인 API를 제공하여, 몇 줄의 코드만으로도 이미지에서 텍스트를 추출할 수 있습니다

 

(5) 오픈 소스

GitHub을 통해 소스 코드에 접근할 수 있으며, 커뮤니티 기반으로 지속적으로 발전하고 있습니다. 누구나 기여할 수 있고, 개선 사항이나 새로운 기능을 제안할 수 있습니다..

 

파이썬 코드를 통해서 간단하게 이미지에서 문자를 인식하고 

그 결과를 이미지에 표시하여 확인해보겠습니다. 

 

2. 예제 코드 

import time
import easyocr
from PIL import Image, ImageDraw

#loading time이 길어서 체크 
start = time.time()

#OCR reader 생성
#ko, ja, en 등등 설정, 동시에도 가능 ['ko', 'en']
#ocr_model = easyocr.Reader(['ko'])  #CPU 사용
ocr_model = easyocr.Reader(['ko'], gpu=True)   #GPU 사용
 
print(f"model loading time : {time.time() - start}")

proc_time = time.time()
 
# 이미지에서 텍스트 인식
result = ocr_model.readtext('테스트이미지.png')

if len(result) > 0 :
   
    #인식된 문자열에 bbox를 그려서 확인
    # PIL로 이미지 로드
    image = Image.open('테스트이미지.png')  
    draw = ImageDraw.Draw(image)

    # 인식 결과 출력
    for detection in result:
        # detection 포맷: (bbox, text, confidence)
        bbox, text, confidence = detection
        print(f"Detected text:{bbox} {text} (Confidence: {confidence:.2f})")
       
        # 다각형 그리기
        draw.polygon([tuple(point) for point in bbox], outline='blue')

    image.save(f"bbox.png")
       
#loading time이 길어서 초기화로 옮김
print(f"proc time : {time.time() - proc_time}")

 

다음과 같은 이미지를 이용해서 인식된 문자열에 박스를 표시하여 저장해보았습니다. 

딱 봐도 너무 간단 하지요?

 

 

 

GPU를 사용하면 상당히 빠르게 동작합니다. 

 

model loading time : 15.14763331413269
Detected text:[[1073, 53], [1153, 53], [1153, 95], [1073, 95]] 파6 (Confidence: 0.07)
Detected text:[[1020, 106], [1158, 106], [1158, 130], [1020, 130]] 아는 형님 버이비모스터 (Confidence: 0.25)
Detected text:[[644, 198], [840, 198], [840, 300], [644, 300]] 달모 (Confidence: 0.23)
Detected text:[[642, 290], [1164, 290], [1164, 414], [642, 414]] 판시핑에계 (Confidence: 0.13)
Detected text:[[436, 494], [473, 494], [473, 513], [436, 513]] 판시터 (Confidence: 0.18)
Detected text:[[643, 398], [1194, 398], [1194, 526], [643, 526]] 물어보세요 (Confidence: 0.81)
proc time : 0.9032175540924072

반응형