Python通用驗證碼識別OCR庫之ddddocr驗證碼識別
前言
相信做自動化測試的同學一定不可忽視的問題就是驗證碼,他幾乎是一個網(wǎng)站登錄的標配,當然,我一般是不建議在這上面浪費時間去做識別的。
舉個例子,現(xiàn)在你的目的是進入自己家的房子,房子為了防止小偷進入于是上了一把鎖。我們沒必要花費力氣去研究開鎖技術。去找鎖匠配置一把萬能鑰匙(讓開發(fā)設置驗證碼的萬能碼),或者干脆先去上鎖匠把驗證碼去掉(讓開發(fā)暫時屏蔽驗證碼)。嚴格來說識別驗證碼不是我們自動化測試的重點。除非你是驗證碼廠商的員工,破解識別驗證碼是你的工作。
那么,如果有很簡單的方式去識別驗證碼的話,我們其實就可以不用麻煩開發(fā)針對驗證碼做屏蔽開關了。
ddddocr: 帶帶弟弟OCR通用驗證碼識別SDK 就是這樣一款強大驗證碼識別工具。
為什么我會想到:hhhhhhhh 紅紅火火恍恍惚惚, 哈哈~!
傳統(tǒng)驗證碼
傳統(tǒng)驗證就是數(shù)字、字母、漢字等,把背景搞得模糊一些,這些驗證碼在他前面就是個弟弟。
以第一個為例,要想識別他非常容易了。
import?ddddocr ocr?=?ddddocr.DdddOcr(old=True) #?第一個驗證截圖保存:verification_code_1.png with?open("./verification_code_1.png",?'rb')?as?f: ????image?=?f.read() res?=?ocr.classification(image) print(res)
運行結果:
iepv
滑動驗證碼
當然,傳統(tǒng)驗證碼現(xiàn)在已經(jīng)比較少網(wǎng)站在使用了,幾年前開始流行滑動驗證碼,當時,也有類似的識別方案,主要通過selenium模擬滑動。
首先,需要準備兩張圖片
有缺口的圖片
滑塊縫合的圖片
import?ddddocr import?cv2 slide?=?ddddocr.DdddOcr(det=False,?ocr=False) #?滑塊縫合的圖片 with?open('./verification_code_2-2.png',?'rb')?as?f: ????target_bytes?=?f.read() #?有缺口的圖片 with?open('./verification_code_2-1.png',?'rb')?as?f: ????background_bytes?=?f.read() #?滑塊縫合的圖片 img?=?cv2.imread("./verification_code_2-2.png") res?=?slide.slide_comparison(target_bytes,?background_bytes) print(res)
運行結果
{'target': [17, 78]}
從文檔中沒找到這個坐標是滑塊的初始坐標還是滑到正確位置的坐標。
當然,這種方案想要運行到自動化中還是比較難的,首先我們很難得到滑塊縫合的圖片,除非你將驗證碼的所有圖片和缺口圖片都保存下來,當驗證碼隨機生成一張圖片后,先截圖和本地保存的圖片對比,然后,找到對應的滑塊縫合的圖片。通過ddddocr找到元素坐標。
總之,太麻煩了,我選擇放棄~!
文字點選驗證碼
這種驗證碼現(xiàn)在也比較常見,我們需要按照順序點擊圖片中的文字。
import?ddddocr import?cv2 det?=?ddddocr.DdddOcr(det=True) #?驗證碼圖片 with?open("./verification_code_3.png",?'rb')?as?f: ????image?=?f.read() poses?=?det.detection(image) print(poses) #?驗證碼圖片 im?=?cv2.imread("verification_code_3.png") for?box?in?poses: ????x1,?y1,?x2,?y2?=?box ????im?=?cv2.rectangle(im,?(x1,?y1),?(x2,?y2),?color=(0,?0,?255),?thickness=2) #?結果圖片 cv2.imwrite("result.jpg",?im)
運行結果:
[[17,?28,?82,?92],?[55,?95,?118,?158],?[39,?160,?103,?222]]
這里給出的坐標就是識別的三個文字的圖片坐標。
這種方案同樣會面臨兩個問題;
文字的識別順序不一定是要你點擊的順序。例如識別出來的文字順序是: 荷葉飯, 驗證碼可能提示你點擊的順序是:葉飯荷。
生成的坐標只是圖片的坐標,不管是web還是app,驗證碼圖片只是屏幕的一部分,除非你截取整個屏幕。那么識別率就無法控制了。
總結
ddddorc 針對傳統(tǒng)的輸入驗證碼還是很好用的。
針對新型的驗證碼,識別率還行,但是,如何與自動化結合是個難題。
OCR技術本來就是以圖片文字識別為主,它并不包含模擬鼠標點擊、滑動、鍵盤輸入等動作。
到此這篇關于Python通用驗證碼識別OCR庫之ddddocr驗證碼識別的文章就介紹到這了,更多相關Python ddddocr驗證碼識別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch模型的定義、修改、讀取、斷點續(xù)訓深入解析
模型定義是深度學習中重要的一環(huán),PyTorch提供了強大而靈活的工具和函數(shù),使我們能夠輕松定義各種類型的深度學習模型,通過深入理解模型定義的原理和應用,我們能夠更好地理解和設計自己的模型,從而提升深度學習任務的性能和效果2024-03-03Python標準庫06之子進程 (subprocess包) 詳解
本篇文章主要介紹了Python標準庫06之子進程 (subprocess包) 詳解,具有一定的參考價值,有興趣的同學可以了解一下。2016-12-12如何基于Python和Flask編寫Prometheus監(jiān)控
這篇文章主要介紹了如何基于Python和Flask編寫Prometheus監(jiān)控,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11