這篇文章主要介紹了關於python驗證碼識別教程之灰度處理、二值化、降噪與tesserocr識別,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
前言
寫爬蟲有一個繞不過去的問題就是驗證碼,現在驗證碼分類大概有4種:
圖片類別
#滑動類別
#點擊類別
語音類
今天先來看看影像類,這類驗證碼大多是數字、字母的組合,國內也有使用漢字的。在這個基礎上增加雜訊、幹擾線、變形、重疊、不同字體顏色等方法來增加辨識難度。
對應的,驗證碼辨識大體可以分為下面幾個步驟:
灰階處理
- 增加對比(可選)
- 二值化
- #降噪
- 傾斜校正分割字元
- 建立訓練庫
由於是實驗性質的,文中用到的驗證碼都是為程式產生而不是大量下載真實的網站驗證碼,這樣做的好處就是可以有大量的知道明確結果的資料集。
當需要真實環境下需要取得資料時,可以使用結合各個大尺碼平台來建立資料集進行訓練。
產生驗證碼這裡我使用Claptcha (本地下載)這個庫,當然Captcha(本地下載)這個庫也是不錯的選擇。
為了產生最簡單的純數字、無幹擾的驗證碼,首先需要將claptcha.py的285行_drawLine做一些修改,我直接讓這個函數回傳None,然後開始產生驗證碼:from claptcha import Claptcha c = Claptcha("8069","/usr/share/fonts/truetype/freefont/FreeMono.ttf") t,_ = c.write('1.png')
這裡要注意ubuntu的字型路徑,也可以在網路上下載其他字型使用。產生驗證碼如下:
可以看出,驗證碼有形變。對於這類最簡單的驗證碼,可以直接使用Google開源的tesserocr來識別。
先安裝:apt-get install tesseract-ocr libtesseract-dev libleptonica-dev pip install tesserocr##然後開始識別:
from PIL import Image import tesserocr p1 = Image.open('1.png') tesserocr.image_to_text(p1) '8069\n\n'
接下來,在驗證碼背景中加入雜訊來看看:
c = Claptcha("8069","/usr/share/fonts/truetype/freefont/FreeMono.ttf",noise=0.4) t,_ = c.write('2.png')
識別:
p2 = Image.open('2.png') tesserocr.image_to_text(p2) '8069\n\n'
效果還可以。接下來產生一個字母數字組合的:
c2 = Claptcha("A4oO0zZ2","/usr/share/fonts/truetype/freefont/FreeMono.ttf") t,_ = c2.write('3.png')
第3個為小寫字母o,第4個為大寫字母O,第5個為數字0,第6個為小寫字母z,第7個為大寫字母Z,最後一個是數字2。人眼已經跪了有木有!但現在一般驗證碼對大小寫是不做嚴格區分的,看自動識別什麼樣吧:
p3 = Image.open('3.png') tesserocr.image_to_text(p3) 'AMOOZW\n\n'
人眼都跪的計算機當然也廢了。但是,對於一些幹擾小、形變不嚴重的,使用tesserocr還是十分簡單方便的。然後將修改後的claptcha.py的285行_drawLine還原,看加入乾擾線的狀況。
p4 = Image.open('4.png') tesserocr.image_to_text(p4) ''
雖然圖片看起來是黑白的,但還需要進行灰階處理,否則使用load()函數得到的是某個像素點的RGB元組而不是單一值了。處理如下:
def binarizing(img,threshold): """传入image对象进行灰度、二值处理""" img = img.convert("L") # 转灰度 pixdata = img.load() w, h = img.size # 遍历所有像素,大于阈值的为黑色 for y in range(h): for x in range(w): if pixdata[x, y] < threshold: pixdata[x, y] = 0 else: pixdata[x, y] = 255 return img
def depoint(img): """传入二值化后的图片进行降噪""" pixdata = img.load() w,h = img.size for y in range(1,h-1): for x in range(1,w-1): count = 0 if pixdata[x,y-1] > 245:#上 count = count + 1 if pixdata[x,y+1] > 245:#下 count = count + 1 if pixdata[x-1,y] > 245:#左 count = count + 1 if pixdata[x+1,y] > 245:#右 count = count + 1 if pixdata[x-1,y-1] > 245:#左上 count = count + 1 if pixdata[x-1,y+1] > 245:#左下 count = count + 1 if pixdata[x+1,y-1] > 245:#右上 count = count + 1 if pixdata[x+1,y+1] > 245:#右下 count = count + 1 if count > 4: pixdata[x,y] = 255 return img
處理後的圖片如下:
好像……根本没卵用啊?!确实是这样的,因为示例中的图片干扰线的宽度和数字是一样的。对于干扰线和数据像素不同的,比如Captcha生成的验证码:
从左到右依次是原图、二值化、去除干扰线的情况,总体降噪的效果还是比较明显的。另外降噪可以多次执行,比如我对上面的降噪后结果再进行依次降噪,可以得到下面的效果:
再进行识别得到了结果:
p7 = Image.open('7.png') tesserocr.image_to_text(p7) '8069 ,,\n\n'
另外,从图片来看,实际数据颜色明显和噪点干扰线不同,根据这一点可以直接把噪点全部去除,这里就不展开说了。
第一篇文章,先记录如何将图片进行灰度处理、二值化、降噪,并结合tesserocr来识别简单的验证码,剩下的部分在下一篇文章中和大家一起分享。
相关推荐:
以上是python驗證碼識別教程之灰階處理、二值化、降噪與tesserocr識別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。