我已经阅读了pytesseract上的大量文章,但我无法从一幅简陋的简单图像中读取文字;它返回一个空字符串。
这是图片:
我已经尝试过缩放,灰度缩放,以及调整对比度,阈值,模糊等其他文章中所说的一切,但是我的问题是我不知道OCR想要更好地工作。是否需要模糊的文字?高对比度?
要尝试的代码:
import pytesseract
from PIL import Image
print pytesseract.image_to_string(Image.open(IMAGE FILE))
您可以在我的代码中看到,该图像存储在本地计算机上,因此Image.open()
答案 0 :(得分:12)
有几个原因:
边缘不锋利且不连续(锐化是指光滑,没有牙齿)
图像太小,您需要调整大小
缺少字体(不是必需的,但经过训练的字体难以置信地提高了识别的可能性)
基于要点1)和2),我能够识别文本。
1)我将图像调整为3倍大小,2)模糊图像以使边缘平滑
import pytesseract
import cv2
import numpy as np
import urllib
import requests
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
from PIL import Image
def url_to_image(url):
resp = urllib.request.urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
url = 'https://i.stack.imgur.com/J2ojU.png'
img = url_to_image(url)
retval, img = cv2.threshold(img,200,255, cv2.THRESH_BINARY)
img = cv2.resize(img,(0,0),fx=3,fy=3)
img = cv2.GaussianBlur(img,(11,11),0)
img = cv2.medianBlur(img,9)
cv2.imshow('asd',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
txt = pytesseract.image_to_string(img)
print('recognition:', txt)
>> recognition: Gm
此脚本非常适合测试网络上的任何图像
所有处理均基于您发布的图片
文本识别并不容易。每次识别都需要特殊处理。如果您尝试使用其他图像执行此步骤,则可能根本无法工作。重要的是要对图像进行大量识别,以便您了解tesseract的需求
答案 1 :(得分:12)
尝试一些类似的方法
import pytesseract
from PIL import Image
import requests
import io
response = requests.get('https://i.stack.imgur.com/J2ojU.png')
text = pytesseract.image_to_string(Image.open(io.BytesIO(response.content)), lang='eng',
config='--psm 7')
print(text)
{p> 1等于或大于6的确实为我产生了“ Gm”。
如果图像存储在本地(以及您的工作目录中),只需删除--psm
变量并用以下行更改response
的定义
text