【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字
文章目录
- 1. 写在前面
- 2. 读取验证码图像
- 3. 生成颜色掩码
- 4. 生成黑白结果图
- 5. OCR文字识别
- 6. 测试结果
【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章
1. 写在前面
今天给大家带来一个爬虫领域过花式验证码小技巧,这是最近来源于一位铁子的分享,验证码是下面这样的(可以看到附带了某些条件,比如说输入特定颜色的字符):


在此之前我专门去开源社区找了找一些成熟的解决方案,确实有多种花式处理的方案,相比于自己去收集样本,训练一个识别模型,其中数据样本的标注是比较耗时的,想要保持较高的准确率,这是一件持续的事情,因为你需要让你的模型有能够适应更新带来的对抗。又或者是打码平台的低效率,这次分享的方式更加实用:

话不多说,核心代码其实也就几十行,轻轻松松识别上面类型的验证码,代码的核心思想就下面四步:
1、颜色空间转换
2、根据HSV颜色阈值生成掩码
3、生成黑白结果图
4、OCR文字内容识别
通俗点讲就是剔除与需提取颜色无关的内容,最后识别!
HSV颜色阈值参考如下(具体自己可以调节):

2. 读取验证码图像
首先将事先准备好的验证码图片,然后通过程序读取图片,代码如下:
def read_image(image_path):img = cv2.imread(image_path)if img is None:raise ValueError(f"读取图片失败: {image_path}")return img
3. 生成颜色掩码
HSV(色调、饱和度、亮度)颜色空间是一种表示颜色空间的模型,类似于 RGB 颜色模型
我们可以根据上面HSV范围的阈值范围,使用cv2.inRange函数生成二值掩码。掩码中的目标颜色对应的区域被设为白色(255),其他颜色对应的区域被设为黑色(0)
def apply_color_mask(hsv, lower, upper):return cv2.inRange(hsv, np.array(lower), np.array(upper))
4. 生成黑白结果图
生成黑白结果图的目的就是将指定颜色的内容从原始图像中提取出来,以便进行后续的OCR文字识别。在验证码的应用场景中,验证码可能包含多个颜色,而我们只对其中某一种颜色感兴趣。通过生成黑白结果图,我们可以将感兴趣的颜色保留下来,而将其他颜色置为白色,从而突出需要识别的内容,代码如下:
def generate_result_image(img, mask, result_path):result = np.zeros_like(img)result[mask == 255] = [0, 0, 0]result[mask != 255] = [255, 255, 255]cv2.imwrite(result_path, result)
这是验证码图片处理完生成黑白图的效果:

5. OCR文字识别
最后借助OCR对黑白结果图进行识别,基本上成功率在90%以上,基本够用,识别代码如下:
def ocr_classification(image_path):try:with open(image_path, 'rb') as f:img_bytes = f.read()ocr = ddddocr.DdddOcr(show_ad=False)return ocr.classification(img_bytes)except Exception as e:raise ValueError(f"OCR识别出错: {e}")def verification_ocr(image_path, tips):"""验证码识别主函数Args:image_path: 图像文件路径tips: 识别提示, 包括"红色"、"黄色"、"蓝色"、"全部"Returns:result: OCR识别结果"""result_path = "1.png"img = read_image(image_path)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)color_ranges = {"红色": ([0, 50, 50], [10, 255, 255], [170, 50, 50], [180, 255, 255]),"黄色": ([17, 45, 50], [34, 255, 255]),"蓝色": ([100, 50, 50], [130, 255, 255]),}if tips in color_ranges:ranges = color_ranges[tips]mask = apply_color_mask(hsv, *ranges[:3])if tips == "红色":mask2 = apply_color_mask(hsv, *ranges[2:])mask = cv2.bitwise_or(mask, mask2)generate_result_image(img, mask, result_path)with open(result_path, 'rb') as f:img_bytes = f.read()ocr = ddddocr.DdddOcr(show_ad=False)res = ocr.classification(img_bytes)#输出识别内容print(res)
tips参数代表传入的颜色,并根据颜色去选择阈值
cv2.cvtColor(img, cv2.COLOR_BGR2HSV)将图像从BGR色彩空间转换为HSV色彩空间。HSV(色调、饱和度、明度)通常更适合基于颜色的图像处理
ddddocr这个库自然不用多说了,很好用。可以满足很对场景下的使用需求,开源的力量!
6. 测试结果

如果你只是为了解决这类验证码识别为目的,那么这个方案完全是够用的!最后,其实还是建议大家体验一下自己训练样本的过程,打造一个高质量的model
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章
相关文章:
【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字
文章目录 1. 写在前面2. 读取验证码图像3. 生成颜色掩码4. 生成黑白结果图5. OCR文字识别6. 测试结果 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【…...
【ROS 2 进阶-MoveIt!】MoveIt!中的关键节点
所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客 原文档链接:Docs...
-bash: jps: command not found
背景 服务器的jdk通过yum 安装的,要用jps查询pid,提示找不到命令 yum install -y java-1.8.0-openjdk.x86_64 一、jps命令无法找到 [devhgh-tob-hsbc-dev-003 ~]$ jps -bash: jps: command not found 二、检查基础Java环境 [devhgh-tob-hsbc-dev-003 ~]…...
[CLickhouse] 学习小计
1.建表 正常按照如下语句进行建表,但会报错说缺少ORDER BY 或 PRIMARY KEY CREATE TABLE omds.a (x String COMMENT ,y String COMMENT ,z String ) ENGINE MergeTree(); 若我们仅需建一个没有主键的表,直接使用如下建表语句即可: CREATE…...
一款非常优秀的项目管理工具:进度猫(推荐)
在项目管理中,一个好的工具可以极大地提高效率。 进度猫是一款非常优秀的项目管理工具。它具有非常强大的功能,可以帮助团队更好地管理项目进度。 通过可视化的方式,将项目进度、任务分配、需求变更等全面呈现给团队成员,让团队…...
Bert学习笔记(简单入门版)
目 录 一、基础架构 二、输入部分 三、预训练:MLMNSP 3.1 MLM:掩码语言模型 3.1.1 mask模型缺点 3.1.2 mask的概率问题 3.1.3 mask代码实践 3.2 NSP 四、如何微调Bert 五、如何提升BERT下游任务表现 5.1 一般做法 5.2 如何在相同领域数据中进…...
信号功率放大器的工作原理和特点是什么
信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理ÿ…...
基于go标准分层架构项目设计实现
基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…...
原理Redis-IntSet
IntSet IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 结构如下: typedef struct intset {uint32_t encoding; /* 编码方式,支持存放16位、32位、64位整数*/uint32_t length; /* 元素…...
逸学java【初级菜鸟篇】9.3 Stream流
hi,我是逸尘,一起学java吧 得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念(就是都基本使用lambda的形式)。 流处理 我们首先理解什么是流处理,它类似于sql语句,可以执行非常复…...
html页面直接使用elementui Plus时间线 + vue3
直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…...
信息压缩模型在自然语言处理中的应用和探讨
信息压缩模型在自然语言处理中的应用和探讨 摘要:正文:结论:附录:摘要: 随着人工智能和深度学习的发展,自然语言处理(NLP)在信息处理中的角色变得越来越重要。然而,海量的自然语言数据为信息处理带来了挑战——更多的信息通常意味着更高的处理成本,并可能导致效率降低。为…...
新版mmdetection3d将3D bbox绘制到图像
环境信息 使用 python mmdet3d/utils/collect_env.py收集环境信息 sys.platform: linux Python: 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) [GCC 9.4.0] CUDA available: True numpy_random_seed: 2147483648 GPU 0,1: NVIDIA GeForce RTX 3090 …...
合伙人注册即得/创业平台扶持!
问心一语持续体验中~ 与公司签订线下(线上)纸质合伙人代理合同,具备法律效力。 一级直推、非一级直推注册即得奖励。(消耗完毕被邀请用户赠送的AI免费使用条数) 即:邀请1人注册即得并消耗!只需注册无需充值ÿ…...
02_使用API_String
StringBuilder StringBuilder 代表可变字符串对象,相对于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的好处:StringBuilder 比 String 更适合做字符串的修改操作,效率会更高,代码也会更简…...
Spring IOC/DI和MVC及若依对应介绍
文章目录 一、Spring IOC、DI注解1.介绍2.使用 二、Spring MVC注解1.介绍2.使用 一、Spring IOC、DI注解 1.介绍 什么是Spring IOC/DI? IOC(Inversion of Control:控制反转)是面向对象编程中的一种设计原则。其中最常见的方式叫做依赖注入(…...
python的多层嵌套循环时,break可以退出多层循环吗?
在Python中,break 语句只能退出当前所在的循环,无法直接退出多层嵌套的循环。但是,你可以通过使用一个标志变量或者通过使用异常来模拟退出多层循环的效果。 使用标志变量: flag False for i in range(5):for j in range(5):if…...
链表OJ--上
文章目录 前言一、反转链表二、移除链表元素三、链表中倒数第K个结点四、相交链表五、链表的中间结点 前言 一、反转链表 力扣206:反转链表- - -点击此处传送 思路图: 方法一:改变指向 方法二: 代码: //方法一 /…...
内衣洗衣机哪些品牌质量好实惠?小型洗衣机全自动
现在洗内衣内裤也是一件较麻烦的事情了,在清洗过程中还要用热水杀菌,还要确保洗衣液是否有冲洗干净,还要防止细菌的滋生等等,所以入手一款小型的烘洗全套的内衣洗衣机是非常有必要的,专门的内衣洗衣机可以最大程度减少…...
推荐一款适合做智慧旅游的前端模板
目录 前言 一、功能介绍 二、前端技术介绍 三、功能及界面设计介绍 1、数据概览 2、车辆监控 3、地图界面 4、其它功能 四、扩展说明 总结 前言 智慧旅游是一种全新的旅游业务模式,它充分利用先进的信息技术,提升旅游体验,优化旅游管…...
3步搭建企业级管理后台:RuoYi-Vue3-FastAPI完整实战
3步搭建企业级管理后台:RuoYi-Vue3-FastAPI完整实战 【免费下载链接】RuoYi-Vue3-FastAPI 基于Vue3Element PlusFastAPI开发的一个通用中后台管理框架(若依的FastAPI版本),支持代码生成。A general middle and backend management…...
智能资源下载神器:3分钟掌握全平台视频音频图片批量下载技巧
智能资源下载神器:3分钟掌握全平台视频音频图片批量下载技巧 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 还在…...
【2026企业级缓存治理黄金标准】:基于17家头部客户压测报告的Dify缓存调优清单
更多请点击: https://intelliparadigm.com 第一章:Dify 2026缓存治理的演进逻辑与黄金标准定义 随着 LLM 应用规模化部署,Dify 平台在 2026 版本中重构了缓存治理体系——从“响应级静态快照”跃迁至“语义感知动态分层缓存”,核…...
KISSABC伴学 英语沉浸式伴学优势深度解析
KISSABC伴学聚焦少儿英语伴学,以“沉浸式语言环境专业引导”为核心,区别于传统英语学习工具“跟读式”“刷题式”的学习模式,打造“听、说、读、玩”四位一体的沉浸式伴学体验,助力孩子培养语感、规范发音、提升口语,贴…...
探索KMS智能激活:为Windows和Office提供稳定授权的完整方案
探索KMS智能激活:为Windows和Office提供稳定授权的完整方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化工作环境中,稳定的系统授权是高效生产力的基石。KMS_…...
智能轮椅系统:多模态控制与健康监测技术解析
1. 智能轮椅系统概述 作为一名长期从事医疗辅助技术研发的工程师,我见证了传统电动轮椅向智能化、多模态交互的演进过程。当前市面上的大多数电动轮椅仍停留在单一操纵杆控制阶段,这对于患有肌萎缩侧索硬化症(ALS)、中风后偏瘫等运…...
C# .NET 周刊|2026年4月1期
国内文章.NET 高级开发 | 开发 .NET 诊断工具、链路追踪原理https://www.cnblogs.com/whuanle/p/19809387文章详细介绍了.NET诊断工具中的System.Diagnostics和Microsoft.Diagnostics命名空间,重点讲解了Debug和Trace的使用方法及区别。通过实例演示Debug.Assert的断…...
哔哩下载姬DownKyi:5分钟掌握B站8K视频下载终极技巧
哔哩下载姬DownKyi:5分钟掌握B站8K视频下载终极技巧 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...
四大核心测试智能体
四大核心测试智能体架构 智能体概览表 智能体代号名称核心功能主要输出格式技术依赖APIAPI测试智能体OpenAPI规范转测试代码多框架测试代码、JMX、Postman集合OpenAPI Schema, LLM, RestAssuredPERF性能测试智能体性能脚本生成与分析Artillery YAML, k6 JS, 性能报告性能指标…...
CodePercept:代码增强多模态模型在工业视觉中的应用
1. 项目背景与核心价值 去年在开发一个工业质检系统时,我发现传统CV模型对复杂缺陷的识别率始终卡在87%左右难以突破。当时尝试了各种数据增强和模型微调手段,直到偶然将代码逻辑作为辅助输入喂给视觉模型,准确率突然跃升到93.5%。这个意外发…...
