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

heg*_*ash 0 python python-tesseract

我已经阅读了关于pytesseract的帖子,但是我无法通过一个简单的图像读取文本.它返回一个空字符串.

这是图像:

TestImage

我尝试过缩放,灰度化,调整对比度,阈值,模糊,以及其他帖子中说的所有内容,但我的问题是我不知道OCR想要更好地工作.它需要模糊的文字吗?高对比度?

代码尝试:

import pytesseract
from PIL import Image

print pytesseract.image_to_string(Image.open(IMAGE FILE))
Run Code Online (Sandbox Code Playgroud)

正如您在我的代码中看到的那样,图像存储在我的计算机本地 Image.open()

Mar*_*tin 15

有几个原因:

  1. 边缘不锋利且连续(锐利,我的意思是光滑,不是牙齿)

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

  3. 缺少字体(不是必需的,但训练有素的字体令人难以置信地提高识别的可能性

基于点1)和2)我能够识别文本.

1)我调整了图像的大小3x和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
Run Code Online (Sandbox Code Playgroud)

注意:

此脚本适用于测试Web上的任何图像

笔记2:

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

注3:

文本识别并不容易.每次认可都需要特殊处理.如果您使用不同的图像尝试此步骤,它可能根本不起作用.重要的是尝试对图像进行大量识别,以便了解tesseract想要的内容

  • 对不起,但目前这对我不起作用,因为文件在我的电脑上; 在它起作用之前我不会接受答案.我很感谢你帮助我,但感觉就像你正试图交换声誉的工作答案. (3认同)

Dav*_*cco 13

尝试一些类似的东西

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)
Run Code Online (Sandbox Code Playgroud)

--psm值等于或大于6没有屈服"GM"对我来说更大.

如果图像本地存储(和你的工作目录),只是下降的response变量和更改的定义text与线

image_name = "J2ojU.png" # or whatever appropriate
text = pytesseract.image_to_string(Image.open(image_name), lang='eng', config='--psm 7')
Run Code Online (Sandbox Code Playgroud)