激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

2021-12-23 00:24上海-悠悠 Python

這篇文章主要介紹了python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置,本文通過場景示例給大家詳細介紹,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

滑塊拼圖驗證碼的失敗難度在于每次圖片上缺口位置不一樣,需識別圖片上拼圖的缺口位置,使用python的opencv庫來識別到

環(huán)境準備

pip 安裝 opencv-python

pip installl opencv-python

opencv(open source computer vision library)是一個開源的計算機視覺庫,提供了很多處理圖片、視頻的方法。
opencv庫提供了一個方法(matchtemplate()):從一張較大的圖片中搜索一張較小圖片,計算出這張大圖上各個區(qū)域和小圖相似度。
調(diào)用這個方法后返回一個二維數(shù)組(numpy庫中ndarray對象),從中就能拿到最佳匹配區(qū)域的坐標。
這種使用場景就是滑塊驗證碼上背景圖片是大圖,滑塊是小圖。

準備2張圖片

場景示例

python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

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

python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

計算缺口位置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import cv2
 
# 作者-上海悠悠 qq交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
 
def show(name):
    '''展示圈出來的位置'''
    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# 橫坐標
    # 展示圈出來的區(qū)域
    x, y = max_loc  # 獲取x,y位置坐標
 
    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)

運行效果看到黑色圈出來的地方就說明找到了缺口位置

python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)

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

?
1
2
3
4
5
6
# 展示圈出來的區(qū)域
  #  x, y = max_loc  # 獲取x,y位置坐標
 
  #  w, h = image.shape[::-1]  # 寬高
  #  cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
  #  show(template)

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

參考博客:

 

ps:python opencv破解滑動驗證碼之獲取缺口位置的示例代碼

破解滑塊驗證碼的思路主要有2種:

  • 一張完整的背景圖和一張有缺口的圖片的場景,解決思路:兩張圖片同一個坐標位置進行像素上的一一對比,找出不一樣的坐標。
  • 一張有缺口的圖片和需要驗證的小圖,解決思路:1.兩張圖片進行二極化以及歸一化,確定小圖在圖片中間的坐標。這種辦法我沒有驗證通過,可以參考。2.通過opencv獲得缺口位置
  • 之后就要使用初中物理知識了,使用先加速后減速模仿人手動拖動
  • 通過opencv獲得圖片的缺口位置
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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) # 讀取進行色度圖片,轉(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) # 進行色彩轉(zhuǎn)換
 # 去除白色部分 獲取滑塊正常大小
 target = target[target.any(1)]
 
 target = abs(255 - target) # 獲取色差的絕對值
 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)) # 背景圖中的圖片缺口坐標位置
 
 #調(diào)用pil image 做測試
 image = image.open("captcha1.png")
 
 rectangle = (left + 3, top + 3, left + width - 3, top + height - 3) #去掉白色塊的影響(上面去掉白色部分的功能并沒有真的起作用)
 #切割
 imagecrop = image.crop(rectangle)
 #保存切割的缺口
 imagecrop.save("new_image.jpg")
 
 return left+3
 
distance = get_element_slide_distance()
# 滑動距離誤差校正,滑動距離*圖片在網(wǎng)頁上顯示的縮放比-滑塊相對的初始位置
distance = distance*(280/680) - 22

拖動軌跡

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def generate_tracks1(xcoordinates):
 element = browser.find_element_by_xpath("//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("第二步,拖動元素")
 distance = xcoordinates - 60
 # 初速度
 v = 0
 # 單位時間為0.2s來統(tǒng)計軌跡,軌跡即0.2內(nèi)的位移,越低看起來越絲滑!!
 t = 0.08
 # 位移/軌跡列表,列表內(nèi)的一個元素代表0.2s的位移
 tracks = []
 # 當前的位移
 current = 0
 # 到達mid值開始減速
 mid = distance * 5 / 8
 
 distance += 10  # 先滑過一點,最后再反著滑動回來
 # a = random.randint(1,3)
 while current < distance:
  if current < mid:
   # 加速度越小,單位時間的位移越小,模擬的軌跡就越多越詳細
   a = random.randint(100, 200# 加速運動
  else:
   a = -random.randint(2, 10# 減速運動
 
  # 初速度
  v0 = v
  # 0.2秒時間內(nèi)的位移
  s = v0 * t + 0.5 * a * (t ** 2)
  # 當前的位置
  current += s
  # 添加到軌跡列表
  tracks.append(round(s))
 
  # 速度已經(jīng)達到v,該速度作為下次的初速度
  v = v0 + a * t
  if current > distance:
   break
 
 # 反著滑動到大概準確位置
 # 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)
 # # 釋放鼠標
 print(count)
 actionchains(browser).release(on_element = element).perform()

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

原文鏈接:https://www.cnblogs.com/yoyoketang/p/14731542.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一区在线视频 | 视频毛片 | av在线免费观看网站 | 日本成人一区二区 | 在线高清中文字幕 | 网站久久| 国产精品久久久久久久四虎电影 | 日本高清在线免费 | 成人免费毛片明星色大师 | 国产在线1区 | 黄色网址进入 | h视频免费观看 | 久久老司机精品视频 | 国产成人精品视频在线 | 性爱视频免费 | a网在线| 日日噜噜噜夜夜狠狠久久蜜桃 | 中文字幕在线视频日本 | 999插插插 | 免费国产视频大全入口 | 久久影城 | 国产免费网站视频 | h色视频网站 | 欧美成人精品一区二区 | 天堂成人国产精品一区 | 欧美成人se01短视频在线看 | 一区二区三视频 | 久久九九热re6这里有精品 | 欧美亚洲另类在线 | 成人一级免费 | 亚洲一二三久久 | 成人久久久久久久久 | 午夜a狂野欧美一区二区 | 精品国产视频一区二区三区 | 国产在线1区 | 永久久久 | 欧美日韩亚洲一区二区三区 | 国产精品久久国产精麻豆96堂 | 久久99久久98精品免观看软件 | 欧美极品欧美精品欧美视频 | 越南一级黄色片 |