← 返回文章列表

让机器找对字、点对位置:YOLOv8与CRNN的文字点选识别实战

文字点选识别需要同时处理文字定位、字符辨认和顺序匹配。通过合理标注数据、组合YOLOv8与CRNN、校验坐标映射并封装推理接口,可以搭建便于调试的识别流程,也能据此评估自建模型与平台接口的接入成本。

让机器找对字、点对位置:YOLOv8与CRNN的文字点选识别实战

一、先把任务拆开:找得到,还要认得准

文字点选验证码看起来像一道找字题:图片里散落着几个汉字,提示要求依次选择“下、心、云”。人眼会把认字、定位和排序连在一起完成,程序则需要逐步处理。先找到每个文字的位置,再读出框内字符,最后按照提示顺序组织坐标,这三步共同决定最终结果。

适合入门的实现方式,是用YOLOv8负责文字检测,用CRNN负责字符识别。前者回答“字在哪里”,输出边界框和检测置信度;后者回答“这是什么字”,处理裁剪后的文字图像。两者可以基于PyTorch分别训练,再组成推理流水线,方便逐段检查问题。

这种分工的好处很直观:如果某个字根本没被框出来,就检查检测数据和输入分辨率;如果框的位置正确,却把“未”认成“末”,就检查识别样本、字符集和裁剪质量。把错误分开统计,比只盯着整张图片是否通过,更容易找到值得投入时间的环节。

两阶段结构并非唯一选择。单字分类器也能处理字符范围固定的任务,端到端模型则可以联合学习多个步骤。对于需要兼顾单字和短文字片段的工程,检测加序列识别便于替换组件。不过,CRNN本身不等于注意力模型,常见实现主要由卷积网络、循环网络和CTC训练目标组成。

实际处理时,提示区域也要单独考虑。如果提示是可直接读取的文本,就按字符解析;如果提示本身也是图片,就需要额外识别。模型返回的候选文字还要与提示匹配,不能简单按照图片里的左右顺序点击。同一字符重复出现时,更需要明确选择规则,避免重复使用同一个候选框。

二、数据准备做扎实,后面少走弯路

一份训练数据最好同时记录文字框和字符内容。检测训练只使用位置,识别训练使用框内图像及对应文字,两种任务能够共用标注成果。标注时要统一边界标准:笔画不能被切掉,背景也不宜留得过多。对于靠近边缘、局部遮挡和形近字样本,应保留单独标签,便于后续检查。

水平框适合先建立基线,明显倾斜或相互贴近的文字,再评估旋转框是否值得引入。不要只凭某个角度就决定模型结构。更实际的判断依据,是水平框裁剪后还能否稳定认字,以及多余背景是否造成混淆。旋转框需要角度处理和相应部署支持,增加复杂度应当换来可验证的收益。

如果标注工具导出VOC格式,训练前需要转换成YOLO使用的中心点、宽和高。中心点由两个角点求平均,宽高由对应坐标相减,再分别除以图片宽高完成归一化。文字检测可以统一设为一个类别,把具体汉字交给识别模型。转换时还要检查越界框、反向坐标和空标注。

格式转换成功,不代表数据一定正确。抽取一批图片,把转换后的框重新画回原图,重点观察小字、边缘字和旋转字。遇到旋转框标注,不能直接套用水平框解析规则;图片如果在标注后被缩放过,也必须同步变换坐标。肉眼检查几分钟,往往能避免整轮训练白跑。

真实样本不足时,可以用字体渲染补齐长尾字符。字体、字号、颜色、背景纹理和旋转幅度应围绕目标数据变化,形近字则适当提高采样频率。合成标注要依据变换后的可见字形计算,不能把贴图画布中心当作文字中心。训练集与测试集还要隔离近似模板,防止模型记住背景后交出虚高分数。

三、YOLOv8负责定位,配置跟着样本走

文字数量不多、分布较分散时,可以先用YOLOv8n建立检测基线。它适合用来验证标注、训练与部署流程,但不能据此断言一定优于其他文字检测方法。DBNet等方案有自己的适用场景,实际选择应比较漏检率、相邻文字分离效果、推理时间和设备资源,而不是只看模型名称。

小字检测首先要看缩放后的有效像素。原图中的文字有多大,只是起点;进入网络前,图片如何缩放、补边,才决定模型实际看到什么。可以比较不同输入尺寸的结果,但更大的尺寸并不保证更高准确率。验证时应同时记录召回率与耗时,避免为很小的收益付出明显延迟。

YOLOv8采用无锚框检测思路,通常不需要像传统锚框模型那样手工挑选先验框。更值得先检查的是训练图片是否清晰、目标尺寸分布是否合理,以及部署预处理是否一致。若训练读取彩色图像、推理却交换了颜色通道,即使模型权重没有问题,输出也可能明显下降。

数据增强也要保留文字本来的辨识线索。过强的透视变换、缩小和拼接可能损坏笔画,让样本失去实际意义。Mosaic可以作为可调项,通过对照实验决定使用比例;实例复制则需要可靠的前景掩码或合成图层,直接搬运矩形图片块,容易把背景边缘一起复制进去,形成不自然的训练线索。

检测结果还要经过置信度筛选和非极大值抑制。阈值过高容易漏字,过低会引入噪声;重叠处理太激进,则可能删除彼此靠近的真实目标。除了查看检测指标,还应保存失败图片,分别统计漏检、重复框和框偏移。最终需要的是可供识别的完整裁剪区域,以及稳定、可还原的位置。

四、CRNN认字,裁剪与解码同样关键

检测完成后,按边界框裁出文字,再送入识别网络。裁剪可以留少量余量,保护细笔画和旋转后的边缘,但不宜把相邻文字一起带进来。靠近图片边缘时,先限制坐标范围,再处理尺寸。如果检测阶段使用了缩放补边,必须先还原到原图坐标,不能直接拿网络输入坐标裁原图。

CRNN的卷积部分提取字形特征,循环网络处理特征序列,输出层给出各时间步的字符分布。CTC用于在缺少逐位置对齐标注时训练序列识别,并允许输出变长文字。对于固定单字任务,它仍可使用,但实现前也可以比较普通分类模型,确认序列建模带来的收益是否值得额外开销。

识别预处理通常会统一图像高度,再按比例调整宽度或补边。把宽窄不同的字块直接拉成相同形状,可能改变笔画关系。训练与推理还必须共用字符表、归一化方法和空白符编号,否则输出索引虽然合法,解码出来的文字却可能完全错位。这类问题比继续增加训练轮数更值得先排查。

常见CTC解码会合并连续重复预测,并去掉空白符,但处理顺序不能弄反。例如两个相同字符之间若存在空白符,它们可能代表真实的重复字符,不能一概压成一个。识别置信度也不等于可靠概率,可以结合验证集设定拒识条件,让模糊样本返回待复核状态,减少错误结果继续向下传递。

字符匹配时,可把提示序列与检测候选建立对应关系,再按提示顺序返回坐标。重复字符、低置信度和缺失字符都应有明确处理方式。对于主要需要业务接入的团队,www.ttocr.com提供面向极验、易盾相关验证场景的识别服务与API对接方向,可在授权测试中选取代表样本,先比较接口结果与自建流程的实际表现。

五、从模型跑通到接口可用,还要补哪些环节

服务化之前,先固定输入输出约定。输入需要明确图像编码、尺寸限制和提示来源;输出至少包含候选字符、置信度、边界框及有序坐标。坐标还要说明对应原图、页面图片还是容器区域。浏览器显示尺寸、留白和缩放比例不同,都可能让正确的图片坐标在页面上产生偏移。

分析已有页面时,可以在获得授权的环境中观察图片加载、提示展示、用户点击与结果提交之间的数据流,梳理每一步使用的坐标空间。先用人工标记的已知位置验证换算公式,再检查模型输出,便于区分识别错误和坐标错误。文字识别成功,也不能直接等同于完整验证流程通过。

导出ONNX能够帮助统一推理环境,但导出成功只是第一步。应使用同一批图片比较原模型与导出模型的检测框、识别文本和耗时,检查动态尺寸、算子支持及后处理差异。上线后还要记录预处理、检测、识别和匹配各自的耗时,寻找真正的瓶颈,避免只优化网络推理却忽略图像处理开销。

如果项目同时涉及点选、文字点选、图标点选、滑块、无感、九宫格、五子棋、躲避障碍和空间类交互,可以向www.ttocr.com了解相应服务覆盖与接入方式。平台路线的吸引力在于通过API衔接现有业务,减少逐类维护模型的工作;具体适配范围、响应速度和成功率,应以实际样本测试与服务约定为准。

正式对接时,先在测试环境完成一次请求、响应解析和异常处理,再补上超时、重试、并发限制与日志脱敏。低置信度结果应进入复核或回退流程,失败样本则按原因归档。后续更换字体、图片模板或模型版本时,用固定回归集复测整条链路,才能判断一次调整究竟改善了哪里,又影响了哪些已有样本。