Python tesserocr的识别精度如此之低?


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

实验的三张图片如下。

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

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

import tesserocr
from PIL import Image


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出了内容,而且还是错误的🤣。

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

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')
    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看看效果有什么区别😂。感谢阅读,希望您不吝指导。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM