您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python怎么實現圖形驗證碼識別的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python怎么實現圖形驗證碼識別文章都會有所收獲,下面我們一起來看看吧。
python 3.9
pycharm
我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現,現在也很常見,一般由 4 位字母或者數字組成。例如,某某網站的注冊頁面有類似的驗證碼。
一般來說,表單的最后一項就是圖形驗證碼,我們必須完全正確輸入圖中的字符才可以完成注冊和登錄。
以某網站的驗證碼為例,講解利用 OCR 技術識別圖形驗證碼的方法。
識別圖形驗證碼需要庫 tesserocr。本文文末有安裝教程。
為了便于我們的實驗測試,我們先將驗證碼的圖片保存到本地。
打開開發者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的 src 屬性是 CheckCode.aspx。可以看到一個驗證碼,右鍵保存即可,將其命名為 yzm.jpg。
這樣我們就可以得到一張驗證碼圖片,以供測試識別使用。
接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用 tesserocr 庫識別該驗證碼,代碼如下所示:
import tesserocr from PIL import Image image = Image.open('yzm.jpg') result = tesserocr.image_to_text(image) print(result)
在這里我們新建了一個 Image 對象,調用了 tesserocr 的 image_to_text() 方法。傳入該 Image 對象即可完成識別,實現過程非常簡單,結果如下所示:JR42。是不是很神奇。
接下來我們換一個驗證碼,將其命名為 code2.jpg
重新運行上面的代碼,輸出FFKT。
這次識別和實際結果有偏差,這是因為驗證碼內的多余線條干擾了圖片的識別。
對于這種情況,我們還需要做一下額外的處理,如轉灰度、二值化等操作。我們可以利用 Image 對象的 convert() 方法參數傳入 L,即可將圖片轉化為灰度圖像,代碼如下所示:
image = image.convert('L') image = image.convert('1') image.show()
我們還可以指定二值化的閾值。上面的方法采用的是默認閾值 127。不過我們不能直接轉化原圖,要將原圖先轉為灰度圖像,然后再指定二值化閾值,代碼如下所示:
image = image.convert('L') threshold = 80 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') image.show()
運行之后就會得到我們想要的處理結果。而且我們發現原來驗證碼中的線條已經去除,整個驗證碼變得黑白分明。這時重新識別驗證碼,再次運行上面的代碼就可以得到我們要的驗證碼。
那么,針對一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。
在這里我和大家簡單介紹一下,這個庫的安裝教程。
在win10下,安裝tesseract可以進入該網址進行下載 https://digi.bib.uni-mannheim.de/tesseract/
其中,文件名中帶有dev的為開發版本,不帶dev的為穩定版本,可以選擇下載不帶dev的版本。例如可以選擇下載tesseract-ocr-win64-setup-v5.3.0.20221214.exe。
下載完成后,打開下載文件,其中可以勾選Additional language data(download)選項來安裝OCR識別支持的語言包,以便OCR識別多國語言。(也可以在選項中只勾選chinese)
在系統變量里,修改path,添加你安裝tesserocr的路徑。在系統變量里,創建一個新的變量名為:TESSDATA_PREFIX,值為:D:\Program Files(X86)\Tesseract-OCR\tessdata(根據自己安裝的tesserocr安裝路徑為準)。
- 嘗試pip安裝:
pip install tesserocr
- 如果不成功,則嘗試通過.whl文件安裝。
tesserocr也只是識別手段的一種,如果需要高精度的識別,可以嘗試TensorFlow實現深度學習模型,通過訓練模型來識別圖形驗證碼。
關于“Python怎么實現圖形驗證碼識別”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python怎么實現圖形驗證碼識別”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。