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