【Python】 OpenCV와 pyocr로 이미지에서 문자를 인식해보십시오

소개



Selenium을 이용하는 기사를 찾고 있으면, 조금 초밥 타 자동화의 기사를 발견했다.
기법으로는 기본적으로 다음과 같은 느낌
· 게임을 시작하면 모든 키를 계속 입력합니다.
・게임을 시작하면 스쿠쇼를 취해 OCR로 취득한 문자열을 입력
※스시타는 게임 화면이 Canvas 요소에 그려져 있으므로 직접 문자열을 취득할 수 없다

이번에는 OCR 부분과 사전 처리로 OpenCV를 사용한 간단한 이미지 처리를 시도했습니다.

사전 준비



tesseract 설치



tesseract는 OCR 엔진입니다.
이번에는이 OCR 엔진을 파이썬의 pyocr 모듈로 움직입니다.
설치는 다음 명령으로 완료
$ brew install tesseract

이번에는 일본어 테스트 데이터가 없으므로 다음 URL에서 다운로드
htps : // 기주 b. 코 m / 테세라 ct-cr / 테 s
↑이 URL로부터 jpn.traineddata를,/usr/local/share/tessdata/에 다운로드

pyocr 및 OpenCV 설치



터미널에서 다음 명령을 실행하면 완료
$ pip3 install pyocr
$ pip3 install opencv-python

우선 OCR 해보자



이미지 준비



테스트용 이미지는 다음

↓ 트리밍


자르는 것을 test.png라는 이름으로 저장

pyocr의 OCR


import cv2
import pyocr
from PIL import Image
image = "test.png"

img = cv2.imread(image)
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]
res = tool.image_to_string(
    Image.open("test.png")
    ,lang="eng")

print(res)

실행 결과

전혀 정확하게 인식되지 않습니다 ...
역시 사전 처리가 필요할 것 같아

OpenCV를 만져보세요



OpenCV에서 사전 처리하고 싶지만 OpenCV도 처음이므로 놀아 본다.
내 아이콘 이미지를 처리해 봅니다.
import sys
import cv2
import pyocr
import numpy as np
from PIL import Image
image = "test_1.png"
name = "test_1"

#original
img = cv2.imread(image)

#gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite(f"1_{name}_gray.png",img)

#goussian
img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imwrite(f"2_{name}_gaussian.png",img)

#threshold
img = cv2.adaptiveThreshold(
    img
    , 255
    , cv2.ADAPTIVE_THRESH_GAUSSIAN_C
    , cv2.THRESH_BINARY
    , 11
    , 2
)
cv2.imwrite(f"3_{name}_threshold.png",img)

처리 과정에서의 이미지는 이런 느낌


OpenCV + OCR



이전에 OCR에서 사용한 이미지를 OpenCV에서 사전 처리하고 다시 OCR을 실행해 봅니다.
이하에서는 사전 처리로서 그레이 스케일 → 임계치 처리 → 색 반전을 하고 있다
import sys
import cv2
import pyocr
import numpy as np
from PIL import Image
image = "test.png"
name = "test"

#original
img = cv2.imread(image)
cv2.imwrite(f"1_{name}_original.png",img)

#gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite(f"2_{name}_gray.png",img)

#threshold
th = 140
img = cv2.threshold(
    img
    , th
    , 255
    , cv2.THRESH_BINARY
)[1]
cv2.imwrite(f"3_{name}_threshold_{th}.png",img)

#bitwise
img = cv2.bitwise_not(img)
cv2.imwrite(f"4_{name}_bitwise.png",img)

cv2.imwrite("target.png",img)

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]
res = tool.image_to_string(
    Image.open("target.png")
    ,lang="eng")

print(res)



실행 결과


잘 인식할 수 있을 것 같다!
일단 이번에는 여기까지 끝납니다.

좋은 웹페이지 즐겨찾기