色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

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

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

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

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

一、缺口識(shí)別

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

pip install opencv-python

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

1.讀取圖片

滑塊驗(yàn)證的圖片分為兩部分,一個(gè)是背景圖片:

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

另一個(gè)是缺口圖片:

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

利用imread函數(shù)將其讀取:

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

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

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

這一步很關(guān)鍵!否則缺口匹配將不準(zhǔn)確。

這里得到了圖片邊緣的灰度圖,進(jìn)一步將其圖片格式轉(zhuǎn)為RGB格式:

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

轉(zhuǎn)換后的背景圖為:

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

轉(zhuǎn)換后的缺口圖為:

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

3.缺口匹配

利用cv2中的matchTemplate函數(shù),可以在背景圖片中搜索對(duì)應(yīng)的缺口,具體代碼如下:

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

res為每個(gè)位置的匹配結(jié)果,代表了匹配的概率,選出其中概率最高的點(diǎn),即為缺口匹配的位置:

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

min_val,max_val,min_loc,max_loc分別為匹配的最小值、匹配的最大值、最小值的位置、最大值的位置。ps.當(dāng)然,這里完全可以自己寫一個(gè)循環(huán)來實(shí)現(xiàn),但是有現(xiàn)成的函數(shù)為什么不用呢?

至此,我們已經(jīng)有了缺口的位置,其X軸坐標(biāo)為:

X = max_loc[0]

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

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

結(jié)果如下:

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

完美~ 收工!!!

二、完整代碼

為了在實(shí)際應(yīng)用中更方便的使用,我們將代碼封裝為一個(gè)函數(shù):

def identify_gap(bg,tp,out): ’’’ bg: 背景圖片 tp: 缺口圖片 out:輸出圖片 ’’’ # 讀取背景圖片和缺口圖片 bg_img = cv2.imread(bg) # 背景圖片 tp_img = cv2.imread(tp) # 缺口圖片 # 識(shí)別圖片邊緣 bg_edge = cv2.Canny(bg_img, 100, 200) tp_edge = cv2.Canny(tp_img, 100, 200) # 轉(zhuǎn)換圖片格式 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) # 尋找最優(yōu)匹配 # 繪制方框 th, tw = tp_pic.shape[:2] tl = max_loc # 左上角點(diǎn)的坐標(biāo) br = (tl[0]+tw,tl[1]+th) # 右下角點(diǎn)的坐標(biāo) cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形 cv2.imwrite(out, bg_img) # 保存在本地 # 返回缺口的X坐標(biāo) return tl[0]

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

以上就是如何用python識(shí)別滑塊中的缺口的詳細(xì)內(nèi)容,更多關(guān)于python識(shí)別滑塊中的缺口的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产午夜免费不卡精品理论片 | 亚洲男同可播放videos | 国产a级特黄的片子视频免费 | 亚洲精品视频免费观看 | 亚洲www在线 | 99视频在线免费 | 亚色网站 | 美女综合网| 国产亚洲精品影达达兔 | 高清大学生毛片一级 | 免费一区二区三区在线视频 | 永久在线 | 91久久精品一区二区三区 | baby在线观看免费观看 | 亚洲精品免费在线 | 久久福利资源网站免费看 | 欧美三级欧美一级 | 精品欧美一区二区在线观看欧美熟 | 成人影院免费观看 | 亚洲一在线| 福利视频午夜 | 在线观看一区二区三区视频 | 亚洲美女视频在线 | 国产日韩欧美一区 | 欧美一级特黄aaaaaa在线看首页 | 国产三级视频在线播放 | 国产精品久久久久久久久99热 | 日本一级毛片在线看 | 91国在线高清视频 | 三级视频网站在线观看播放 | 九九亚洲视频 | 国产精品特黄一级国产大片 | 欧美日韩专区国产精品 | 美女视频黄的免费看网站 | 久操影视 | 欧美成人性色大片在线观看 | 狠狠色综合网站久久久久久久 | 精品一区二区三区视频在线观看免 | 国产亚洲欧美视频 | 亚洲视频国产精品 | 女高中生被cao到哭视频 |