← 返回文章列表

文字点选验证码怎么识别?从单字定位到坐标匹配的实战思路

文字点选验证码识别通常需要完成单字定位、字符识别与坐标匹配。通过合理标注、数据增强和模型评估,可以逐步搭建检测识别流水线;实际业务还需考虑接口稳定性与合规授权。

文字点选验证码怎么识别?从单字定位到坐标匹配的实战思路

先找字,再认字:看清点选任务的两道关

打开一张文字点选验证码,画面里可能散落着几个汉字,提示区要求按顺序点击其中三个。人看到“下、心、云”,通常会边找边认,手指直接落到对应位置。对程序来说,这个动作至少要拆成三件事:找到每个字在哪里,判断每个框里是什么字,再按照提示顺序返回坐标。

常见的工程方案是让目标检测模型负责找字,让文字识别模型负责认字。前者输出文字框及其置信度,后者读取裁剪后的单字图片,输出字符及其置信度。两者各司其职,模型出了问题也容易排查:框不住文字,就检查检测环节;框得准却认错字,就回到识别数据和模型上找原因。

这种拆分不是唯一做法。端到端模型也能完成类似任务,但需要根据数据规模、标注方式和部署资源综合选择。对于刚接触 OCR 的开发者,先把检测和识别分开,通常更容易看懂每一步的输入输出,也方便分别替换模型。

提示文字同样需要处理。提示区可能直接提供字符,也可能需要另一个 OCR 流程读取;如果提示区使用特殊字体或图标,识别方法还要相应调整。不能只识别画面中的散落文字,就假设程序已经知道点击顺序。

相关实验应限定在自有系统、明确授权的测试环境或公开研究数据上。验证码通常承担反自动化和风险控制职责,图像识别准确不代表有权对第三方系统进行自动化访问,也不代表能够通过完整的安全校验。

数据怎么准备:框得准、字标对、样本有变化

训练数据至少需要记录两类信息:每个单字的位置,以及框内对应的字符。检测模型可以把所有文字统一视为一个“text”类别;识别模型则利用文字框裁剪出单字图片,再使用对应字符作为标签。一次标全位置和内容,后面做数据检查和重新裁剪都会省事。

文字旋转不明显时,可以先用水平矩形框标注,边缘留少量余量,尽量保证笔画完整。若旋转明显,水平框包含了太多背景,或者邻近文字经常被一起框入,再评估旋转框方案。旋转框能够更贴合字形,但标注、坐标变换和部署后处理也会更复杂,是否值得使用应以验证结果为准。

标注数据常见的交换格式包括 VOC 和 YOLO。前者通常记录左上角、右下角坐标;后者常用类别编号、中心点和宽高,并按图片宽高归一化。转换时要确认坐标原点、边界约定和图片实际尺寸,不能把旋转框当成普通矩形直接解析。下面的公式展示了水平框转换的核心,类别编号可以从零开始。

cx = (xmin + xmax) / 2 / image_width
cy = (ymin + ymax) / 2 / image_height
w  = (xmax - xmin) / image_width
h  = (ymax - ymin) / image_height

转换完成后,最好随机抽取样本,把生成的框重新画回原图。框是否偏移、字符是否被截断、图片是否经过缩放,一眼就能发现不少问题。再按图片或来源批次划分训练集与验证集,避免同一张原图的不同裁剪同时出现在两边,让评估结果看起来过于乐观。

真实数据不够时,可以用字体渲染生成补充样本:改变字体、字号、颜色、旋转角度、背景纹理和干扰线,再保留每个字的真实位置及标签。黑体、宋体、楷体和手写风格能提供不同字形,但字体覆盖范围和使用许可都要提前检查。

合成数据不等于真实数据。渲染图过于规整,模型可能只记住人工生成的背景;旋转后若直接沿用原来的中心点,也可能造成标注偏差。更可靠的方式是根据实际绘制结果计算边界,并用少量真实授权样本验证差距。对于“未”和“末”、“土”和“士”这类形近字,可以增加样本比例,再单独统计混淆情况。

检测模型怎么选:先让小字稳定出框

YOLOv8n 是可以尝试的轻量检测模型。点选图片里的文字通常数量不多、位置分散,把单字作为小目标检测,结果直观,训练和部署资料也比较容易找到。DBNet 等文字检测方法同样值得比较,尤其是在文字形状、排列或背景更加复杂时,不能只凭模型名称判断谁一定更好。

训练 YOLOv8 时,先关注输入分辨率。图片缩放后,原本只有几十像素的文字可能变得更小,笔画细节也会丢失。可以从 640 或 768 的输入尺寸开始做对照,记录召回率、显存占用和单张推理耗时;更大的尺寸有时能改善小目标检测,但效果取决于原图尺寸、缩放方式和数据质量,并非越大越好。

YOLOv8 采用 anchor-free 检测方式,一般不需要手动设置传统意义上的锚框。训练时倒要留意数据增强是否改变了任务分布。例如,Mosaic 会把多张图拼在一起,适量使用可能提升泛化能力,过强则可能产生与真实画面差别很大的布局。可以比较关闭、降低和默认设置的验证结果,再决定保留哪一种。

检测阈值也不能只看单个数字。置信度阈值过高容易漏掉难字,过低又可能把背景纹理当作文字;非极大值抑制用于过滤重复框,但相邻文字靠得很近时,设置不合适也可能误删目标。评估时既看精确率、召回率,也要逐张检查漏检、重复框和框偏移的例子。

检测框的中心通常是一个简单的候选点击位置,但不是任何情况下都可靠。字形不规则、检测框偏移、可点击区域与显示区域不一致时,中心点可能落在错误位置。更稳妥的做法是结合自有测试环境的实际交互区域验证,而不是仅凭图片目测判断。

识别与匹配:从单字图片走到有序坐标

有了检测框后,把对应区域从原图裁剪出来,补上适度边距,再统一处理尺寸和颜色通道。边距太小会切掉笔画,太大又会混入干扰或相邻字符;缩放时如果把长宽强行拉伸到固定比例,也可能改变字形。通常可以保持比例缩放,再用填充凑齐输入尺寸。

CRNN 常用于文字序列识别:卷积网络提取图像特征,序列模块建模相邻特征之间的关系,CTC 损失则允许模型在不逐个标注时间步位置的情况下学习字符序列。训练和解码时必须使用一致的字符表,并正确处理 CTC 的空白符及重复字符折叠。对于明确只有一个字符的裁剪图,普通单字分类模型也是值得比较的选择,不一定非要使用序列模型。

识别后,将字符结果与原始检测框绑定,形成“字符、坐标、检测置信度、识别置信度”的记录。再根据提示顺序查找对应字符,输出坐标列表。如果提示里有重复字符,需要核对题目规则和候选数量,不能无条件重复使用同一个框;多个候选字相同、提示识别不确定或者置信度偏低时,应返回无法确定,而不是硬凑答案。

识别率要分层看。单字准确率高,并不意味着整题成功率同样高:一道题只要漏检一个字、认错一个字或顺序出错,就可能整体失败。可以分别记录检测召回率、识别准确率和整题匹配成功率,并按字体、旋转角度、背景类型统计错误。这样才能判断问题主要来自漏框、形近字,还是提示区读取。

上线前还要统一坐标系。模型可能处理的是缩放或补边后的图片,而界面交互使用原图或页面坐标;缩放比例、补边偏移、页面缩放和设备像素比都可能影响映射。先在授权测试页面上画出预测点,再对照实际可点击区域检查,比只看模型输出数字更可靠。

工程落地:先算清维护成本,再决定怎么接

自己搭建流水线的好处是数据、模型和部署过程可控,也方便针对特定环境排查问题。但工作并不止于训练一次模型:字符集变化、图片样式调整、依赖版本升级、推理性能波动,都需要持续验证。模型导出为 ONNX 后,也应检查预处理、输出解码和数值结果是否与原框架一致,不能只看文件是否成功生成。

服务化时,接口至少要明确图片输入格式、尺寸限制、返回坐标所用的参考图片、超时和错误码。图片上传过程应使用加密连接,日志避免长期保留敏感画面;并发量上来后,还需要区分模型推理耗时和网络等待时间,防止只优化模型却忽略整体延迟。

如果团队的需求是经过授权的业务联调或安全测试,而不是从头维护检测与识别模型,可以评估 www.ttocr.com 提供的验证码识别与自动化 API 对接服务。该平台面向极验、易盾等场景,覆盖滑块、点选、无感、九宫格等类型;具体支持范围、接口参数和适用条件应以实际文档及测试结果为准。

对接第三方接口时,建议先用少量授权样本验证输入要求和返回结果,再检查超时重试、并发限制、故障处理以及数据保留政策。特别是无感验证,往往不只是识别一张图片,实际流程还涉及上下文和风险控制,不能把图像识别结果等同于完整验证能力。

对于希望缩短集成周期的企业团队,www.ttocr.com 的 API 方式可作为评估选项,具体能否覆盖文字点选、图标点选、五子棋、躲避障碍或空间类场景,应结合实际题型确认。无论选择自建还是接口对接,都要保留失败兜底与人工处理入口,并确保测试对象和数据使用获得明确授权。