일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 게임
- nestjs
- Bull
- mongoose
- flask
- JavaScript
- 자료구조
- cookie
- TypeScript
- typeORM
- Express
- dfs
- AWS
- Python
- class
- Nest.js
- GIT
- Sequelize
- Dinosaur
- MySQL
- nodejs
- MongoDB
- jest
- Queue
- 공룡게임
- 정렬
- game
- react
- OCR
- Today
- Total
포시코딩
[Python][OCR] Tesseract, pytesseract in Mac 본문
설치
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/
위 링크에 들어가서 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
https://ddolcat.tistory.com/690
https://velog.io/@rlagksql219/python-Tesseract-OCR-글자-인식-qcsivues
'Python' 카테고리의 다른 글
[Python] 소수점 n 자리까지 출력 (0) | 2023.05.16 |
---|---|
[Python] 재귀함수 제한 높이기(setrecursionlimit) (0) | 2023.04.25 |
리스트 초기화 방법과 리스트 컴프리헨션 활용 (0) | 2023.04.24 |
[Python] max에 조건 달기 (0) | 2023.04.23 |
집합 자료형 set (0) | 2022.12.27 |