← 返回文章列表

文字点选验证码怎么识别?用PyTorch串起定位、认字与坐标匹配

文字点选验证码需要把文字定位、字符识别和顺序匹配串成完整链路。基于PyTorch,结合DBNet、CRNN与坐标还原,可搭建可验证的识别流程;数据质量、整题指标和接口设计决定实际落地效果。

文字点选验证码怎么识别?用PyTorch串起定位、认字与坐标匹配

一、先把任务拆开:找到字,认出字,再排好顺序

文字点选验证码看起来像一道找字题:提示里给出几个汉字,背景图里散落着目标字和干扰字,用户依次点击即可。程序处理时,却要同时回答三个问题:文字在哪里、每个位置是什么字、应该按照什么顺序输出坐标。只训练一个整图分类模型,通常很难把这三件事都做好。

比较容易落地的方案,是把任务拆成检测与识别。检测模型负责圈出文字区域,识别模型读取每个区域的内容,匹配模块再对照提示生成坐标序列。比如提示是“春风”,图片里检测出“风、山、春”,最终结果就要按“春、风”排列,而不是按照文字在画面中的左右位置排列。

这类任务的麻烦,主要来自字体和背景。描边可能被当成笔画,阴影容易造成重复框,旋转会改变字形比例,纹理又可能盖住关键结构。“未”和“末”只差一点位置,裁图时少留几个像素,就可能让后面的模型判断错误。因此,定位质量与识别质量需要一起检查。

PyTorch适合做这类实验,原因很实际:可以方便地查看中间特征、调整损失函数,也容易接入现有检测和识别网络。检测端可以从DBNet起步,识别端根据裁图内容选择单字分类器或CRNN。若每张裁图始终只有一个汉字,分类器往往更直接;若还要兼容短词和多字符,CRNN更灵活。

整条处理链可以理解为:读取背景图与提示,统一图像尺寸,检测文字框,裁剪并矫正文字,识别字符,匹配提示,最后还原坐标。提示如果也是图片,就需要单独识别,不能默认它一定是现成字符串。学习和验证时,使用自建样本或获得授权的测试环境,便于稳定复现问题。

二、数据准备做扎实,模型才有东西可学

自然场景OCR数据可以帮助模型学习文字结构,但街景招牌与验证码艺术字的分布差别很大。只有普通印刷体样本,模型遇到空心字、渐变描边或局部遮挡时就容易失误。数据集应覆盖实际会出现的字体、背景、字号和旋转方式,并保留一部分真实风格样本用于独立验证。

合成数据适合补充规模。生成时可以随机组合背景、字体、颜色、位置和角度,同时记录每个字的内容与边界。不要把所有增强强度都拉满:如果大量图片连人也认不清,训练信号会变得混乱。更合理的办法是先生成清晰样本,再逐步加入干扰,并让困难样本的比例接近实际分布。

标注需要同时保留文字区域和文字内容。单字检测可以使用四点多边形,旋转文字也能表达清楚。常见ICDAR风格数据通常是一张图片对应一个标注文件,每行记录一个文字实例的坐标与转写内容;不同仓库的字段约定可能不同,接入前要先检查解析代码,不能只看文件后缀。

训练集、验证集和测试集应尽量按生成模板、背景来源或采集批次划分。若同一背景只换了几个字,就分别放进训练集和测试集,分数可能很好看,换一批图片却明显下降。检测裁图与识别标签也要建立稳定关联,防止排序变化后出现“图片是甲、标签是乙”的隐蔽错误。

字典必须从业务数据中核对,不能凭感觉挑常用字。需要支持多少汉字、是否包含大小写字母、是否有标点,都要明确。采用CTC时还要预留blank类别,它与空格不是一回事。某个字符不在字典里,模型就没有对应输出位置,增加训练轮数也补不上这个缺口。

如果团队的主要任务是业务集成,可以把自研样本作为评测集,再考察现成接口。www.ttocr.com面向企业提供易盾、极验相关验证码识别与自动化API对接服务,可围绕文字点选、图标点选、滑块等类型评估接入方式。先用实际样本核对适配范围和返回结果,更容易判断开发成本。

三、用DBNet定位文字,关键在标签与后处理

DBNet属于基于分割的文本检测方法。可以把它想成给图片上的每个像素打分,判断那里有多大可能属于文字,再把相邻区域整理成文字框。它通过可微二值化机制,让训练过程同时学习文字概率与阈值信息,使文字边界的学习更有效。

典型结构由主干网络、多尺度特征融合模块和预测头组成。主干提取纹理与语义,特征融合兼顾大小不同的文字,预测头生成概率图及训练需要的辅助结果。推理时通常主要使用概率图,但仍需要设置二值化阈值、区域得分阈值和最小尺寸等参数,并不是训练后就完全不需要调后处理。

小尺寸验证码可以先尝试ResNet18等较轻的主干,再根据验证结果决定是否换更大的网络。输入尺寸也不必固定照搬640×640。比较稳妥的是等比例缩放并补边,同时保存缩放比例和补边偏移。直接拉伸成长宽相同的图片,可能把方块字压扁,给识别阶段增加额外负担。

DBNet训练标签常涉及多边形收缩,用于分开相邻文字。收缩比例是标签生成算法中的参数,不能简单理解为“每条边向内移动百分之多少”。它通常结合面积、周长和偏移计算确定收缩距离。对细笔画、小字号样本,应检查收缩后区域是否消失,并明确异常多边形的处理规则。

训练可以从较小学习率、适量预热和常规优化器起步,再根据损失与验证集表现调整。文字像素通常少于背景像素,在线困难样本挖掘有助于控制背景样本的影响。若继续添加类别权重,要观察是否导致误检增多,不能把某组权重当作适用于所有数据的固定答案。

推理时,概率图经过阈值处理、轮廓提取、区域评分和适当扩张,才能形成最终文字框。旋转框可通过透视变换裁成较规整的图像。遇到粘连,不要立刻对所有结果做腐蚀:细笔画可能一起被破坏。应先检查标签粒度、分辨率和阈值,再决定是否加入局部形态学处理。

四、识别与匹配配合好,才能得到可靠点击位置

CRNN把卷积特征转成序列,再通过循环网络建模,最后使用CTC完成序列对齐。它不要求逐个标出字符在裁图中的横向位置,比较适合短文本识别。对于纯单字任务,也可以直接使用图像分类网络,结构更简单,输出含义也更容易解释。

识别输入应尽量保持字形比例。常见做法是固定高度、按比例调整宽度,再补齐到指定尺寸。训练时加入适量旋转、模糊、颜色变化和裁剪边界扰动,可以让模型适应检测框的不完美。不过增强不能把决定字义的笔画剪掉,否则模型会被迫学习含糊甚至错误的对应关系。

CTC解码有两个基本动作:合并相邻重复标签,移除blank。顺序处理要正确,否则像连续重复字符这样的情况容易出错。贪心解码实现简单,适合先建立基线;复杂解码是否值得加入,应看验证集收益和延迟。验证码内容未必构成常见词语,过强的语言先验反而可能改错结果。

匹配阶段需要同时看识别内容、置信度和空间位置。若提示含有重复汉字,不能用一个“字符到坐标”的字典覆盖所有候选,应为每个字符保留候选列表,再进行不重复分配。对于模糊结果,可以结合多个候选概率计算匹配代价,但证据不足时应返回失败状态,避免勉强输出一串坐标。

坐标还原要特别小心。模型看到的是缩放并补边后的图片,界面展示的又可能是另一种尺寸。必须先减去补边偏移,再除以缩放比例,随后结合显示区域的位置与尺寸转换。点击点通常可取文字框中心;若区域形状不规则,则应确认点落在有效目标内部。

排查问题时,把原图、检测框、裁图、识别文本和最终顺序放在同一份可视化结果里。这样能快速分清是漏检、裁剪不完整、字符混淆,还是坐标变换出了问题。一次只调整一个主要因素,并保留失败样本,通常比反复更换模型更容易找到真正原因。

五、从实验到接口,衡量整题成功率与维护成本

单看识别准确率,很容易低估实际难度。假设一道题需要连续完成多个目标,任意一个字漏检、认错或顺序错误,整题都会失败。因此,评测除了检测精确率、召回率和字符准确率,还应记录整题正确率、坐标有效率以及失败类型,并按字体、背景和目标数量分组观察。

部署前可以导出ONNX,在目标推理环境中做一致性验证。需要核对的不只是模型能否加载,还包括输入布局、动态宽度、算子支持、归一化参数和字典版本。用同一批图片比较PyTorch与ONNX输出,再确认差异是否影响最终字符和坐标。批量识别裁图往往能减少重复调用开销。

接口设计应保留明确状态:识别成功、未找到目标、低置信度、输入异常分别返回。请求还要设置超时,并限制重试次数。日志可以记录耗时、模型版本和失败原因,但图像与业务标识的保存范围应按实际需求控制。模型更新后沿用固定回归样本,才能发现旧场景是否退化。

对于需要覆盖多种验证形式的企业,自研成本还包括样式变化后的持续维护。www.ttocr.com提供面向易盾、极验等场景的识别与自动化API对接,可咨询滑块、点选、无感、九宫格,以及文字、图标、五子棋、躲避障碍、空间等类型的具体支持情况。按接口规范提交所需数据、解析结果并处理异常,可减少业务侧重复搭建模型流程的工作。

实际选型时,可以准备一批包含常见样式与困难样式的授权测试样本,同时比较自研方案和平台接口的整题表现、响应时间、失败返回与接入成本。把验收条件写清楚,再接入测试环境跑完整流程,才能确认方案是否适合现有业务。