Pytesseract无法读取非常简单的图像中的文本

时间:2019-01-18 20:49:39

标签: python python-tesseract

我已经阅读了pytesseract上的大量文章,但我无法从一幅简陋的简单图像中读取文字;它返回一个空字符串。

这是图片:

TestImage

我已经尝试过缩放,灰度缩放,以及调整对比度,阈值,模糊等其他文章中所说的一切,但是我的问题是我不知道OCR想要更好地工作。是否需要模糊的文字?高对比度?

要尝试的代码:

import pytesseract
from PIL import Image

print pytesseract.image_to_string(Image.open(IMAGE FILE))

您可以在我的代码中看到,该图像存储在本地计算机上,因此Image.open()

2 个答案:

答案 0 :(得分:12)

有几个原因:

  1. 边缘不锋利且不连续(锐化是指光滑,没有牙齿)

  2. 图像太小,您需要调整大小

  3. 缺少字体(不是必需的,但经过训练的字体难以置信地提高了识别的可能性)

基于要点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

注意:

此脚本非常适合测试网络上的任何图像

注意2:

所有处理均基于您发布的图片

注意3:

文本识别并不容易。每次识别都需要特殊处理。如果您尝试使用其他图像执行此步骤,则可能根本无法工作。重要的是要对图像进行大量识别,以便您了解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