【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)
실행 결과
잘 인식할 수 있을 것 같다!
일단 이번에는 여기까지 끝납니다.
Reference
이 문제에 관하여(【Python】 OpenCV와 pyocr로 이미지에서 문자를 인식해보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pon187/items/f9a70fd52cc91ddb4ed7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
실행 결과
잘 인식할 수 있을 것 같다!
일단 이번에는 여기까지 끝납니다.
Reference
이 문제에 관하여(【Python】 OpenCV와 pyocr로 이미지에서 문자를 인식해보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pon187/items/f9a70fd52cc91ddb4ed7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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도 처음이므로 놀아 본다.
내 아이콘 이미지를 처리해 봅니다.
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)
실행 결과
잘 인식할 수 있을 것 같다!
일단 이번에는 여기까지 끝납니다.
Reference
이 문제에 관하여(【Python】 OpenCV와 pyocr로 이미지에서 문자를 인식해보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pon187/items/f9a70fd52cc91ddb4ed7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
Reference
이 문제에 관하여(【Python】 OpenCV와 pyocr로 이미지에서 문자를 인식해보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pon187/items/f9a70fd52cc91ddb4ed7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)