https://wandukong.tistory.com/8
이전 포스팅에서 EasyOCR를 소개했었는데요, 오늘은 이어서 EasyOCR을 사용하는 방법을 설명하려 합니다.
(1) anaconda 가상 환경 만들기
anaconda 가상 환경을 만들어줍시다.
conda create -n "easyocr" python=3.7 -y
conda activate easyocr
(2) EasyOCR 설치
아래 명령어로 easyocr을 설치합니다.
pip install easyocr
(3) 기본 사용 방법
실험에 사용할 이미지를 준비해줍니다. 저는 easyocr 레포지토리의 예시 이미지를 사용했습니다.
import easyocr
reader = easyocr.Reader(['en']) # 'en': 영어로 설정
result = reader.readtext('ex.png')
print(result)
사용하고 싶은 언어로 reader를 만들고 readtext 함수를 사용하면 간단하게 end-to-end ocr 을 실험해 볼 수 있습니다.
print 결과입니다. Detection 박스 좌표, Recognition 결과, Confidence를 차례대로 보여주는 것을 알 수 있습니다.
참고로 easyocr의 영어 성능은 꽤 좋은 편이지만, 한글 성능은 영어에 비하면 좋은 편은 아닌 것 같습니다. (제피셜,,)
한글을 실험해보고 싶다면, 아래와 같이 'en' -> 'ko'로 바꿔주시면 됩니다.
reader = easyocr.Reader(['ko']) # 'ko': 한글로 설정
+ 01/16 기준 opencv error
참고: https://github.com/opencv/opencv-python/issues/602
craft_utils.py", line 31, in getDetBoxes_core nLabels, labels, stats, centroids = cv2.connectedComponentsWithStats(text_score_comb.astype(np.uint8), connectivity=4)
cv2.error: Unknown C++ exception from OpenCV code
위와 같은 opencv의 connectedComponentsWithStats 함수에서 에러가 발생하는데
opencv 4.5.5.62 버전에서 위와 같은 에러가 발생한다고 합니다.
기존 opencv를 uninstall 하고 4.5.4.60 버전으로 설치하면 해결됩니다.
pip install opencv-python==4.5.4.60
(4) 다양한 기능
1. cpu/gpu 사용
Reader클래스의 내부를 보면 gpu=True가 default 값입니다.
참고로 gpu를 사용했을 때 easyocr 속도가 훨씬 빠릅니다.
cpu만을 사용하고 싶다면 이렇게 설정해주시면 됩니다.
reader = easyocr.Reader(['en'], gpu=False)
단, gpu를 True로 설정해놓아도 pytorch를 cpu버전으로 설치했다면 cpu만을 사용하게 됩니다.
2. detection 과 recognition을 분리해서 사용
위에서 사용해 보았던 readtext 함수는 detection + recognition 을 한 번에 실행합니다.
easyocr에서는 detection과 recognition을 따로 할 수 있도록 분리되어 있는데요,
import easyocr
reader = easyocr.Reader(['en'])
result = reader.detect('ex.png') # detect 함수 사용
print(result)
이렇게 readtext 함수를 detect로 바꿔주면 detect만 따로 실험해 볼 수 있습니다.
아까랑은 다르게 Bounding Box 정보만 출력되는 것을 볼 수 있습니다.
recognition도 마찬가지로 recognize 함수로 따로 실험해볼 수 있습니다.
3. 다양한 parameter 사용
readtext 함수의 내부만 들여다 봐도 이렇게나 많은 parameter가 존재합니다.
사용자가 원하는 대로 값을 설정해서 사용하면 됩니다.
저는 그 중에서도 rotation_info 에 대해 조금 소개를 드리려고 합니다.
왜냐하면 제가 만든 기능이기 때문입니다 우하하,,
바로.. 회전된 문자열에 대해서도 인식이 가능하도록 하는 기능입니다.
기존 EasyOCR에서 회전된 문자열을 인식할 수 없는 것에 대해 issue가 자주 있었어서 해결해보았습니다.
최근 업데이트 내용을 확인해보니 이 기능이 더 개선되었더라구요.
자세한 내용은 최근 업데이트 내용을 확인해보시면 좋을 것 같습니다 ㅎㅎ
이 글이 EasyOCR을 사용해보려는 누군가에게 도움이 되었길 바랍니다!☺️
다음에는 EasyOCR을 학습하는 방법도 포스팅하겠습니다.
'머신러닝 > OCR' 카테고리의 다른 글
[논문 리뷰] SynthTIGER 리뷰 (0) | 2022.03.18 |
---|---|
pytesseract 사용방법 (0) | 2021.11.04 |
EasyOCR 소개 (0) | 2021.10.10 |
Tesseract OCR 5.0 Windows용 학습 방법 (23) | 2021.08.26 |
Tesseract OCR (0) | 2021.05.08 |