본문 바로가기

IT/개발

paddle OCR을 이용해서 문자 인식 해보기(easy OCR과 결과 비교)

반응형

 

PaddleOCR은 중국어, 한글 등 여러 언어를 지원하는 PaddlePaddle 기반의 OCR 라이브러리입니다.

 

관련된 작업을 할 일이 있어서 Tesseract OCR, Easy OCR, Paddle OCR 을비교해보고 있는데 

결과적으로 paddle OCR이 성능이 상당이 좋네요. 

 

확인해보겠습니다. 

 

1     필요한 패키지 설치

 

pip install paddlepaddle

pip install paddleocr

 

*gpu 사용시

pip install paddlepaddle-gpu 

 

2. 기본 코드 작성 

 

이미지 읽어서 박스치고 아래에 인식된 문자열 출력 하는 코드 

 


from paddleocr import PaddleOCR
from PIL import Image, ImageDraw, ImageFont
import numpy as np

# PaddleOCR 리더 생성 (한글 'korean' 설정)
ocr = PaddleOCR(lang='korean')

# 이미지 로드
image_path = 'data/images/car_01.jpg'
image = Image.open(image_path)

# 텍스트 검출
#result = ocr.ocr(image_path, cls=True)
image_np = np.array(image)
result = ocr.ocr(image_np, cls=True)

# PIL의 이미지를 수정하기 위한 객체 생성
draw = ImageDraw.Draw(image)
font_path = "font/NanumGothic-Bold.ttf"  # 폰트 파일 경로 설정
font = ImageFont.truetype(font_path, 24)  # 폰트 크기 설정

# 결과 시각화
boxes = [line[0] for line in result[0]]
texts = [line[1][0] for line in result[0]]
scores = [line[1][1] for line in result[0]]

# 이미지에 박스와 텍스트 그리기
for (box, text, score) in zip(boxes, texts, scores):
    (top_left, top_right, bottom_right, bottom_left) = box
    top_left = tuple(map(int, top_left))
    bottom_right = tuple(map(int, bottom_right))

    # 텍스트 및 확률 출력
    print(f"Detected text: {text} (Probability: {score:.2f})")

    # 박스 그리기
    draw.rectangle([top_left, bottom_right], outline=(0, 255, 0), width=2)
    #draw.text(top_left, text, font=font, fill=(255, 0, 0))  # 빨간색 텍스트
    draw.text(bottom_left, text, font=font, fill=(255, 0, 0))  # 빨간색 텍스트

# 이미지 저장
image.save("result.jpg")

 

Detected text: 이전 (Probability: 0.84)
Detected text: 전자 (Probability: 0.83)
Detected text: 07:00- (Probability: 0.96)
Detected text: 전 (Probability: 1.00)
Detected text: 10:00 (Probability: 1.00)
Detected text: 용 (Probability: 1.00)
Detected text: 토요일 (Probability: 1.00)
Detected text: 공휴일 (Probability: 0.97)
Detected text: 제외 (Probability: 0.94)
Detected text: 후원치과원 (Probability: 0.91)
Detected text: 해이터치 (Probability: 0.90)
Detected text: 기 (Probability: 0.97)
Detected text: 중비원지과 (Probability: 0.79)
Detected text: 소내원지파과 (Probability: 0.78)
Detected text: WORL (Probability: 0.94)
Detected text: 74오8761 (Probability: 0.95)
Detected text: 야 (Probability: 1.00)
Detected text: 시말54 (Probability: 0.61)

 

 

3. easy OCR과  결과 비교 

 

같은 방식으로 easy OCR과 비교해서 확인해보겠습니다. 

 


import easyocr
import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

# EasyOCR 리더 생성 (한글 'ko'와 영어 'en' 설정)
reader = easyocr.Reader(['ko', 'en'])

# 이미지 로드
image_path = 'data/images/car_01.jpg'
image = Image.open(image_path)

# 텍스트 검출
image_np = np.array(image)
results = reader.readtext(image_np)

# PIL의 이미지를 수정하기 위한 객체 생성
draw = ImageDraw.Draw(image)
font_path = "font/NanumGothic-Bold.ttf"  # 폰트 파일 경로 설정
font = ImageFont.truetype(font_path, 24)  # 폰트 크기 설정

# 이미지에 박스와 텍스트 그리기
for (bbox, text, prob) in results:
    (top_left, top_right, bottom_right, bottom_left) = bbox
    top_left = tuple(map(int, top_left))
    bottom_right = tuple(map(int, bottom_right))

    # 텍스트 및 확률 출력
    print(f"Detected text: {text} (Probability: {prob:.2f})")
   
    # 박스 그리기
    draw.rectangle([top_left, bottom_right], outline=(0, 255, 0), width=2)    
    draw.text(bottom_left, text, font=font, fill=(0, 255, 255))  # 하늘색

# 이미지 저장
image.save("result_easyocr.jpg")
 

 

Detected text: (07:O0~ (Probability: 0.20)
Detected text: ; (Probability: 0.01)
Detected text: 전용 (Probability: 1.00)
Detected text: I로요go] (Probability: 0.03)
Detected text: 면 (Probability: 0.47)
Detected text: [공휴일 제외 (Probability: 0.51)
Detected text: 부 (Probability: 1.00)
Detected text: 푹 (Probability: 0.35)
Detected text: 천그 (Probability: 0.16)
Detected text: wOnL (Probability: 0.29)
Detected text: 이진런 (Probability: 0.20)
Detected text: # (Probability: 0.04)
Detected text: {7428761 (Probability: 0.44)
Detected text: @ (Probability: 0.27)
Detected text: 27S148) (Probability: 0.17)
Detected text: 운원치과 (Probability: 0.25)
Detected text: tl터씨  (Probability: 0.03)

 

 

 

 

다음은 참고

 

https://yongeekd01.tistory.com/185

 

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

Tesseract OCR (Optical Character Recognition)은 이미지에서 텍스트를 추출하는 데 사용되는 강력하고 오픈 소스 소프트웨어로 다양한 운영 체제에서 널리 사용되고 있습니다.  Tesseract는 Hewlett-Packard (HP)

yongeekd01.tistory.com

 

 

https://yongeekd01.tistory.com/184

 

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

EasyOCR은 이미지 내의 텍스트를 감지하고 인식하는 데 사용할 수 있는 오픈 소스 라이브러리입니다  Python 프로그래밍 언어로 작성되어 사용하기도 편하고 상당히 훌륭한 인식율을 보여줍니다.

yongeekd01.tistory.com

 

반응형