포시코딩

[Python][OCR] Tesseract, pytesseract in Mac 본문

Python

[Python][OCR] Tesseract, pytesseract in Mac

포시 2023. 6. 15. 00:11
728x90

설치

homebrew install tesseract
pip install pytesseract
pip install pillow  # 이미지 분석, 처리 라이브러리

 

테스트 코드

test.py 파일과 테스트할 이미지를 같은 위치에 둔 상태로 아래 코드로 테스트 진행

from PIL import Image
import numpy as np
import pytesseract

filename = 'sample3.png'
img = np.array(Image.open(filename))
text = pytesseract.image_to_string(img)
print(text)
python test.py

명령어를 입력해 실행하면 

위 이미지에 대해 정상적으로 글자를 인식하는 것을 볼 수 있다.

이제 한글을 인식시켜보자

 

한글 인식

한글 인식을 위해 학습된 데이터가 필요하다.

https://github.com/tesseract-ocr/tessdata/

 

GitHub - tesseract-ocr/tessdata: Trained models with fast variant of the "best" LSTM models + legacy models

Trained models with fast variant of the "best" LSTM models + legacy models - GitHub - tesseract-ocr/tessdata: Trained models with fast variant of the "best" LSTM models + legacy...

github.com

위 링크에 들어가서 kor.traineddata를 다운로드해서 아래 위치에 넣어주면 되는데

cd /usr/local/Cellar/tesseract/5.3.1/share/tessdata
open .

이렇게 터미널로 이동 후 파인더로 오픈해서 옮겨주면 쉽게 옮길 수 있다.

 

코드

from PIL import Image
import numpy as np
import pytesseract

filename = 'sample3.png'
config = ('-l kor+eng')
# config = ('-l kor+eng --oem 3 --psm 11')
img1 = np.array(Image.open(filename))
text = pytesseract.image_to_string(img1, config=config)
print(text)

한글 인식의 경우 config 설정을 추가해줘야 하는데, 위 코드처럼 kor+eng를 세팅해주면 된다. 

그 뒤의 oem, psm은 OCR 엔진 모드와 페이지 세분화 모드에 대해 세팅해주는 부분인데

default 값이 있기 때문에 -l kor+eng만 적용하여 진행했다. 

 

oem, psm에 대한 자세한 설정은 아래 참고

OCR Engine modes(–oem):
0 - Legacy engine only.
1 - Neural nets LSTM engine only.
2 - Legacy + LSTM engines.
3 - Default, based on what is available.
Page segmentation modes(–psm):
0 - Orientation and script detection (OSD) only.
1 - Automatic page segmentation with OSD.
2 - Automatic page segmentation, but no OSD, or OCR.
3 - Fully automatic page segmentation, but no OSD. (Default)
4 - Assume a single column of text of variable sizes.
5 - Assume a single uniform block of vertically aligned text.
6 - Assume a single uniform block of text.
7 - Treat the image as a single text line.
8 - Treat the image as a single word.
9 - Treat the image as a single word in a circle.
10 - Treat the image as a single character.
11 - Sparse text. Find as much text as possible in no particular order.
12 - Sparse text with OSD.
13 - Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.

 

한글 인식 결과

테스트를 위해 위 게임 이미지를 사용하였고

컴퓨터에서 출력된 텍스트다보니 생각보다 결과물이 좋은 것을 볼 수 있다.

 

앞으로

외국서버에서 디코 채널을 통해 아이템 경매를 하는 것을 보고

아이템 종류마다 디코 채널을 구분하지 않으면 원하는 아이템을 찾기 힘들겠다는 생각이 들었고

만약 이미지를 올릴 때 어떤 종류인지, 어떤 부위인지만 걸러 필터링 해준다면 원하는 부위를 찾기 쉬울 것 같다는 생각이 들었다.

궁극적으로 배틀넷 인증 + 댓글을 통해 간단한 경매 시스템을 만들어 볼 생각이다. 

 

이전에 진행했던 프로젝트에서 풍경 이미지를 구글 vision api를 이용해 필터링하여 추천 시스템을 구축한 바 있는데

유료인데다 요청 후 결과를 받는 시간 때문에 직접 해당 로직을 구현하지 못한게 아쉬움으로 남아

이번 기회에 이미지 구별까진 아니지만 텍스트 인식을 파이썬 라이브러리를 통해 외부 api 도움 없이 구현해보려 한다.

 

잘 되서 진짜로 사람들이 이용할 수 있는 사이트가 만들어지길 기대해본다.

 

참고 사이트

https://ddolcat.tistory.com/954

 

[Python]파이썬 테서랙트(Tesseract OCR) 설치 및 사용방법 총정리 : 이미지에서 문자 텍스트 추출하는

지난 6월 8일 애플 WWDC 2021 전세계 개발자 회의에서 애플은 OCR 기능을 선보였습니다. 강의 영상을 사진으로 찍은 후 바로 문서화 하거나 또는 길거리 간판에서 사진을 찍은 후 사진속의 전화번호

ddolcat.tistory.com

https://ddolcat.tistory.com/690

 

[Python] 파이썬 이미지 처리 pillow(PIL) 설치 및 사용 예제 총정리:드루와

이미지 분석 및 처리를 쉽게 할 수 있는 라이브러리(Python Imaging Library : PIL)가 있습니다. 바로 pillow모듈입니다. 다양한 이미지 파일 형식을 지원하며, 강력한 이미지 처리와 그래픽 기능을 제공하

ddolcat.tistory.com

https://velog.io/@rlagksql219/python-Tesseract-OCR-글자-인식-qcsivues

 

[python] Tesseract-OCR 글자 인식

Tesseract를 활용한 OCR, MSER 알고리즘으로 텍스트 위치 bounding box 표시

velog.io

https://junyoung-jamong.github.io/computer/vision,/ocr/2019/01/30/Python%EC%97%90%EC%84%9C-Tesseract%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-OCR-%EC%88%98%ED%96%89%ED%95%98%EA%B8%B0.html

 

Python에서 Tesseract 사용하기 for OCR

Tesseract 이미지로부터 텍스트를 인식하고, 추출하는 소프트웨어를 일반적으로 OCR이라고 한다. Tesseract는 1984~1994년에 HP 연구소에서 개발된 오픈 소스 OCR 엔진이며, 현재까지도 LSTM과 같은 딥러닝

junyoung-jamong.github.io

728x90