python 文字识别提高精度_Python tesserocr的识别精度如此之低?

今天在学习Python爬虫的验证码识别的时候发现tesserocr这个库的图片识别能力居然能低到离谱的程度,我都很好奇为什么崔神书上那张图片居然能识别出来。

实验的三张图片如下。

我刚开始想的是除了图一略有难度以外,图二图三应该不难识别吧?

于是我先直接对原图片进行识别。

importtesserocrfrom PIL importImage

img1= Image.open('img1.jpg')print('图片1的内容为:', tesserocr.image_to_text(img1))

img2= Image.open('img2.jpg')print('图片2的内容为:', tesserocr.image_to_text(img2))

img3= Image.open('img3.jpg')print('图片3的内容为:', tesserocr.image_to_text(img3))

结果只有图3出了内容,而且还是错误的。

接下来我对三张图片进行灰度处理和手动的二值化处理,提高它们的识别度。

importtesserocrfrom PIL importImagedefset_image(image, threshold):

image= image.convert('L')

table=[]for i in range(256):if i

table.append(0)else:

table.append(1)

image= image.point(table, '1')

image.show()print(tesserocr.image_to_text(image))

if __name__ == "__main__":

image1= Image.open('img1.jpg')

set_image(image1, 160)

因为只用了灰度和二值化处理而且我的水平不够,图一没办法提高太多(如果各位会的话请指教一下小弟)。

果不其然,手动调节了50~200的阈值,图一即使能识别出文字也完全不正确,还有部分是字母。

图二在阈值为155左右的时候识别出了Vv07的结果,算是比较符合正确答案了。

最让我感到失望的是图三,阈值为200时明明已经看上去非常容易识别了,结果确还是只能识别出1364这个错误答案,虽然很接近,但是依然不正确。

然后我就尝试了通过暴力传入遍历阈值来看看能否取得正确结果。

import tesserocr

from PIL import Image

def set_image(image, threshold):

image = image.convert('L')

table = []

for i in range(256):

if i < threshold:

table.append(0)

else:

table.append(1)

image = image.point(table, '1')

return tesserocr.image_to_text(image)

if __name__ == "__main__":

for threshold in range(20, 220, 2):

image1 = Image.open('img1.jpg')

result = set_image(image1, threshold)

if result!= '' and result in '46168' or '468168' in result:

print('图一在阈值为%s时识别成功,结果为%s' % (threshold, result))

print('识别结果错误或无法识别')

结果图一二三都是一样的结果。

难怪大家都宁愿用付费的api接口,这个识别率也太低了。或许我应该试试pytesser或者sklearn看看效果有什么区别。感谢阅读,希望您不吝指导。

你可能感兴趣的:(python,文字识别提高精度)