亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

如何用python識別滑塊驗證碼中的缺口

瀏覽:87日期:2022-06-23 15:20:58

驗證碼往往是爬蟲路上的一只攔路虎,而其花樣也是層出不窮:圖片驗證、滑塊驗證、交互式驗證、行為驗證等。隨著OCR技術的成熟,圖片驗證已經漸漸淡出主流,而滑塊驗證越來越多地出現在大眾視野。“這么厲害,這小子長啥樣呢?”沒錯,它就長這損sai:

如何用python識別滑塊驗證碼中的缺口

解決它的方法也很直觀,首先找到缺口的位置(通常只需要X軸的位置),然后拖動滑塊即可。今天kimol君將帶領大家用python識別出滑塊驗證中的缺口位置。

一、缺口識別

識別圖片中的缺口,主要是利用python中的圖像處理庫cv2,其安裝方法如下:

pip install opencv-python

注:這里并不是“pip install cv2”哦~

1.讀取圖片

滑塊驗證的圖片分為兩部分,一個是背景圖片:

如何用python識別滑塊驗證碼中的缺口

另一個是缺口圖片:

如何用python識別滑塊驗證碼中的缺口

利用imread函數將其讀取:

# 讀取背景圖片和缺口圖片bg_img = cv2.imread(’bg.jpg’) # 背景圖片tp_img = cv2.imread(’tp.png’) # 缺口圖片2.識別圖片邊緣

為了更好地將缺口與背景匹配,我們首先得識別出圖片的邊緣:

# 識別圖片邊緣bg_edge = cv2.Canny(bg_img, 100, 200)tp_edge = cv2.Canny(tp_img, 100, 200)

這一步很關鍵!否則缺口匹配將不準確。

這里得到了圖片邊緣的灰度圖,進一步將其圖片格式轉為RGB格式:

# 轉換圖片格式bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)

轉換后的背景圖為:

如何用python識別滑塊驗證碼中的缺口

轉換后的缺口圖為:

如何用python識別滑塊驗證碼中的缺口

3.缺口匹配

利用cv2中的matchTemplate函數,可以在背景圖片中搜索對應的缺口,具體代碼如下:

# 缺口匹配res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)

res為每個位置的匹配結果,代表了匹配的概率,選出其中概率最高的點,即為缺口匹配的位置:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 尋找最優匹配

min_val,max_val,min_loc,max_loc分別為匹配的最小值、匹配的最大值、最小值的位置、最大值的位置。ps.當然,這里完全可以自己寫一個循環來實現,但是有現成的函數為什么不用呢?

至此,我們已經有了缺口的位置,其X軸坐標為:

X = max_loc[0]

為了更直觀地展示缺口的位置,我們將缺口用矩形框標注出來:

# 繪制方框th, tw = tp_pic.shape[:2] tl = max_loc # 左上角點的坐標br = (tl[0]+tw,tl[1]+th) # 右下角點的坐標cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形cv2.imwrite(’out.jpg’, bg_img) # 保存在本地

結果如下:

如何用python識別滑塊驗證碼中的缺口

完美~ 收工!!!

二、完整代碼

為了在實際應用中更方便的使用,我們將代碼封裝為一個函數:

def identify_gap(bg,tp,out): ’’’ bg: 背景圖片 tp: 缺口圖片 out:輸出圖片 ’’’ # 讀取背景圖片和缺口圖片 bg_img = cv2.imread(bg) # 背景圖片 tp_img = cv2.imread(tp) # 缺口圖片 # 識別圖片邊緣 bg_edge = cv2.Canny(bg_img, 100, 200) tp_edge = cv2.Canny(tp_img, 100, 200) # 轉換圖片格式 bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB) tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB) # 缺口匹配 res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 尋找最優匹配 # 繪制方框 th, tw = tp_pic.shape[:2] tl = max_loc # 左上角點的坐標 br = (tl[0]+tw,tl[1]+th) # 右下角點的坐標 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形 cv2.imwrite(out, bg_img) # 保存在本地 # 返回缺口的X坐標 return tl[0]

這里選擇了讀取本地圖片文件,在爬蟲過程中其實不是特別方便。如果有感興趣的小伙伴,可以自己改動一下,將輸入改為圖片流即可。

以上就是如何用python識別滑塊中的缺口的詳細內容,更多關于python識別滑塊中的缺口的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本特级黄毛片毛片视频 | 欧美视频在线观看免费播放 | 97在线观免费视频观看 | 亚洲麻豆精品果冻传媒 | 美女黄页在线观看 | 国产午夜视频在永久在线观看 | 国产一级黄色影片 | 午夜视频久久久久一区 | 在线观看亚洲一区二区 | 99久久99这里只有免费的精品 | 在线看片网站 | 日韩午夜激情视频 | 国产亚洲区 | 一本高清在线 | 99久久综合狠狠综合久久aⅴ | 日本3级网站 | 中文乱码一二三四有限公司 | 天天影视欲香欲色成人网 | 成人免费淫片在线费观看 | 色琪琪原网站亚洲香蕉 | 最新欧美伦禁片在线观看 | 国自产拍在线视频天天更新 | 青青青久热国产精品视频 | 麻豆视传媒一区二区三区 | 我要看一级毛片 | 婷婷六| 欧美成人一级毛片 | 久久逼网 | 日本特黄特色大片免费播放视频 | 91青娱乐在线 | 月婷婷色狠狠 | 国产视频一二区 | 性强烈欧美一级毛片 | 国产精品视频二区不卡 | 手机看片福利日韩欧美看片 | 网红毛片| 欧美成人亚洲综合精品欧美激情 | 再猛点深使劲爽日本免费视频 | 亚洲国产精品影院 | 免费看一毛一级毛片视频 | a级毛片在线免费观看 |