![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SZxUWO1M2M5ITM1ATM4UzMiZ2N5IDZjhzYzI2MhJWOl9CXxEzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
如圖,我們在使用python自動化的時候經常會遇到很多各式各樣的驗證碼。這個是一個數字加法的驗證碼。
幹擾項裡包含完整的數字、字母資訊,普通的OCR識别可能不是很準确。
但是不管怎麼樣,咱們先把必要的環境搭建起來,試一下Tesseract的識别結果吧。
1、安裝Tesseract:
首先需要下載下傳Tesseract的安裝包 官方網址:
https://digi.bib.uni-mannheim.de/tesseract/,網上的教程很多推薦安裝名稱裡不帶dev的正式版,據說更穩定
配置Tesseract:
安裝完畢之後需要配置一下環境變量,分為兩步:
1、在path裡加入安裝路徑,及安裝路徑内的tessdata檔案夾路徑。
2、建立系統變量{TESSDATA_PREFIX:E:\Program Files (x86)\Tesseract-OCR\tessdata} 這裡變量名是固定的TESSDATA_PREFIX,值是剛剛提到的安裝路徑内下一級tessdata檔案夾的完整路徑
然後指令行裡 安裝pytesseract:
完成以上步驟之後,請重新啟動電腦。
圖檔無法處理識别:
直接調用ocr識别出結果的話,隻需要3行代碼:
但是對于這個驗證碼的效果不是非常好,比如:
要麼是沒有結果,要麼就是一堆亂七八糟的東西。
這樣肯定是用不了的
那麼隻能先處理一下圖檔了
圖檔處理識别:
我下載下傳了20張這個網站的二維碼,發現了以下規律:
1、驗證碼内容一定包含“ = 2位數字+2位數字”的
2、驗證碼内容的顔色是随機的。
3、驗證碼内容的位置應該是固定的(20張圖檔的加号都在同一位置)
4、驗證碼圖檔的幹擾内容包含字母、數字、符号
5、驗證碼圖檔的幹擾内容顔色沒有跟主要内容一模一樣,但是每張圖的幹擾項一定包含主要内容顔色相近的部分。
可以看到,根據字型的不同,顯示的時候,主幹是棕色的,但是構成這個字的邊緣顔色是稍微淡一些的。不過20張圖裡都沒有發現有幹擾項的顔色跟主要内容顔色一模一樣。
是以我的想法是因為存在主幹的近似色,是以主要的濾波手段可能導緻把圖檔變得更難處理的可能性,是以不如直接擷取主幹顔色,其他像素不是主幹顔色的全部以白色替代,删除幹擾項之後再進行識别。
主幹顔色可以使用固定的加号的正中間那一點的坐标擷取。(80,23)(80,24)
Python代碼如下:
檔案如下:
結語:
準确率我大概看了一下,應該是100%的。以上算是成功破解了對方網站的驗證碼。
驗證碼的識别整體思路應該就是這樣子了,當然我舉得例子是比較簡單的驗證碼。還有各種麻煩的驗證碼,未來可能需要用到截取、卷積、濾波、清洗等等方法,需要根據實際的情況靈活地使用,但是整體的思路就是:
找到驗證碼規律,根據規律清洗幹擾噪點,然後識别。希望可以啟發到大家。
最後的最後,現在已經可以擷取驗證碼的字元串了,計算結果非常簡單我就不做了。有興趣的可以試試,我會把所有圖檔、源代碼打包,大家可以下載下傳試一下。
Tesseract安裝的時候,系統變量哪裡2步都不能少,少一個程式執行就會報錯,切記