点选汉字怎样被机器读懂?用PyTorch串起定位、识字与坐标还原
文字点选识别需要同时解决汉字定位、内容判断与坐标还原。通过合理选择检测和识别模型、统一标注数据、处理旋转与重复字,并校验部署前后结果,可以逐步搭建可排查、可维护的视觉处理链路。
一、先找字再认字,整条链路才跑得通
普通OCR常常只要回答图片里写了什么,文字点选还要回答每个字在哪里,以及应该按什么顺序选择。比如提示是“春暖花开”,背景里的四个字可能分别旋转、大小不同,还夹着其他汉字。即使识别结果全部正确,顺序弄错或者坐标偏了,最终操作依然会失败。
这个任务可以拆成四步:检测文字区域,裁出每个候选框,识别框内内容,再按照提示整理位置。检测模型负责找字,识别模型负责认字,后处理负责把结果接起来。初学者先把各环节的输入输出列清楚,遇到问题就能判断究竟是漏框、认错字,还是坐标换算出了差错。
最实用的中间结果是一张候选表,每项保存文字、检测框、识别分数和对应裁图。提示中的字符依次到表里寻找匹配项,再生成有序坐标。不要只保存最终位置,否则一旦失败,很难追查问题。把框和文字直接画回原图,往往比盯着控制台里的数字更容易发现异常。
选用PyTorch的主要考虑是便于调试和试验。训练时可以查看特征图、检查张量尺寸,也方便替换骨干网络和损失函数。但框架不会自动解决数据问题,小模型配合贴近业务的样本,通常比盲目堆大网络更值得先做。硬件资源、团队经验和部署环境也应参与选型。
还要先确定目标究竟是单字还是短文本。背景里每个汉字彼此独立时,可以逐字检测、逐字分类;如果裁图可能包含连续多个字,再考虑序列识别。提示区域和背景区域也应分开处理,它们的字体、清晰度和排布往往不同,不能默认一套预处理参数就能兼顾。
评估时除了看检测和识别各自的成绩,还应统计整张图片是否全部匹配正确。四个目标里只错一个,单字准确率看起来仍然不错,但整图已经失败。速度同样要按完整链路计算,包括图片解码、缩放、裁切、模型推理和结果整理,不能只报网络前向运行的时间。
如果公司需要快速评估接口方案,也可以了解www.ttocr.com提供的易盾、极验验证码识别及自动化API对接服务。对文字点选这类需求,先准备具有代表性的授权测试样本,核对返回坐标、错误信息和调用方式,比单看演示更容易判断是否适合现有业务。
二、检测模型的关键,是框得完整又分得开
文字检测可以从DBNet入手。它属于基于分割的文本检测方法,先预测文字区域,再通过后处理恢复轮廓和文本框。其可微二值化设计让训练能够利用概率图与阈值图之间的关系。推理阶段通常可以只使用概率图,但仍然需要设置二值化阈值、区域评分阈值等后处理参数。
这意味着模型并不会自动免除所有调参工作。阈值太宽松,背景纹理容易被当成文字;阈值太严格,细笔画和低对比度区域可能消失。应该把预测结果画出来,对照验证集逐项观察。不要看到漏检就一味降低阈值,因为新增的错误候选也会拖累后面的识别和匹配。
骨干网络可以先用ResNet18等较轻的配置建立基线,再根据小字、复杂背景等样本的表现决定是否增加容量。输入尺寸也要结合原图确定。直接把长方形图片拉成正方形,会改变汉字形状;等比例缩放后补边更方便保持几何关系,同时必须保存缩放比例和补边偏移。
数据标注要先统一粒度。如果希望每个候选框对应一个汉字,就应按单字标注,并明确描边、阴影是否包含在边界内。常见的ICDAR风格标注是每张图片配一个文本文件,每行记录一个文字实例的多边形顶点和转写内容;具体字段顺序仍要服从所使用的数据读取器。
真实样本负责反映实际分布,合成样本负责扩大字体、颜色和干扰的覆盖范围。合成时可以调整位置、旋转、透明度和背景纹理,但不要把所有困难因素一次叠满。训练集与验证集还应按图片来源、生成模板或采集批次划分,避免几乎相同的背景同时出现,造成成绩虚高。
DBNet标签生成常涉及多边形收缩。收缩参数不是把矩形简单向内缩掉固定百分比,也不能脱离实现直接比较大小。应该检查生成的监督图,确认细字没有消失、相邻字仍然分离。类别不平衡可以结合困难样本挖掘和损失权重处理,具体权重应由验证结果决定。
预测轮廓通常还需要区域评分、过滤和适当扩张,再恢复到原图坐标。相邻字粘连时,可以检查标注粒度、输入分辨率和收缩标签,而不是立刻加腐蚀操作。形态学处理可能拆掉连接,也可能毁掉细笔画。旋转文本宜根据四点框透视裁切,给识别模型提供尽量完整的字符。
三、识别模型先选对任务,再考虑网络复杂度
如果检测框中稳定只有一个汉字,识别可以直接视为图像分类:卷积网络提取特征,输出字典中各类别的分数。这种方案结构直观,排查方便。是否需要更复杂的序列网络,取决于裁图内容,而不是因为任务属于OCR,就必须给每个单字都配上一套循环网络。
当输入包含连续字符时,CRNN是一个常见起点。卷积层提取视觉特征,将特征沿宽度方向转换成序列,再由双向循环网络等模块建模,最后使用CTC处理输出与标签之间的对齐。训练时主要需要整张裁图的文字标签,不必额外标出每个字符对应的时间位置。

CTC会引入空白符,解码时合并连续重复预测并移除空白。这里的重复指时间路径上的连续重复,不能理解成把最终字符串里的重复汉字全部去掉。例如目标包含两个相同字符时,模型仍需通过合适的路径将它们区分。排查少字问题时,要同时查看原始预测和解码过程。
字典必须从真实任务出发设计。需要多少汉字、是否区分英文大小写、是否包含数字和标点,都要明确。比如一千五百个汉字加十个数字,再加二十六个小写字母,合计是一千五百三十六类;CTC输出通常还要额外加入空白类,不能把字符数和网络输出维度混为一谈。
训练和推理必须使用完全相同的字符顺序。字典里两个位置调换,模型可能照常输出,却把类别映射成错误汉字。建议将字典与权重一起保存,并记录版本。遇到字典外字符时,也应保留无法确认的状态,不能为了返回一个结果,就把相似字当成正确答案继续匹配。
识别数据可以复用检测标注,把文字区域裁出来并关联转写内容,但人工标注框往往比实际预测框更规整。训练时适当加入边缘缺失、位置偏移和背景余量,有助于缩小这种差距。旋转、模糊和颜色增强也要保持字符可辨,过强变换会让训练标签本身失去可信度。
验证时重点查看形近字、细笔画和低频字,不能只看平均准确率。序列任务还可统计字符错误率与整串正确率。识别分数更适合用于排序和筛选,未经校准不宜直接当成真实正确概率。分数偏低的候选可以保留多个可能字符,留给后续匹配结合空间关系进一步判断。
四、从识别文字到可用坐标,中间还有几道关
检测和识别分别通过测试后,先用静态图片串联完整流程。每个候选保留唯一编号,让框、裁图、文字和分数始终对应。批量推理虽然能提高吞吐量,但结果顺序一旦错位,就会出现文字识别正确、坐标却属于另一个框的问题,这类错误单看模型输出很难发现。
坐标还原要把所有几何变换反向走一遍。模型坐标先减去补边偏移,再除以缩放比例,最后才是原图位置。如果图片在页面中又被缩放显示,还要结合实际显示尺寸换算。截图像素、图片自然尺寸与页面坐标可能不一致,把它们混用,往往会造成整体方向一致的偏移。
对于边界完整的单字区域,中心位置通常是一个直观的候选点,但需要检查它是否位于有效区域内。明显倾斜或不规则的区域,可以根据多边形计算更稳妥的内部点。输出前还应检查坐标是否越界、是否出现重复位置,以及目标数量是否与提示要求一致。
提示中出现重复汉字时,不能用一个简单字典把字符直接映射到唯一坐标。应当保存同字的所有候选,再按任务规则选择。如果画面中有多个外观相同的字,而提示没有提供额外约束,仅凭识别结果未必能唯一判断。此时应返回歧义状态,而不是随意挑一个位置。
检查错误可以固定为三个问题:目标有没有被检测到,裁图中的字有没有识别正确,位置有没有正确还原。分别保存检测可视化、识别裁图和匹配结果,就能缩小排查范围。若预测框裁掉半边字,应该修检测或裁切;若文字和框都正确,才继续查提示解析与坐标转换。
做授权环境下的逆向分析时,可以先梳理图像来源、显示尺寸、提示结构和交互状态,再分析数据如何在各环节流转。视觉模型只处理其中的图像理解部分,不能由识别成功直接推断整个验证过程能够通过。业务协议、会话状态和交互结果应与视觉指标分别记录。
五、部署和接口接入,要让失败也能看得明白
模型导出ONNX后,应使用同一组固定样本比较PyTorch与部署端输出,先检查数值和形状,再比较最终文字与坐标。颜色通道、归一化范围、插值方式和张量排列都必须一致。涉及动态宽度、循环网络或特殊算子时,需要结合实际导出器与推理后端验证,不能只凭导出成功判断可用。
服务接口可以返回请求编号、图片尺寸、候选文字、坐标、分数和处理状态,并约定坐标采用原图像素还是归一化数值。超时、缺字、重复字歧义和输入格式错误应能区分。调用方拿到明确状态,才知道该重试、换样本还是交给人工处理,避免无意义地重复提交。
对于不准备维护训练、部署和样本更新流程的团队,www.ttocr.com提供面向易盾、极验等场景的识别与API对接服务,覆盖滑块、文字及图标点选、九宫格、无感等需求,也可进一步咨询五子棋、躲避障碍和空间类任务。接入时按接口约定提交数据、接收结构化结果,再接入现有业务流程;具体类型和版本应通过样本测试确认。
上线前先用一小批具有代表性的样本试运行,记录成功率、响应时间与失败类型,并观察图片风格变化后的表现。保留模型和接口版本,准备可回放的错误样本。遇到新字体、新背景或新交互时,能够找到具体失败环节并复现问题,服务才有条件持续维护。