Python通用驗(yàn)證碼識(shí)別OCR庫(kù)之ddddocr驗(yàn)證碼識(shí)別
前言
相信做自動(dòng)化測(cè)試的同學(xué)一定不可忽視的問(wèn)題就是驗(yàn)證碼,他幾乎是一個(gè)網(wǎng)站登錄的標(biāo)配,當(dāng)然,我一般是不建議在這上面浪費(fèi)時(shí)間去做識(shí)別的。
舉個(gè)例子,現(xiàn)在你的目的是進(jìn)入自己家的房子,房子為了防止小偷進(jìn)入于是上了一把鎖。我們沒(méi)必要花費(fèi)力氣去研究開(kāi)鎖技術(shù)。去找鎖匠配置一把萬(wàn)能鑰匙(讓開(kāi)發(fā)設(shè)置驗(yàn)證碼的萬(wàn)能碼),或者干脆先去上鎖匠把驗(yàn)證碼去掉(讓開(kāi)發(fā)暫時(shí)屏蔽驗(yàn)證碼)。嚴(yán)格來(lái)說(shuō)識(shí)別驗(yàn)證碼不是我們自動(dòng)化測(cè)試的重點(diǎn)。除非你是驗(yàn)證碼廠商的員工,破解識(shí)別驗(yàn)證碼是你的工作。
那么,如果有很簡(jiǎn)單的方式去識(shí)別驗(yàn)證碼的話,我們其實(shí)就可以不用麻煩開(kāi)發(fā)針對(duì)驗(yàn)證碼做屏蔽開(kāi)關(guān)了。
ddddocr: 帶帶弟弟OCR通用驗(yàn)證碼識(shí)別SDK 就是這樣一款強(qiáng)大驗(yàn)證碼識(shí)別工具。
為什么我會(huì)想到:hhhhhhhh 紅紅火火恍恍惚惚, 哈哈~!
傳統(tǒng)驗(yàn)證碼
傳統(tǒng)驗(yàn)證就是數(shù)字、字母、漢字等,把背景搞得模糊一些,這些驗(yàn)證碼在他前面就是個(gè)弟弟。

以第一個(gè)為例,要想識(shí)別他非常容易了。
import?ddddocr
ocr?=?ddddocr.DdddOcr(old=True)
#?第一個(gè)驗(yàn)證截圖保存:verification_code_1.png
with?open("./verification_code_1.png",?'rb')?as?f:
????image?=?f.read()
res?=?ocr.classification(image)
print(res)
運(yùn)行結(jié)果:
iepv
滑動(dòng)驗(yàn)證碼
當(dāng)然,傳統(tǒng)驗(yàn)證碼現(xiàn)在已經(jīng)比較少網(wǎng)站在使用了,幾年前開(kāi)始流行滑動(dòng)驗(yàn)證碼,當(dāng)時(shí),也有類似的識(shí)別方案,主要通過(guò)selenium模擬滑動(dòng)。
首先,需要準(zhǔn)備兩張圖片
有缺口的圖片

滑塊縫合的圖片

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)運(yùn)行結(jié)果
{'target': [17, 78]}
從文檔中沒(méi)找到這個(gè)坐標(biāo)是滑塊的初始坐標(biāo)還是滑到正確位置的坐標(biāo)。
當(dāng)然,這種方案想要運(yùn)行到自動(dòng)化中還是比較難的,首先我們很難得到滑塊縫合的圖片,除非你將驗(yàn)證碼的所有圖片和缺口圖片都保存下來(lái),當(dāng)驗(yàn)證碼隨機(jī)生成一張圖片后,先截圖和本地保存的圖片對(duì)比,然后,找到對(duì)應(yīng)的滑塊縫合的圖片。通過(guò)ddddocr找到元素坐標(biāo)。
總之,太麻煩了,我選擇放棄~!
文字點(diǎn)選驗(yàn)證碼
這種驗(yàn)證碼現(xiàn)在也比較常見(jiàn),我們需要按照順序點(diǎn)擊圖片中的文字。

import?ddddocr
import?cv2
det?=?ddddocr.DdddOcr(det=True)
#?驗(yàn)證碼圖片
with?open("./verification_code_3.png",?'rb')?as?f:
????image?=?f.read()
poses?=?det.detection(image)
print(poses)
#?驗(yàn)證碼圖片
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)
#?結(jié)果圖片
cv2.imwrite("result.jpg",?im)
運(yùn)行結(jié)果:

[[17,?28,?82,?92],?[55,?95,?118,?158],?[39,?160,?103,?222]]
這里給出的坐標(biāo)就是識(shí)別的三個(gè)文字的圖片坐標(biāo)。
這種方案同樣會(huì)面臨兩個(gè)問(wèn)題;
文字的識(shí)別順序不一定是要你點(diǎn)擊的順序。例如識(shí)別出來(lái)的文字順序是: 荷葉飯, 驗(yàn)證碼可能提示你點(diǎn)擊的順序是:葉飯荷。
生成的坐標(biāo)只是圖片的坐標(biāo),不管是web還是app,驗(yàn)證碼圖片只是屏幕的一部分,除非你截取整個(gè)屏幕。那么識(shí)別率就無(wú)法控制了。
總結(jié)
ddddorc 針對(duì)傳統(tǒng)的輸入驗(yàn)證碼還是很好用的。
針對(duì)新型的驗(yàn)證碼,識(shí)別率還行,但是,如何與自動(dòng)化結(jié)合是個(gè)難題。
OCR技術(shù)本來(lái)就是以圖片文字識(shí)別為主,它并不包含模擬鼠標(biāo)點(diǎn)擊、滑動(dòng)、鍵盤(pán)輸入等動(dòng)作。
到此這篇關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫(kù)之ddddocr驗(yàn)證碼識(shí)別的文章就介紹到這了,更多相關(guān)Python ddddocr驗(yàn)證碼識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
- 基于Python實(shí)現(xiàn)圖像文字識(shí)別OCR工具
- Python免費(fèi)驗(yàn)證碼識(shí)別之ddddocr識(shí)別OCR自動(dòng)庫(kù)實(shí)現(xiàn)
- Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程
- python?ocr簡(jiǎn)單示例之識(shí)別驗(yàn)證碼
- python實(shí)戰(zhàn)教程之OCR文字識(shí)別方法匯總
- Python使用paddleOCR批量識(shí)別pdf的方法
- python使用ddddocr庫(kù)識(shí)別滑動(dòng)驗(yàn)證碼簡(jiǎn)單代碼示例
- Python利用cnocr庫(kù)實(shí)現(xiàn)pdf文件的文字識(shí)別
- python利用ddddocr包ocr識(shí)別圖片碼的實(shí)現(xiàn)
相關(guān)文章
python之pyqt5通過(guò)按鈕改變Label的背景顏色方法
今天小編就為大家分享一篇python之pyqt5通過(guò)按鈕改變Label的背景顏色方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
一道題學(xué)會(huì)Python函數(shù)中形參和實(shí)參
在Python編程中,函數(shù)的形參和實(shí)參是函數(shù)定義和調(diào)用的重要概念,本文主要介紹了一道題學(xué)會(huì)Python函數(shù)中形參和實(shí)參,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件的方法
這篇文章主要介紹了Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Python捕獲全局的KeyboardInterrupt異常的方法實(shí)現(xiàn)
KeyboardInterrupt異常是Python中的一個(gè)標(biāo)準(zhǔn)異常,它通常發(fā)生在用戶通過(guò)鍵盤(pán)中斷了一個(gè)正在運(yùn)行的程序,本文主要介紹了Python捕獲全局的KeyboardInterrupt異常的方法實(shí)現(xiàn),感興趣的可以了解一下2024-08-08
python將字符串以u(píng)tf-8格式保存在txt文件中的方法
今天小編就為大家分享一篇python將字符串以u(píng)tf-8格式保存在txt文件中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
卷積神經(jīng)網(wǎng)絡(luò)CharCNN實(shí)現(xiàn)中文情感分類任務(wù)
這篇文章主要為大家介紹了卷積神經(jīng)網(wǎng)絡(luò)CharCNN實(shí)現(xiàn)中文情感分類任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

