图像匹配验证码自动检测:基于YOLOv10和传统图像匹配算法

图像匹配验证码自动检测:基于YOLOv10和传统图像匹配算法

图像匹配验证码自动检测:基于YOLOv10和传统图像匹配算法

    • 引言
    • 图像采集
    • YOLOv10目标检测
    • 图像匹配
      • 1.计算两张图像的灰度直方图相似性
      • 2. RGB通道分离后的直方图相似度计算
      • 3. 感知哈希算法
      • 3. 均值哈希算法 (aHash)
    • 总结与展望

引言

再来更新一下我们的验证码识别算法,这次解决的是图像匹配点选验证码,如图所示
在这里插入图片描述
,
在这里插入图片描述

还是先给出逻辑,人眼选择步骤:

  1. 首先是看到下面的图像是什么样
  2. 看看上面大图中的四个小的图形
  3. 匹配上面观察到的二者图像,选择正确的

所以对应到用算法进行自动点选,简化为:

  1. 用YOLOv10算法检测出图像中所有的图像文件
  2. 利用位置关系区分上方图像文件和下方图像文件(需要点选的图像通常都在图像y坐标最下方)
  3. 把下面的图像文件和上面的一一匹配,寻找相似度最高的,返回即可

图像采集

在这里插入图片描述
在这里插入图片描述
为了满足泛化性,收集了3w+张图像,如果需要请看我的个人主页获取。
在这里插入图片描述
标注方法如上图所示

YOLOv10目标检测

基于标注好的数据集文件,使用YOLOv10模型检测验证码中的图像元素,提取出它们的位置和特征。检测结果如下:
在这里插入图片描述
YOLO(You Only Look Once)是一种实时目标检测模型,具有非常高的检测精度和速度。YOLOv10作为YOLO系列中的最新版本,针对图像中的目标进行全局性预测,相比传统方法具有更好的准确性和计算效率。
在验证码识别中,YOLOv10通过以下方式发挥了重要作用:

目标检测:YOLOv10能够识别验证码中的各类目标(如数字、字母、特殊符号等),并且能够有效地处理图像的旋转、缩放等变化。
多尺度检测:YOLOv10支持多尺度检测,可以在不同分辨率下提取图像特征,适应各种验证码图像的变化。
高效推理:YOLOv10具有极高的推理速度,在处理实时验证码图像时,可以迅速提取有效信息。

图像匹配

图像匹配:结合传统的图像匹配算法(如模板匹配或特征匹配),根据YOLOv10提取出的特征进一步细化和优化识别结果。

博主主要采用传统图像中的基于直方图的相似度计算、感知哈希(pHash)、均值哈希(aHash)和差值感知哈希(dHash),以及计算汉明距离的方法来对图像进行匹配,代码如下:

1.计算两张图像的灰度直方图相似性

功能:此函数计算两张图像的灰度直方图的相似度,具体步骤如下:
cv2.calcHist:计算图像的灰度直方图,[0]表示计算单通道(灰度)直方图,[256]表示分成256个桶,每个桶对应一个灰度级别(0-255)。
degree:相似度度量,通过遍历两个直方图的每个值计算相似度,若对应的灰度值相同,则相似度增加;若不同,则计算差异并对其做反向处理,使得差异越小,相似度越大。
最终返回两个图像的相似度得分。
应用:该方法用于基于灰度直方图计算两张图像的相似度,适用于图像的对比度或亮度变化不大的场景。

def calculate(image1, image2):# 灰度直方图算法# 计算单通道的直方图的相似值hist1 = cv2.calcHist([image1], [0], None, [256], [0.0, 255.0])hist2 = cv2.calcHist([image2], [0], None, [256], [0.0, 255.0])# 计算直方图的重合度degree = 0for i in range(len(hist1)):if hist1[i] != hist2[i]:degree = degree + (1 - abs(hist1[i] - hist2[i]) / max(hist1[i], hist2[i]))else:degree = degree + 1degree = degree / len(hist1)return degree

2. RGB通道分离后的直方图相似度计算

功能:该函数计算两张RGB图像每个通道(R、G、B)的灰度直方图相似度:

首先将输入的两张图像调整到指定大小(默认是256x256)。
cv2.split(image):分离图像的三个RGB通道。
然后分别计算每个通道的灰度直方图相似度(调用前面定义的calculate函数)。
最后返回三个通道的相似度平均值。
应用:该方法适用于彩色图像的相似度计算,通过分别计算每个通道的直方图相似度来评估两张图像在RGB各通道上的一致性。

def classify_hist_with_split(image1, image2, size=(256, 256)):# RGB每个通道的直方图相似度# 将图像resize后,分离为RGB三个通道,再计算每个通道的相似值image1 = cv2.resize(image1, size)image2 = cv2.resize(image2, size)sub_image1 = cv2.split(image1)sub_image2 = cv2.split(image2)sub_data = 0for im1, im2 in zip(sub_image1, sub_image2):sub_data += calculate(im1, im2)sub_data = sub_data / 3return sub_data

3. 感知哈希算法

功能:感知哈希(pHash)是一种通过图像的频域信息来生成图像哈希的方法:

cv2.resize(image, (32, 32)):将图像缩小为32x32的尺寸。
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY):将图像转换为灰度图。
cv2.dct(np.float32(image)):对图像进行离散余弦变换(DCT),DCT可以提取图像中的频率信息,去除低频部分(如大致形状和纹理),保留图像的重要特征。
取DCT变换后的左上角8x8区域,这部分代表图像的低频成分。
然后计算这些值的平均值,根据大于平均值的部分生成二进制哈希。
应用:感知哈希用于图像的指纹生成,适合图像相似度计算和图像去重,能有效应对图像压缩、缩放等变化。

# 感知哈希算法
def pHash(image):image = cv2.resize(image, (32, 32), interpolation=cv2.INTER_CUBIC)image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#     cv2.imshow('image', image)#     cv2.waitKey(0)#     cv2.destroyAllWindows()# 将灰度图转为浮点型,再进行dct变换dct = cv2.dct(np.float32(image))#     print(dct)# 取左上角的8*8,这些代表图片的最低频率# 这个操作等价于c++中利用opencv实现的掩码操作# 在python中进行掩码操作,可以直接这样取出图像矩阵的某一部分dct_roi = dct[0:8, 0:8]avreage = np.mean(dct_roi)hash = []for i in range(dct_roi.shape[0]):for j in range(dct_roi.shape[1]):if dct_roi[i, j] > avreage:hash.append(1)else:hash.append(0)return hash

3. 均值哈希算法 (aHash)

功能:均值哈希(aHash)通过将图像缩小并计算像素值的平均值,生成图像的哈希值:

cv2.resize(image, (8, 8)):将图像缩小为8x8的尺寸。
np.mean(image):计算图像所有像素的平均值。
根据每个像素值与平均值的比较,生成二进制哈希值。
应用:均值哈希是一种简单且高效的图像哈希方法,常用于图像去重和相似度计算,适合于图像尺寸变化较小的场景。

# 均值哈希算法
def aHash(image):# 缩放为8*8image = cv2.resize(image, (8, 8), interpolation=cv2.INTER_CUBIC)# 转换为灰度图image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)avreage = np.mean(image)hash = []for i in range(image.shape[0]):for j in range(image.shape[1]):if image[i, j] > avreage:hash.append(1)else:hash.append(0)return hash# 差值感知算法
def dHash(image):# 缩放9*8image = cv2.resize(image, (9, 8), interpolation=cv2.INTER_CUBIC)# 转换灰度图image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#     print(image.shape)hash = []# 每行前一个像素大于后一个像素为1,相反为0,生成哈希for i in range(8):for j in range(8):if image[i, j] > image[i, j + 1]:hash.append(1)else:hash.append(0)return hash# 计算汉明距离
def Hamming_distance(hash1, hash2):num = 0for index in range(len(hash1)):if hash1[index] != hash2[index]:num += 1return num

这些函数涵盖了不同类型的图像相似度计算方法,包括基于灰度直方图的相似度计算、感知哈希、均值哈希和差值感知哈希等。它们可以广泛应用于图像检索、去重、识别等领域,帮助快速高效地评估两张图像的相似性。

总结与展望

经过检测与匹配,能够较好实现验证码识别

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

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

相关文章

POI word转pdf乱码问题处理

1.使用poi 转换word文档成pdf 导入依赖 <dependency><groupId>com.aspose</groupId><artifactId>words</artifactId><version>16.8.0</version></dependency>2.代码实现: SneakyThrowspublic void wordToPdf(String docPath,…

华为云全球加速GA该在什么场景使用呢?

在全球化的商业环境中&#xff0c;企业面临着如何快速、稳定地扩展全球业务的挑战。华为云全球加速&#xff08;GA&#xff09;作为一款高效的全球网络加速服务&#xff0c;致力于帮助企业提升全球用户的访问体验&#xff0c;确保业务的稳定运行。九河云来和大家介绍一下什么是…

【C++】string(一)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的string类&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 标准库中的string类1.1 string类(了解)1.2 string类的常用接口说明(A) string类对象的…

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具&#xff0c;它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则&#xff0c;QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下&#xff0c;记录和管理车险保单信息是一项必不可少的任务。然而&#xff0c;面对数量庞大的电子保单&#xff0c;传统的手工录入方式显得尤为低效——它不仅消耗大量时间&#xff0c;而且容易出现错误&#xff0c;这不仅影响了用户的满意度&#xf…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面&#xff0c;提高在搜索引擎结果页面上的排名&#xff0c;从而获得更多的自然流量。有效的SEO策略能够让您在激…

【go从零单排】JSON序列化和反序列化

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域&#xff0c;元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心&#xff0c;他认为开放元宇宙将融合娱乐、游戏和科技产业&#xff0c;带来一个光明的未来。本文将深入探讨采访中的关键内容&#xff0c;分析元宇宙的…

QT自定义控件封装

QT自定义控件封装 1.概述 这篇文章介绍如何创建UI文件&#xff0c;通过自定义方式将两个控件联动起来&#xff0c;实现自定义功能。 2.创建UI文件 新建一个widget的普通项目&#xff0c;然后在项目名称上右键选择And New... 新建文件&#xff0c;然后选择QT 再选择Qt Desig…

王鹤棣演唱会即将泰国开唱,从原点走向未来,兑现与粉丝之约

对喜爱王鹤棣的粉丝来说&#xff0c;12月28日注定是个令人激动的日子&#xff0c;因为这天&#xff0c;王鹤棣即将在泰国曼谷举办D.Party演唱会&#xff0c;这一消息一经官宣&#xff0c;便引发大量中国以及东南亚地区粉丝欢呼&#xff0c;大家对王鹤棣此次演唱会表现出超常热情…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

<项目代码>YOLOv7 草莓叶片病害识别<目标检测>

YOLOv7是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv7具有更高的…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

android studio 轮询修改对象属性(修改多个textview的text)

android studio版本&#xff1a;23.3.1 例程名称&#xff1a;loopsettextviewtext 这几天在帮一个朋友做个数独小游戏&#xff0c;如下图&#xff1a; 要可以玩自定义游戏&#xff0c;点击清空后&#xff0c;所以数字要清除。 要把所有的内容清空&#xff0c;一共有81个text…

Linux(CentOS)项目总结(前后端分离)

项目情况&#xff1a; 前端开发&#xff1a;vue3 vite ts VSCode后端开发&#xff1a;JDK17 Spring Boot 3 Mybatis Maven IDEA数据库&#xff1a;MySQL8.4.3 SQLyog代码管理&#xff1a;Git虚拟环境&#xff1a;VMware远程登录&#xff1a;FinalShell服务器操作系统&…

C# 选择文件夹路径

通过C#代码&#xff0c;调出windows风格的文件夹选择框。提供界面来选择指定文件夹&#xff0c;并将文件夹完整路径以字符串形式返回。 示例&#xff1a; 代码&#xff1a; #region 选择指定文件夹 string folderPath ""; FolderBrowserDialog folderBrowserDialo…

unity3d————协程原理讲解

1.协程的本质 协程可以分成两部分1.协程函数本体 2.协程调度器 协程本体就是一个能够中间暂停返回的函数 协程调度器是Unity内部实现的&#xff0c;会在对应的时机帮助我们继续执行协程函数 Unity只实现了协程调度部分协程的本体本质上就是一个 C#的迭代器方法 2.协程本体是…

丹摩征文活动|CogVideoX-2b:从0到1,轻松完成安装与部署!

丹摩征文活动 | CogVideoX-2b&#xff1a;从0到1&#xff0c;轻松完成安装与部署&#xff01; CogVideoX 介绍 CogVideoX的问世&#xff0c;标志着视频制作技术迈入了一个全新的时代。它不仅打破了传统视频制作在效率与质量之间的平衡难题&#xff0c;还通过其先进的3D变分自…

知识库搭建|员工培训的效率利器

在企业的快速发展过程中&#xff0c;知识库的搭建成为了提升员工培训效率的关键一环。一个高效的知识库不仅能够为员工提供便捷的学习资源&#xff0c;还能促进知识的持续积累和传承。本文将探讨如何借助知识库工具&#xff0c;来提升员工培训的效率。 一、知识库在员工培训中…