婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于Pytorch版yolov5的滑塊驗證碼破解思路詳解

基于Pytorch版yolov5的滑塊驗證碼破解思路詳解

熱門標(biāo)簽:舉辦過冬奧會的城市地圖標(biāo)注 阿里電話機器人對話 電銷機器人系統(tǒng)廠家鄭州 正安縣地圖標(biāo)注app qt百度地圖標(biāo)注 地圖地圖標(biāo)注有嘆號 400電話申請資格 遼寧智能外呼系統(tǒng)需要多少錢 螳螂科技外呼系統(tǒng)怎么用

前言

本文將使用pytorch框架的目標(biāo)識別技術(shù)實現(xiàn)滑塊驗證碼的破解。我們這里選擇了yolov5算法

例:輸入圖像

輸出圖像

可以看到經(jīng)過檢測之后,我們能很準(zhǔn)確的定位到缺口的位置,并且能得到缺口的坐標(biāo),這樣一來我們就能很輕松的實現(xiàn)滑動驗證碼的破解。

一.前期工作

yolov系列是常用的目標(biāo)檢測算法,yolov5不僅配置簡單,而且在速度上也有不小的提升,我們很容易就能訓(xùn)練我們自己的數(shù)據(jù)集。
YOLOV5 Pytorch版本GIthub網(wǎng)址感謝這位作者的代碼。

下載之后,是這樣的格式

---data/
	Annotations/ 存放圖片的標(biāo)注文件(.xml)
	images/ 存放待訓(xùn)練的圖片
	ImageSets/ 存放劃分數(shù)據(jù)集的文件
	labels/ 存放圖片的方框信息

其中只需要修改Annotations和images兩個文件夾。
首先我們將待訓(xùn)練的圖片放入images

數(shù)據(jù)集要感謝這位大神的整理https://github.com/tzutalin/labelImg,在這個基礎(chǔ)上我增加了50張來自騰訊的驗證碼圖片

數(shù)據(jù)集已上傳百度云

鏈接: https://pan.baidu.com/s/1XS5KVoXqGHglfP0mZ3HJLQ

提取碼: wqi8

然后我們需要對其進行標(biāo)注,告訴計算機我們希望它識別什么內(nèi)容。這時候我們需要精靈標(biāo)注這款軟件。免費而且功能強大,五星好評!

第一步選擇images文件夾,第二步有幾類就寫幾類,建議用英文。這里只有一類,即為缺失快的位置,命名為target。注意標(biāo)注的時候要左右恰好卡住,不然獲得的坐標(biāo)就不精準(zhǔn)。

標(biāo)注完成后,點擊導(dǎo)出,文件格式不用動,直接點確定,就會在images/outputs文件夾生成我們的標(biāo)注文件。全部復(fù)制到Annotations文件夾即可。

回到主目錄,運行makeTxt.py和voc_label.py,makeTxt直接運行即可,voc_label需要修改classes的值,這次只有一target

import xml.etree.ElementTree as ET
import pickle
import os
# os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表
from os import listdir, getcwd
from os.path import join


sets = ['train', 'test', 'val']
classes = ['target'] #之前標(biāo)注時有幾個類,這里就輸入幾個類

"""

............  

"""

進入data文件夾,修改coco.yaml的內(nèi)容

# COCO 2017 dataset http://cocodataset.org
# Download command: bash yolov5/data/get_coco2017.sh
# Train command: python train.py --data ./data/coco.yaml
# Dataset should be placed next to yolov5 folder:
#  /parent_folder
#   /coco
#   /yolov5


# train and val datasets (image directory or *.txt file with image paths)
train: ../coco/train2017.txt # 118k images
val: ../coco/val2017.txt # 5k images
test: ../coco/test-dev2017.txt # 20k images for submission to https://competitions.codalab.org/competitions/20794

# number of classes
nc: 1

# class names
names: ['target']

# Print classes
# with open('data/coco.yaml') as f:
#  d = yaml.load(f, Loader=yaml.FullLoader) # dict
#  for i, x in enumerate(d['names']):
#   print(i, x)

再進入models文件夾,修改yolov5s.yaml的內(nèi)容

nc: 1 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
"""
''''''''''''
"""

至此配置環(huán)節(jié)終于結(jié)束了,可以開始訓(xùn)練了!

打開train.py,我們一般只需要修改–weights,–cfg,–data,–epochs幾個設(shè)置即可

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--notest', action='store_true', help='only test final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
parser.add_argument('--log-imgs', type=int, default=16, help='number of images for WB logging, max 100')
parser.add_argument('--log-artifacts', action='store_true', help='log artifacts, i.e. final trained model')
parser.add_argument('--workers', type=int, default=4, help='maximum number of dataloader workers')
parser.add_argument('--project', default='runs/train', help='save to project/name')
parser.add_argument('--name', default='exp', help='save to project/name')
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
opt = parser.parse_args()

直接運行train.py,開始訓(xùn)練!
。。。。。。。。。。。。。。。。

訓(xùn)練完成后,進入runs/train/exp/weights,我們復(fù)制best.pt到主目錄。

最后,我們打開datect.py,修改幾個屬性

parser = argparse.ArgumentParser()
  parser.add_argument('--weights', nargs='+', type=str, default='best.pt', help='model.pt path(s)')
  parser.add_argument('--source', type=str, default='test.jpg', help='source') # file/folder, 0 for webcam
  parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
  parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
  parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
  parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
  parser.add_argument('--view-img', action='store_true', help='display results')
  parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
  parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
  parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
  parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
  parser.add_argument('--augment', action='store_true', help='augmented inference')
  parser.add_argument('--update', action='store_true', help='update all models')
  parser.add_argument('--project', default='runs/detect', help='save results to project/name')
  parser.add_argument('--name', default='exp', help='save results to project/name')
  parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
  opt = parser.parse_args()

–source屬性我們可以先修改為data/images,對自己的數(shù)據(jù)集進行識別看看能否正常識別。
小Tips,如果執(zhí)行后不報錯,但沒有檢測框的話,試試看修改–device為cpu,cuda版本太低會導(dǎo)致使用gpu沒有檢測框(問就是被這個小問題迫害了很久 --_–)。

最后在112行左右的位置,添加一個print

這時執(zhí)行程序就會返回方框的位置信息和自信度了

我們的前驅(qū)工作終于完成了~

二.編寫爬蟲

1.尋找合適的網(wǎng)站

經(jīng)過一番搜尋,最后鎖定了https://007.qq.com/online.html

因為它的網(wǎng)站結(jié)構(gòu)很方便我們的操作。

2.導(dǎo)入依賴庫

這里我們采用selenium來模擬人類的操作。
關(guān)于selenium的安裝和webdriver的安裝方法本文不作延伸。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import requests,re
import os
import requests
import re 
import time
from selenium.webdriver import ActionChains

3.編寫破解程序

訪問網(wǎng)站,發(fā)現(xiàn)破解之前要依次點擊

編寫代碼

def run()
	driver = webdriver.Chrome()
	
	headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"}
	#偽裝請求頭
	
	
	         
	driver.get('https://007.qq.com/online.html') #訪問網(wǎng)站
	
	driver.find_element_by_xpath('/html/body/div[1]/section[1]/div/div/div/div[2]/div[1]/a[2]').click()
	driver.find_element_by_xpath('//*[@id="code"]').click()
	#模擬點擊操作

繼續(xù)

這里便是我們要識別的圖片,不過直接定位的話并不能定位到,因為這段代碼是由iframe包裹著的,我們需要先定位到這個iframe

time.sleep(2)      #休眠2秒,防止報錯  
	driver.switch_to_frame("tcaptcha_iframe") #根據(jù)iframe的id定位到iframe
	target = driver.find_element_by_xpath("/html/body/div/div[3]/div[2]/div[1]/div[2]/img").get_attribute("src")
	#得到圖片的原地址
	
	response = requests.get(target,headers=headers)	#訪問圖片地址
	 
	img = response.content
	with open( 'test.jpg','wb' ) as f:
	  f.write(img)		#將圖片保存到主目錄,命名為test.jpg

現(xiàn)在圖片也有了,檢測程序也準(zhǔn)備好了,那么開始檢測吧!

'''
	os.popen()的用法,簡單來說就是執(zhí)行cmd命令,并得到cmd的返回值
	這里是執(zhí)行detect.py
	'''
	
	result = os.popen("python detect.py").readlines() #執(zhí)行目標(biāo)檢測程序
	list = []
	for line in result:
	  list.append(line)   #將cmd的返回信息存入列表
	print(list)
	a = re.findall("(.*):(.*]).(.*)\\n",list[-4]) #獲得圖片的位置信息
	print(a)
	print(len(a))
	if len(a) != 0:     #如果能檢測到方框
	  tensor=a[0][1]
	  pro = a[0][2]
	  list_=tensor[2:-1].split(",")
	  
	  location = []
	  for i in list_:
	    print(i)
	    b = re.findall("tensor(.*)",i)[0]
	    location.append(b[1:-2])
	  #提取出來方框左上角的xy和右下角的xy
	  drag1 = driver.find_element_by_xpath('/html/body/div/div[3]/div[2]/div[2]/div[2]/div[1]') 
	  #定位到拖動按鈕處
	  
	  action_chains = ActionChains(driver) #實例化鼠標(biāo)操作類
	  action_chains.drag_and_drop_by_offset(drag1, int(int(location[2])/2-85), 0).perform()
	  #模擬鼠標(biāo)按住并拖動距離 X 后再放開
	  input("等待操作")  
	  driver.quit() 
	else:
	  driver.quit() 
	  print("未能識別")    

這里著重說一下

action_chains.drag_and_drop_by_offset(drag1, int(int(location[2])/2-85), 0).perform()

為什么要拖 int(int(location[2])/2-85) 遠。

首先location這個列表的格式為[左上x,左上y,右下x,右下y]location[2]即為取出右下角的x值。

我們保存到本地的驗證碼圖片分辨率如下

但網(wǎng)站顯示的圖片大小

x軸剛好為本地圖片的一半,所以int(location[2]/2)得到的便是

但是待拖動的方塊本身距離左邊還有一定距離,通過分析發(fā)現(xiàn)

這個小方塊的最左邊距離圖片的最左邊的距離即為紅框中的26,即

26+68-10=84,因為這個10是試出來的長度,我們就令這段距離為85吧

至此 int(int(location[2])/2-85) 的由來也解釋清楚了。
大功告成啦,那讓我們看一遍演示吧!

selenium完整代碼如下

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import requests,re
import os
import requests
import re 
import time
from selenium.webdriver import ActionChains

def run()
	driver = webdriver.Chrome()
	
	headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36"}
	#偽裝請求頭 
	driver.get('https://007.qq.com/online.html') #訪問網(wǎng)站
	driver.find_element_by_xpath('/html/body/div[1]/section[1]/div/div/div/div[2]/div[1]/a[2]').click()
	driver.find_element_by_xpath('//*[@id="code"]').click()
	#模擬點擊操作
  time.sleep(2)      #休眠2秒,防止報錯  
	driver.switch_to_frame("tcaptcha_iframe") #根據(jù)iframe的id定位到iframe
	target = driver.find_element_by_xpath("/html/body/div/div[3]/div[2]/div[1]/div[2]/img").get_attribute("src")
	#得到圖片的原地址
	
	response = requests.get(target,headers=headers)	#訪問圖片地址
	 
	img = response.content
	with open( 'test.jpg','wb' ) as f:
	  f.write(img)		#將圖片保存到主目錄,命名為test.jpg
	'''
	os.popen()的用法,簡單來說就是執(zhí)行cmd命令,并得到cmd的返回值
	這里是執(zhí)行detect.py
	'''
	result = os.popen("python detect.py").readlines() #執(zhí)行目標(biāo)檢測程序
	list = []
	for line in result:
	  list.append(line)   #將cmd的返回信息存入列表
	print(list)
	a = re.findall("(.*):(.*]).(.*)\\n",list[-4]) #獲得圖片的位置信息
	print(a)
	print(len(a))
	if len(a) != 0:     #如果能檢測到方框
	  tensor=a[0][1]
	  pro = a[0][2]
	  list_=tensor[2:-1].split(",")
	  
	  location = []
	  for i in list_:
	    print(i)
	    b = re.findall("tensor(.*)",i)[0]
	    location.append(b[1:-2])
	  #提取出來方框左上角的xy和右下角的xy
	  drag1 = driver.find_element_by_xpath('/html/body/div/div[3]/div[2]/div[2]/div[2]/div[1]') 
	  #定位到拖動按鈕處
	  action_chains = ActionChains(driver) #實例化鼠標(biāo)操作類
	  action_chains.drag_and_drop_by_offset(drag1, int(int(location[2])/2-85), 0).perform()
	  #模擬鼠標(biāo)按住并拖動距離 X 后再放開
	  input("等待操作")  
	  driver.quit() 
	else:
	  driver.quit() 
	  print("未能識別")    

while True:   
  run()

到此這篇關(guān)于基于Pytorch版yolov5的滑塊驗證碼破解思路詳解的文章就介紹到這了,更多相關(guān)Pytorch滑塊驗證碼破解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • yolov5 win10 CPU與GPU環(huán)境搭建過程
  • win10+anaconda安裝yolov5的方法及問題解決方案

標(biāo)簽:信陽 濟源 合肥 昭通 隨州 淘寶好評回訪 興安盟 阜新

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Pytorch版yolov5的滑塊驗證碼破解思路詳解》,本文關(guān)鍵詞  基于,Pytorch,版,yolov5,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于Pytorch版yolov5的滑塊驗證碼破解思路詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于Pytorch版yolov5的滑塊驗證碼破解思路詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产网红主播福利一区二区| 精品在线视频一区| 国产在线一区二区综合免费视频| 成人福利视频在线| 日本二三区不卡| 91丨porny丨国产入口| 在线电影欧美成精品| 99久久综合国产精品| 久久久久高清精品| 在线视频国内自拍亚洲视频| 综合色天天鬼久久鬼色| 久久免费午夜影院| 韩国中文字幕2020精品| 国产精品国产三级国产普通话蜜臀 | 久久9热精品视频| 国产成人av电影在线播放| 日韩一二三区视频| 亚洲综合久久久| 风流少妇一区二区| 久久久久久影视| 99精品久久久久久| 中文子幕无线码一区tr| 日韩美女视频在线| 国产传媒日韩欧美成人| 美女被吸乳得到大胸91| 亚洲地区一二三色| 亚洲综合免费观看高清完整版在线| 精品久久久久久最新网址| 91在线码无精品| 亚洲丝袜另类动漫二区| 亚洲成av人片| 奇米影视7777精品一区二区| 国产精品一区二区久激情瑜伽| 欧美精品一区二区三区蜜桃| 男人操女人的视频在线观看欧美| 一二三四社区欧美黄| 日韩一级免费一区| 7777精品伊人久久久大香线蕉完整版 | 国产欧美一区二区三区在线老狼| 国产欧美日韩卡一| 国产精品麻豆久久久| 久久亚洲私人国产精品va媚药| 亚洲成a人v欧美综合天堂| 国产99精品国产| 亚洲成av人影院| 风间由美一区二区三区在线观看| proumb性欧美在线观看| 91精品久久久久久久99蜜桃| 久久夜色精品国产欧美乱极品| 亚洲精品成a人| 99精品久久只有精品| 亚洲视频小说图片| 色噜噜久久综合| 最新久久zyz资源站| 日韩福利电影在线| 精品国产亚洲在线| 白白色 亚洲乱淫| 亚洲高清在线视频| 成人高清在线视频| 日韩情涩欧美日韩视频| 亚洲第一av色| 欧美丰满一区二区免费视频| 亚洲午夜在线视频| 国产在线不卡视频| jizz一区二区| 国产欧美一区二区三区鸳鸯浴| 91免费版pro下载短视频| 欧美在线视频日韩| 国产在线看一区| 亚洲国产婷婷综合在线精品| 久久久久久日产精品| 精品一区二区免费在线观看| 亚洲成人动漫精品| 久久久久久久久久久久久女国产乱| 国产成人综合亚洲91猫咪| 欧美一区二区免费视频| 午夜伦欧美伦电影理论片| 亚洲黄色免费网站| 中文字幕欧美激情| 国产精品久久久久精k8| 欧美一区二区三区日韩| 欧美一区二区成人6969| 国产精品1区二区.| 六月丁香综合在线视频| 91精品一区二区三区久久久久久| 一区二区三区 在线观看视频| 日韩精品一二区| 99久久综合精品| 久久九九久精品国产免费直播| 91黄视频在线观看| 国产91精品久久久久久久网曝门 | 久久99久久99精品免视看婷婷| 欧美一区二区播放| 亚洲444eee在线观看| 91一区在线观看| 国产日韩欧美在线一区| 青青草97国产精品免费观看 | 欧美色手机在线观看| 欧美视频在线不卡| 国精品**一区二区三区在线蜜桃| 国产精品美女久久久久久2018| 国产曰批免费观看久久久| av在线不卡电影| 国产成人啪免费观看软件| 成人综合日日夜夜| 人禽交欧美网站| 免费看欧美美女黄的网站| 91黄视频在线| 日本成人在线网站| 欧美一区二区网站| 日韩av不卡一区二区| 中文字幕中文字幕中文字幕亚洲无线| 国产精品系列在线播放| 综合色天天鬼久久鬼色| 日本乱人伦一区| 精品一区二区综合| 视频一区二区中文字幕| 2024国产精品视频| 欧美日韩亚洲综合| 国产一区二区主播在线| 亚洲午夜激情av| 国产中文一区二区三区| 国产精品成人免费在线| 欧美另类高清zo欧美| 亚洲国产一二三| 亚洲午夜激情av| 久久久精品2019中文字幕之3| 国产成人午夜精品5599| 国产不卡高清在线观看视频| 国产综合久久久久影院| 亚洲精品欧美综合四区| 日韩免费高清视频| 欧美人狂配大交3d怪物一区| 国产精品影视在线观看| 久久97超碰国产精品超碰| ㊣最新国产の精品bt伙计久久| 亚洲国产日韩一区二区| 中文字幕一区二区三区在线不卡| 日韩美女一区二区三区四区| 久久午夜老司机| 久久久久国色av免费看影院| 欧美精品一区二区三区高清aⅴ | 国产成人在线视频网站| 亚洲人成网站影音先锋播放| 国产亚洲成av人在线观看导航| 欧美一区二区网站| 三级成人在线视频| 在线免费精品视频| 国产午夜精品久久久久久免费视| 亚洲欧洲99久久| 成人性色生活片免费看爆迷你毛片| 在线观看91精品国产麻豆| 亚洲亚洲人成综合网络| 五月天亚洲精品| 日本一区二区免费在线| 国产乱码精品一区二区三区五月婷| 91女人视频在线观看| 7878成人国产在线观看| 欧美精品乱码久久久久久按摩| 成人国产视频在线观看| 北条麻妃一区二区三区| 在线视频一区二区免费| 欧美一区二区免费视频| 中文子幕无线码一区tr| 亚洲成av人影院| 在线一区二区三区四区| 中文字幕第一区综合| 久久91精品国产91久久小草| 日韩精品专区在线影院观看| 亚洲图片激情小说| 国产福利一区二区三区视频| 久久女同性恋中文字幕| 亚洲制服丝袜av| 91无套直看片红桃| 中文字幕一区二区视频| 狠狠色伊人亚洲综合成人| 91精品国模一区二区三区| 欧美激情在线观看视频免费| 国产主播一区二区三区| 久久嫩草精品久久久精品一| 国产成人av影院| 婷婷中文字幕综合| 26uuu色噜噜精品一区二区| 成人av中文字幕| 最新不卡av在线| 欧洲激情一区二区| 韩国女主播一区| 中文字幕精品一区二区三区精品| 国产精品一区二区久久精品爱涩| 天天影视涩香欲综合网| 欧美日本一道本在线视频| 日产国产高清一区二区三区| 欧美成人一区二区三区| 欧美在线视频全部完| 欧美天堂一区二区三区| 亚洲免费观看高清完整版在线观看熊| 欧美日韩国产bt| 日韩久久免费av| 亚洲成人av在线电影| 久久久久久久久久久电影|