darknet识别(某验)文字点选验证码

news/2024/5/20 4:45:28/文章来源:https://blog.csdn.net/u010442378/article/details/132700279

今天介绍darknet识别文字点选验证码, Darknet is an open source neural network framework written in C and CUDA. darknet是基于yolo算法的神经网络框架。

废话少说先热热身

平台是Ubuntu20,首先要安装NVIDIA驱动

1、安装驱动

  NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA  找见对应的驱动下载安装

2、安装cuda

  查看版本兼容 CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation 

  下载  CUDA Toolkit Archive | NVIDIA Developer 

  Ubuntu 通过deb(local)方式安装

3、安装cudnn

  下载对应版本  CUDA Deep Neural Network (cuDNN) | NVIDIA Developer 

4、安装完成后(测试是否成功)

~$ nvidia-smi 
Wed Sep 16 13:57:38 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  On   | 00000000:08:00.0 Off |                  N/A |
| 45%   34C    P8     4W / 215W |   1721MiB /  7973MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

接下来安装darknet

1、安装

  wget https://github.com/pjreddie/darknet/archive/master.zip unzip master.zip# 修改Makefile(GPU和 CUDNN改成1,默认是0)vim darknet-master/MakefileGPU=1CUDNN=1# 保存退出,然后编译make

2、测试

  下载官方的权重文件

    wget https://pjreddie.com/media/files/yolov3-tiny.weights 

  识别

    ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

  结果:能识别出来并标记位置,这很符合我们想要的结果

  

  分类

    ./darknet classify cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

  结果:

    

热身完了,现在开始训练自己的模型

以某验文字点选验证码为例,先看看样本,我们要做的就是按照左下角小字的顺序,点击图片上的文字验证。

   先说说思路(只说大字,小字的类似):

  1、搜集足够的样本数据

  2、标注字的位置

  3、训练定位器

  4、识别字的位置,并切割

  5、标注字的类别

  6、训练分类器

一、准备数据

  定位器需要标注大概 1000张左右就可以了

  分类器需要标注大概 36W 张(越多越好,鲁迅说过大力出奇迹 ( •̀ .̫ •́ )✧)

二、标注位置

  标注工具有很多,我用的是labelImg-1.8.1

  1)、安装(配置过程按照教程)

    https://github.com/tzutalin/labelImg/archive/master.zip

  2)、配置好之后打开,开始标注

  

a、选择yolo模式

b、定位器只设定一个类,使用默认标签名word(标签名可以任意取)

c、开始标注

d、标注图片中所有的字,可以看出图上有4个汉字(只关注大字)

e、可以看到标注完后有4个结果

f、然后保存

g、点击下一个继续标注

3)、标注结果文件

标注完后,在图片所在的目录生成了结果文件,与图片命名相同。

标注文件里有4行数据,对应4个字,以第一行为例

    1 表示标签文件的第一个(从0开始)0.129360 位置的中心x坐标0.200521 位置的中心y坐标0.252907 相对宽度w0.208333 相对高度h 

三、标注完后开始训练预处理

a、/home/data目录下,创建训练集 测试集目录

mkdir train

mkdir test

b、将标注好的数据以9:1的比率分别放入train和test目录,制作训练文件

    find `pwd`/train -name \*.jpg > train.listfind `pwd`/test -name \*.jpg > test.listtrain.list内容,就是标注后的图片绝对路径/home/data/train/0.jpg/home/data/train/1.jpg/home/data/train/2.jpg/home/data/train/3.jpg/home/data/train/4.jpg/home/data/train/5.jpg

c、模型配置文件,定位使用yolov3-tiny.cfg就足够

/home/data/word.cfg

    *、蓝色可以改[net]batch=1 # 测试时1,训练时根据显存大小设置64 32 16subdivisions=1 # 测试时1,训练时根据batch 配置 16 8 4 2width=416 # 网络输入宽度,取默认值height=416 # 网络输入高度,取默认值channels=3 # 网络输入通道数momentum=0.9decay=0.0005 # 防止过拟合angle=0 # 旋转角度,增强样本量saturation = 1.5 # 饱和度exposure = 1.5 # 曝光量hue=.1learning_rate=0.001 # 学习率burn_in=1000max_batches = 500200 # 最大训练次数policy=steps # 学习策略steps=400000,450000scales=.1,.1*、红色必须改[convolutional]size=1stride=1pad=1filters=18# 值为3*(classes + 5) activation=linear[yolo]mask = 0,1,2anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319classes=1 #数据集类别(定位器只有1类)num=6jitter=.3ignore_thresh = .7truth_thresh = 1random=1

d、标签文件

/home/data/word.labels

文件中每一行都表示一个标签

e、数据集配置文件

    /home/data/word.dataclasses = 1 # 类别个数train = /home/data/train.list # 训练集文件位置valid = /home/data/test.list # 测试集文件位置labels = /home/data/word.labels # 标签位置backup = backup/word # 结果保存位置top=5 # 表示输出前5个结果

f、开始训练

1、最后目录结构

    /home/data├── test      # 测试集目录├── test.list # 测试集文件├── train # 训练集目录├── train.list # 训练集文件├── word.cfg # 模型配置文件├── word.data # 数据集配置文件└── word.labels # 标签文件 

2、准备好之后就开始训练

./darknet detector train /home/data/word.data /home/data/word.cfg

3、开始打印日志:

第1部分:

    Region 16 Avg IOU 表示当前subdivision 内图片的评价IOU数字越大表明 精度越高Class 标注物体的正确率Obj 目标越接近1越好No Obj 趋于0.5R 当前模型在所有 subdivision 样本中检测出的正样本与实际正样本的比值count所有当前 subdivision 图片中包含正样本标签数量

第2部分:

    434483 当前迭代次数 0.008373 总体损失(损失很小的时候就可以停止训练)0.008263 avg 平均损失0.000100 rate 当前学习率0.093013 seconds 当前批次花费时间6951728 images 参与训练的图片总数

4、检测结果

如果显存足够大,训练过程会很快,训练完成开始检测,可以看到成功识别出4个汉字(大字)的位置并标注

./darknet detect /home/data/word.cfg /home/data/word.weights 0.jpg

      

四、识别位置并切割

darknet中python目录darknet.py

  # 修改点# so文件路径 lib = CDLL("libdarknet.so", RTLD_GLOBAL)# 配置文件和模型路径net = load_net("/home/data/result/word.cfg", "/home/data/result/word.weights", 0)meta = load_meta("/home/data/result/word.data")# 调用识别函数后返回类别和坐标(b'0', 0.9999345541000366, (89.49639129638672, 259.5166320800781, 78.38817596435547, 58.78640365600586))b'0' 类别0.9999345541000366 识别率89.49639129638672 位置中心x坐标259.5166320800781 位置中心y坐标78.38817596435547 相对宽度w58.78640365600586 相对高度h# 根据x y w h可以计算出位置的四边的边界位置左 left = x - (w / 2)右 right = x + (w / 2)上 top = y - (h / 2)下 bottom = y + (h / 2)

切割完后

五、标注类别

  将所有数据集分割后,开始标注类别,可以借助百度识别,但是效率不高。我们考虑半监督学习,自行标注一部分,然后训练,再根据训练结果识别,然后再重复之前的操作。

  标注完后大概有4277个类 也就是4277个汉字。

  

六、训练分类器

前两步和定位器一样

c、模型配置文件,分类器参考darknet19.cfg

/home/data/class.cfg

  *、蓝色可以改[net]batch=1 # 测试时1,训练时根据显存大小设置64 32 16subdivisions=1 # 测试时1,训练时根据batch 配置 16 8 4 2learning_rate=0.001 # 学习率max_batches = 500200 # 最大训练次数policy=poly # 学习策略angle=7 # 旋转样本*、红色必须改[convolutional]filters=4277 # 总共有多少类size=1stride=1pad=1activation=linear[avgpool][softmax]groups=1

d、标签文件

/home/data/class.labels

文件中每一行都表示一个标签(所以共有4277行)

     

e、数据集配置文件

/home/data/class.data

  classes = 4277 # 类别个数train = /home/data/train.list # 训练集文件位置valid = /home/data/test.list # 测试集文件位置labels = /home/data/class.labels # 标签位置backup = backup/class # 结果保存位置top=5 # 表示输出前5个结果 

f、开始训练

1、训练

./darknet classifier train /home/data/class.data /home/data/class.cfg

2、日志

  

3、训练完成后检测结果

./darknet classifier predict /home/data/class.data /home/data/class.cfg /home/data/class.weights code0.jpg

       

       

       

       

       可以看出四个字全部识别出来了,识别率还是很高的,好了任务完成~~

(本文只用于学习交流,如涉及作品内容、版权或其它问题,请及时与我们联系,我们将立即更正或删除相关内容。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_169418.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023-09-09 LeetCode每日一题(课程表)

2023-09-09每日一题 一、题目编号 207. 课程表二、题目链接 点击跳转到题目位置 三、题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中…

[De1CTF 2019]SSRF Me | BUUCTF

根据题目名我们知道这是一道SSRF的题目 它允许攻击者在受害服务器上发起未经授权的网络请求 分析 在buuctf上有一个提示 也就是说flag在 网站的flag.txt 访问主页 很明显是段flask代码 格式化后 from flask import Flask, request # 导入Flask和request模块 import sock…

易优cms响应式月嫂家政服务公司网站模板源码—自适应手机端设计,支持后台管理

易优cms响应式月嫂家政服务公司网站模板源码 自适应手机端 带后台 模板基于EyouCMS内核制作,模板编码为UTF8 ,适合行业:家政服务类企业。 模板信息: 模板分类:摄像、婚庆、家政、保洁 适合行业:家政服务类企业 模板介绍: 本模…

【 Tkinter界面-练习04】 画板作画详细揭示

一、说明 对画布的掌握分三个部分,将图形paint到画布、动画move、鼠标画;本篇将侧重于鼠标画的功能,提起鼠标画实现,将涉及一系列组合操作才能完成,这里将一一加以介绍。 Canvas 小部件具有大量功能,我们不…

Redis优化 RDB AOF持久化

---------------------- Redis 高可用 ---------------------------------------- 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境…

baichuan2(百川2)本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

buuctf crypto 【Dangerous RSA】解题记录

1.打开文件 2.看到e非常小,c和n都很大,应该是低加密指数,上脚本 from gmpy2 import * from Crypto.Util.number import * n0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbec…

【andv】a-select 多条数据重复(搜索无效)的问题:

文章目录 一、问题:二、分析:三、解决:【1】key值用index,value用某个属性index 也可以用随机数啥的代替,反正保证数据不一致就行了 ;【2】注意:value值加了一些东西,那么在取数据的时候要记得去掉,不然取到的就不单纯…

数据链路层重点协议-以太网

以太网简介 "以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了 一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等; 以太网数据帧…

Python语义分割与街景识别(2):环境搭建

前言 本文主要用于记录我在使用python做图像识别语义分割训练集的过程,由于在这一过程中踩坑排除BUG过多,因此也希望想做这部分内容的同学们可以少走些弯路。 本文是python语义分割与街景识别的第二篇,关于环境搭建的内容。这个部分是整个流…

springBoot对接Apache POI 实现excel下载和上传

搭建springboot项目 此处可以参考 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 配置Apache POI 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version> </…

项目(智慧教室)第四部分,页面交互功能,WebServer建立与使用,

一。页面构思 1.标题栏 大标题&#xff1a;智慧教室管理系统 小标题&#xff1a;灯光&#xff0c;报警&#xff0c;风扇&#xff0c;温度&#xff0c;湿度&#xff0c;光照 2.样式设计 背景设置。字体设置&#xff08;字体大小&#xff0c;格式&#xff0c;颜色&#xff09; 3.…

202331读书笔记|《我笨拙地爱着这个世界(“外卖诗人”王计兵自选集)》——脚在泥泞,心有繁花

202331读书笔记|《我笨拙地爱着这个世界&#xff08;“外卖诗人”王计兵自选集&#xff09;》——脚在泥泞&#xff0c;心有繁花 《我笨拙地爱着这个世界&#xff08;“外卖诗人”王计兵自选集&#xff09;》作者王计兵。这是读的他的第二本书&#xff0c;比较有烟火气&#xf…

180B参数的Falcon登顶Hugging Face,vs chatGPT 最好开源大模型使用体验

文章目录 使用地址使用体验test1:简单喜好类问题test2:知识性问题test3:开放性问题test4:中文支持test5:问题时效性test6:学术问题使用地址 https://huggingface.co/spaces/tiiuae/falcon-180b-demo 使用体验 相比Falcon-7b,Falcon-180b拥有1800亿的参数量

Java 【异常】

一、认识异常 Exception 在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 异常是异常exception&#xff0c;报错是报错error 1.算数异常 0不能作为除数&#xff0c;所以算数异常 2.空指针异常 arr不指向任何对象&#xff0c;打印不出arr的长度&#xff0c;…

第六章 图 四、图的广度优先遍历(BFS算法、广度优先生成树、广度优先生成森林)

一、实现步骤 广度优先遍历的实现步骤如下&#xff1a; 1.从图的某一个节点开始&#xff0c;将该节点标记为已经访问过的节点。 2.将该节点加入到队列中。 3.当队列非空时&#xff0c;执行以下操作&#xff1a; a. 取出队列队首节点&#xff0c;并遍历该节点与之相邻的所有…

下载Ubantu镜像文件、创建虚拟机以及ubantu安装详细教程

目录 前言 Ubantu是什么&#xff1f;它有什么作用&#xff1f; 一、Ubantu镜像文件下载步骤 1.第一步安装VMware Workstation 2.第二步下载Ubuntu的镜像文件 镜像文件下载官网网址入下&#xff1a; 二、创建虚拟机和安装Ubantu的步骤 1.打开VMware Workstation并点击创…

【C语言基础】那些你可能不知道的C语言“潜规则”

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…

堆相关例子-排序最多移动k距离

题目&#xff1a; 一个几乎有序的数组。几乎有序是指&#xff1a;如果把数组排好序&#xff0c;每个数的移动距离一定不超过K&#xff0c;并且K一定远小于数组长度 分析&#xff1a; 给定的数组有上面的限制条件&#xff0c;根据条件可以分析得到&#xff1a; 对于前0-k个数…