最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3 使用OpenCV計(jì)算滑塊拼圖驗(yàn)證碼缺口位置(場(chǎng)景示例)

 更新時(shí)間:2021年08月23日 10:21:43   作者:上海-悠悠  
這篇文章主要介紹了python3 使用OpenCV計(jì)算滑塊拼圖驗(yàn)證碼缺口位置,本文通過(guò)場(chǎng)景示例給大家詳細(xì)介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

滑塊拼圖驗(yàn)證碼的失敗難度在于每次圖片上缺口位置不一樣,需識(shí)別圖片上拼圖的缺口位置,使用python的OpenCV庫(kù)來(lái)識(shí)別到

環(huán)境準(zhǔn)備

pip 安裝 opencv-python

pip installl opencv-python

OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù),提供了很多處理圖片、視頻的方法。
OpenCV庫(kù)提供了一個(gè)方法(matchTemplate()):從一張較大的圖片中搜索一張較小圖片,計(jì)算出這張大圖上各個(gè)區(qū)域和小圖相似度。
調(diào)用這個(gè)方法后返回一個(gè)二維數(shù)組(numpy庫(kù)中ndarray對(duì)象),從中就能拿到最佳匹配區(qū)域的坐標(biāo)。
這種使用場(chǎng)景就是滑塊驗(yàn)證碼上背景圖片是大圖,滑塊是小圖。

準(zhǔn)備2張圖片

場(chǎng)景示例

先摳出2張圖片,分別為background.png 和 target.png

計(jì)算缺口位置

import cv2

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

def show(name):
    '''展示圈出來(lái)的位置'''
    cv2.imshow('Show', name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


def _tran_canny(image):
    """消除噪聲"""
    image = cv2.GaussianBlur(image, (3, 3), 0)
    return cv2.Canny(image, 50, 150)


def detect_displacement(img_slider_path, image_background_path):
    """detect displacement"""
    # # 參數(shù)0是灰度模式
    image = cv2.imread(img_slider_path, 0)
    template = cv2.imread(image_background_path, 0)

    # 尋找最佳匹配
    res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
    # 最小值,最大值,并得到最小值, 最大值的索引
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    top_left = max_loc[0]  # 橫坐標(biāo)
    # 展示圈出來(lái)的區(qū)域
    x, y = max_loc  # 獲取x,y位置坐標(biāo)

    w, h = image.shape[::-1]  # 寬高
    cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
    show(template)
    return top_left

if __name__ == '__main__':
    top_left = detect_displacement("target.png", "background.png")
    print(top_left)

運(yùn)行效果看到黑色圈出來(lái)的地方就說(shuō)明找到了缺口位置

調(diào)試完成后去掉 show 的這部分代碼

# 展示圈出來(lái)的區(qū)域
  #  x, y = max_loc  # 獲取x,y位置坐標(biāo)

  #  w, h = image.shape[::-1]  # 寬高
  #  cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
  #  show(template)

缺口的位置只需得到橫坐標(biāo),距離左側(cè)的位置top_left為184

參考博客:
https://zhuanlan.zhihu.com/p/65309386
https://blog.csdn.net/weixin_42081389/article/details/87935735
https://blog.csdn.net/qq_30815237/article/details/86812716

ps:python opencv破解滑動(dòng)驗(yàn)證碼之獲取缺口位置的示例代碼

破解滑塊驗(yàn)證碼的思路主要有2種:

  • 一張完整的背景圖和一張有缺口的圖片的場(chǎng)景,解決思路:兩張圖片同一個(gè)坐標(biāo)位置進(jìn)行像素上的一一對(duì)比,找出不一樣的坐標(biāo)。
  • 一張有缺口的圖片和需要驗(yàn)證的小圖,解決思路:1.兩張圖片進(jìn)行二極化以及歸一化,確定小圖在圖片中間的坐標(biāo)。這種辦法我沒(méi)有驗(yàn)證通過(guò),可以參考這里。2.通過(guò)opencv獲得缺口位置
  • 之后就要使用初中物理知識(shí)了,使用先加速后減速模仿人手動(dòng)拖動(dòng)
  • 通過(guò)opencv獲得圖片的缺口位置
#coding=utf-8
import cv2
import numpy as np
from PIL import Image
 
def get_element_slide_distance():
 
 otemp = 'captcha2.png'
 oblk = 'captcha1.png'
 target = cv2.imread(otemp, 0) # 讀取進(jìn)行色度圖片,轉(zhuǎn)換為numpy中的數(shù)組類型數(shù)據(jù)
 template = cv2.imread(oblk, 0)
 width, height = target.shape[::-1] # 獲取缺口圖數(shù)組的形狀 -->缺口圖的寬和高
 temp = 'temp.jpg' # 將處理之后的圖片另存
 targ = 'targ.jpg'
 cv2.imwrite(temp, template)
 cv2.imwrite(targ, target)
 target = cv2.imread(targ) # 讀取另存的滑塊圖
 target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY) # 進(jìn)行色彩轉(zhuǎn)換
 # 去除白色部分 獲取滑塊正常大小
 target = target[target.any(1)]
 
 target = abs(255 - target) # 獲取色差的絕對(duì)值
 cv2.imwrite(targ, target) # 保存圖片
 target = cv2.imread(targ) # 讀取滑塊
 template = cv2.imread(temp) # 讀取背景圖
 result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED) # 比較兩張圖的重疊區(qū)域
 top, left = np.unravel_index(result.argmax(), result.shape) # 獲取圖片的缺口位置
 #缺口位置
 print((left, top, left + width, top + height)) # 背景圖中的圖片缺口坐標(biāo)位置
 
 #調(diào)用PIL Image 做測(cè)試
 image = Image.open("captcha1.png")
 
 rectangle = (left + 3, top + 3, left + width - 3, top + height - 3) #去掉白色塊的影響(上面去掉白色部分的功能并沒(méi)有真的起作用)
 #切割
 imagecrop = image.crop(rectangle)
 #保存切割的缺口
 imagecrop.save("new_image.jpg")
 
 return left+3
 
distance = get_element_slide_distance()
# 滑動(dòng)距離誤差校正,滑動(dòng)距離*圖片在網(wǎng)頁(yè)上顯示的縮放比-滑塊相對(duì)的初始位置
distance = distance*(280/680) - 22

拖動(dòng)軌跡

def generate_tracks1(XCoordinates):
 element = browser.find_element_by_xpath("http://div[@class='secsdk-captcha-drag-icon sc-jKJlTe fsBatO']")
 ActionChains(browser).click_and_hold(on_element = element).perform()
 #
 # ActionChains(browser).move_by_offset(xoffset=0, yoffset=y - 445).perform()
 #
 # time.sleep(0.15)
 # print("第二步,拖動(dòng)元素")
 distance = XCoordinates - 60
 # 初速度
 v = 0
 # 單位時(shí)間為0.2s來(lái)統(tǒng)計(jì)軌跡,軌跡即0.2內(nèi)的位移,越低看起來(lái)越絲滑??!
 t = 0.08
 # 位移/軌跡列表,列表內(nèi)的一個(gè)元素代表0.2s的位移
 tracks = []
 # 當(dāng)前的位移
 current = 0
 # 到達(dá)mid值開(kāi)始減速
 mid = distance * 5 / 8
 
 distance += 10  # 先滑過(guò)一點(diǎn),最后再反著滑動(dòng)回來(lái)
 # a = random.randint(1,3)
 while current < distance:
  if current < mid:
   # 加速度越小,單位時(shí)間的位移越小,模擬的軌跡就越多越詳細(xì)
   a = random.randint(100, 200)  # 加速運(yùn)動(dòng)
  else:
   a = -random.randint(2, 10)  # 減速運(yùn)動(dòng)
 
  # 初速度
  v0 = v
  # 0.2秒時(shí)間內(nèi)的位移
  s = v0 * t + 0.5 * a * (t ** 2)
  # 當(dāng)前的位置
  current += s
  # 添加到軌跡列表
  tracks.append(round(s))
 
  # 速度已經(jīng)達(dá)到v,該速度作為下次的初速度
  v = v0 + a * t
  if current > distance:
   break
 
 # 反著滑動(dòng)到大概準(zhǔn)確位置
 # for i in range(4):
 #     tracks.append(-random.randint(1, 3))
 # for i in range(4):
 #    tracks.append(-random.randint(1,3))
 random.shuffle(tracks)
 count = 0
 for item in tracks:
  print(item)
  count += item
  ActionChains(browser).move_by_offset(xoffset = item, yoffset = random.randint(-2, 2)).perform()
 
 # ActionChains(browser).move_to_element_with_offset(to_element=element, xoffset=XCoordinates-18,yoffset=y - 445).perform()
 # time.sleep(2)
 # # 釋放鼠標(biāo)
 print(count)
 ActionChains(browser).release(on_element = element).perform()

到此這篇關(guān)于python3 使用OpenCV計(jì)算滑塊拼圖驗(yàn)證碼缺口位置的文章就介紹到這了,更多相關(guān)python滑塊拼圖驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python hashlib模塊加密過(guò)程解析

    Python hashlib模塊加密過(guò)程解析

    這篇文章主要介紹了Python hashlib模塊加密過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • pycharm 無(wú)法加載文件activate.ps1的原因分析及解決方法

    pycharm 無(wú)法加載文件activate.ps1的原因分析及解決方法

    這篇文章主要介紹了pycharm報(bào)錯(cuò)提示:無(wú)法加載文件\venv\Scripts\activate.ps1,因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本,解決方法終端輸入get-executionpolicy,回車返回Restricted即可,需要的朋友可以參考下
    2022-11-11
  • python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能

    python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能

    這篇文章主要介紹了python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Python如何合并多個(gè)字典或映射

    Python如何合并多個(gè)字典或映射

    這篇文章主要介紹了Python如何合并多個(gè)字典或映射,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python3學(xué)習(xí)筆記之列表方法示例詳解

    Python3學(xué)習(xí)筆記之列表方法示例詳解

    Python3 列表 序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Python3學(xué)習(xí)筆記之列表方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下。
    2017-10-10
  • python使用wxPython打開(kāi)并播放wav文件的方法

    python使用wxPython打開(kāi)并播放wav文件的方法

    這篇文章主要介紹了python使用wxPython打開(kāi)并播放wav文件的方法,涉及Python操作音頻文件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • python列表list的index方法的用法和實(shí)例代碼

    python列表list的index方法的用法和實(shí)例代碼

    這篇文章主要介紹了python列表list的index方法的用法和實(shí)例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Python實(shí)現(xiàn)線程狀態(tài)監(jiān)測(cè)簡(jiǎn)單示例

    Python實(shí)現(xiàn)線程狀態(tài)監(jiān)測(cè)簡(jiǎn)單示例

    這篇文章主要介紹了Python實(shí)現(xiàn)線程狀態(tài)監(jiān)測(cè),結(jié)合簡(jiǎn)單實(shí)例形式分析了Python線程start啟動(dòng)、sleep推遲運(yùn)行、isAlive判斷等方法使用技巧,需要的朋友可以參考下
    2018-03-03
  • Python對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警

    Python對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警

    xray 是從長(zhǎng)亭洞鑒核心引擎中提取出的社區(qū)版漏洞掃描神器,支持主動(dòng)、被動(dòng)多種掃描方式,自備盲打平臺(tái)、可以靈活定義 POC,功能豐富,這篇文章主要介紹了對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警,需要的朋友可以參考下
    2019-09-09
  • pytorch中的hook機(jī)制register_forward_hook

    pytorch中的hook機(jī)制register_forward_hook

    這篇文章主要介紹了pytorch中的hook機(jī)制register_forward_hook,手動(dòng)在forward之前注冊(cè)hook,hook在forward執(zhí)行以后被自動(dòng)執(zhí)行,下面詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

新泰市| 竹北市| 上蔡县| 潮安县| 和龙市| 高唐县| 蒲城县| 濮阳市| 合江县| 航空| 贵溪市| 周至县| 河北区| 汕头市| 锦屏县| 英吉沙县| 诏安县| 龙川县| 道孚县| 会东县| 永城市| 扶绥县| 东丰县| 吴江市| 庆元县| 泗洪县| 洞头县| 兴化市| 大竹县| 濮阳县| 额敏县| 拜城县| 苍梧县| 淮北市| 大邑县| 龙海市| 得荣县| 邯郸县| 定安县| 修文县| 香格里拉县|