EasyOCR
EasyOCR
EasyOCR은 PyTorch 기반으로 만들어진, 바로 사용할 수 있는(ready-to-use) 경량 OCR 라이브러리예요. 이름 그대로 "쉬운 OCR"을 목표로 하며, 코드 몇 줄만으로 이미지 속 글자를 읽어낼 수 있어요. 딥러닝 모델이 필요하지 않고 설치부터 사용까지 간단하다는 게 큰 장점이에요.
80개 이상의 언어를 지원하고, 라틴어(Latin), 중국어(Chinese), 아랍어(Arabic), 데바나가리(Devanagari), 키릴(Cyrillic) 등 인기 있는 모든 문자 체계를 다룰 수 있어요. 텍스트 탐지(detection)에는 CRAFT 알고리즘을, 텍스트 인식(recognition)에는 CRNN 모델을 사용해요. 각 언어의 모델 가중치는 자동으로 다운로드되며, GPU가 없거나 메모리가 부족하면 gpu=False로 CPU 모드로도 실행할 수 있어요.
출처: 문서
본문
핵심 기능
- 바로 사용 가능한 OCR: 사전 학습된 모델을 제공해서 추가 학습 없이 곧바로 이미지에서 텍스트를 추출할 수 있어요.
- 80+ 언어 지원: 라틴어, 중국어, 아랍어, 데바나가리, 키릴 등 다양한 문자 체계를 지원해요.
- 모델 자동 다운로드: 선택한 언어의 모델 가중치를 자동으로 내려받아요. 직접 model hub에서 받아
~/.EasyOCR/model폴더에 넣어도 돼요. - 라이선스: Apache 2.0 (오픈소스)
설치
pip으로 설치할 수 있어요.
최신 안정 버전(stable release):
pip install easyocr
최신 개발 버전(development release):
pip install git+https://github.com/JaidedAI/EasyOCR.git
참고: Windows에서는 먼저 공식 안내(https://pytorch.org)를 따라 torch와 torchvision을 설치해야 해요. PyTorch 웹사이트에서 자신의 CUDA 버전에 맞는 옵션을 선택하세요. CPU 모드로만 실행한다면 CUDA = None을 선택하면 됩니다. Dockerfile도 제공돼요.
사용 예시
import easyocr
reader = easyocr.Reader(['ch_sim','en']) # this needs to run only once to load the model into memory
result = reader.readtext('chinese.jpg')
reader = easyocr.Reader(['ch_sim','en']) 줄은 모델을 메모리에 로드하는 작업이라 시간이 걸리지만, 한 번만 실행하면 돼요.
출력은 리스트(list) 형식으로, 각 항목은 바운딩 박스(bounding box), 감지된 텍스트, 신뢰도(confident level)를 각각 나타내요.
[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚园路', 0.3754989504814148),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
([[517, 81], [565, 81], [565, 123], [517, 123]], '东', 0.9989598989486694),
([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]
참고: ['ch_sim','en']은 읽고 싶은 언어 목록이에요. 한 번에 여러 언어를 지정할 수 있지만, 모든 언어를 함께 사용할 수 있는 건 아니에요. 영어는 모든 언어와 호환되며, 공통 문자를 많이 공유하는 언어끼리도 대개 호환돼요. 파일 경로 대신 OpenCV 이미지 객체(numpy array)나 이미지 파일의 bytes, 원본 이미지 URL도 넘길 수 있어요.
detail=0으로 설정하면 더 간단한 출력을 얻을 수 있어요.
reader.readtext('chinese.jpg', detail = 0)
결과:
['愚园路', '西', '东', '315', '309', 'Yuyuan Rd.', 'W', 'E']
GPU가 없거나 GPU 메모리가 부족하면 gpu=False를 추가해 CPU-only 모드로 실행할 수 있어요.
reader = easyocr.Reader(['ch_sim','en'], gpu=False)
더 자세한 내용은 tutorial과 API Documentation을 참고하세요.
커맨드 라인에서 실행
$ easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True
기술 배경
모든 딥러닝 실행은 Pytorch 기반이에요. 텍스트 탐지는 CRAFT 알고리즘을, 텍스트 인식은 CRNN 모델을 사용해요. CRNN은 특징 추출(feature extraction, 현재는 Resnet과 VGG 사용), 시퀀스 라벨링(sequence labeling, LSTM), 디코딩(decoding, CTC)의 세 가지 주요 구성 요소로 이루어져 있어요.