2024년 7월 16일 화요일

Python - Easy OCR

 

예전에 재밌어보이는 라이브러리를 하나 찾았는데

OCR : Optical Character Recognition

광학 문자 인식으로 이미지에 있는 텍스트를 문자열로 변환하는 기능인데

쓸만한 라이브러리로는 EasyOCR 이랑 테서렉트가 있음



두 개의 차이점으로 Easy 는 학습이 안돼고 테서렉트는 가능한거로 앎

코드는 파이참에서 테스트 했으며 터미널로 필요한 라이브러리를 설치하면 된다.



프로젝트를 생성하면 왼.아래쪽에 툴 윈도우가 있으며

도구중에서 터미널을 선택하여 명령어로 설치하면 된다.




설치해야 할 라이브러리는 총 두가지로 

이미지를 읽을 수 있는 OpenCV와 EasyOCR를 설치하면 된다.


OpenCV

pip install opencv-python 이건 GUI기능이 포함된거고

pip install opencv-python-headless 단순히 이미지 처리만 원한다면 

좀 더 가벼운 headless를 설치하면 된다.


EasyOCR

pip install easyocr



소스 코드

import cv2
import easyocr

reader = easyocr.Reader(['ko'], gpu=False)
src = cv2.imread("../../Data/Sample2.png", cv2.IMREAD_COLOR)

result = reader.readtext(src)
for (bbox, text, prob) in result:
    print(f"Text: {text}, Probability: {prob:.2f}")


GPU를 사용하지 않고 변환하는데 많이 느리다.

사용하고 싶으면 CUDA를 따로 설치한다음 gpu=True로 해주면 됨

 

테스트에 사용한 이미지는 이렇게 두가지로

투명 배경, 하얀 배경 둘다 잘 변환 됨



텍스트 뒤 Probability는 정확도로 0~1사이 백분율을 나타냄

만약 정확도를 더 높이고 싶으면 테서렉트를 사용하거나

이미지 처리를 통해 높이는 방법밖에 없음

댓글 없음:

댓글 쓰기

c++ thread.h

 c++에서 쓰레드 돌릴려면 thread.h 헤더를 쓰면 되는데 이 친구는 쓰레드가 아직 실행 중인지, 아니면 강제 종료하거나 하는 함수가 없어서 조금 아쉬운 애다. std::thread 는 로컬 변수로 선언하든 new 동적 할당을 하든 start 함...