🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
当我在学习 halcon ocr mlp 识别字符时,总能很好的识别到正确的字符,且得分会很高,即使字符有多余部分或者缺失部分 。 我想通过返回的得分,来大致区分 缺失或者多余严重的字符 ,但是不行 。 我认为这个是不正常的现象,各种参数以及参数组合,都试过了,并没有很好的办法解决 。 我想知道有大能做过这样的事情吗,不要让我一条路走到天黑 。 如果OCR功能不能解决这个问题,那还有别的方式吗 ?
其实我并不是要检测打印质量,只是要分出来那些打得太烂的字,他们严格意义上来说,就不应该还被认为是 某个字符 。
我试过区域对比,OCV 等这些,其实都不实际,因为在实际应用中,即使两个OK的字符,由于打光,加工问题,肯定会有不一样的地方 。所以这些给否定了 。
图案匹配的方式也试过,并不理想(至于为什么不理想,有实做过的应该都会知道) 。 也否定掉了
图片最下面一行是用来训练的正常字符,上面的是需要识别的字符,大部分有缺陷或者笔画多余的字符,得分都很很高且识别正确了 ,怎么办啊。
解决方案
如下是上述问题的解决方案,仅供参考:
在使用 HALCON 的 OCR MLP(多层感知器)来识别字符时,遇到高得分的字符即使存在缺陷(如多余部分或缺失部分)也能被正确识别,确实可能会导致难以基于得分来过滤劣质字符。这种问题有可能和 OCR MLP 的训练方式、特征提取机制以及分类算法的容忍性有关。对于你的需求,即识别打印质量较差或结构严重失真的字符,并将它们与正常字符区分开来,可能需要额外的手段来解决。
原因分析
-
OCR MLP 的特性:
HALCON 的 OCR MLP 模型基于神经网络的训练,可以容忍某些字符的轻微变形或部分缺陷。由于你所训练的字符样本可能已经足够“多样化”,模型学到了某些容错特性(即使字符不完全匹配,仍能正确识别),这会导致得分较高。 -
模型泛化能力强:
MLP 模型在处理轻微缺陷和多余部分时,可能表现得较为宽松。因为模型会依据整体特征来匹配字符,而不是依赖每个细节。所以,即使某些笔画多余或缺失,只要其整体形状特征符合模型的“学习模式”,就可能被正确识别并且得分较高。 -
缺乏对严重缺陷的特异性检测:
OCR MLP 的得分更多反映的是字符匹配的“可能性”,而不是对于字符质量的直接衡量。因此,使用得分来区分缺陷严重的字符,可能会遇到瓶颈。
解决方案建议
虽然你提到了一些方法已经尝试过了,但可以考虑以下几个思路来进行优化或补充:
1. 额外的字符完整性检测
OCR MLP 在识别字符之后,可以使用 形态学分析 或 特征提取 的方法来进一步判断字符的完整性。虽然区域对比和 OCV 不适用,但你可以尝试以下方法:
-
字符的边缘特征检测:
使用边缘检测算法(如edges_sub_pix
),检测字符的边缘。如果字符有缺失或多余部分,通常会导致边缘不规则,或者边缘与标准字符模板有较大的差异。这时可以通过分析边缘的连续性、封闭性等特征来判断字符是否缺失。 -
笔画宽度分析:
分析字符的笔画宽度,尤其是对于中文或笔画较多的字符,缺失部分可能会导致笔画宽度不均匀。你可以在识别后,提取字符的连通区域(connection
),然后对这些区域的宽度进行分析。如果某些区域的宽度异常,可以判断为缺陷字符。
2. 训练多个 OCR 模型进行对比
尝试通过不同的 OCR MLP 模型来区分字符质量问题。例如,你可以使用一个严格的 OCR MLP 模型来识别正常的字符,另一个宽松的模型来识别含有缺陷的字符。然后通过两者的对比来判断字符质量。如果宽松模型得分较高而严格模型得分较低,可能意味着字符存在较大缺陷。
3. 深度学习或 SVM 结合特征分类
如果 OCR MLP 无法满足要求,可以考虑使用深度学习或者支持向量机(SVM)来进行二次分类。步骤如下:
-
训练字符缺陷分类模型:使用一组标准字符和一组含有缺陷的字符(包括笔画多余、缺失等),训练一个简单的分类模型。这个模型不需要识别具体字符,而是专注于判断字符是否“质量合格”。
-
图像特征提取:结合
HOG
、SIFT
、SURF
等方法,提取字符的形态学特征,然后输入到 SVM 或深度学习网络中进行分类。相比于 OCR 的字符识别,这种方法可以更好地判断字符形状的完整性和是否存在严重缺陷。
4. 使用卷积神经网络(CNN)进行图像分类
OCR MLP 作为传统机器学习方法,对一些复杂的缺陷问题确实可能没有 CNN 效果好。你可以训练一个轻量级的 CNN 模型,专门用于识别字符缺陷和不合格字符。
- 数据准备:准备一批“正常字符”和“缺陷字符”数据集,利用这些数据集训练 CNN 模型,让它能够自动学习不同类型缺陷的特征。
- 部署方式:先通过 OCR MLP 模型识别字符,再通过 CNN 模型对识别后的字符进行质量评估。
5. 结合 OCR 和图像质量评估
- 在使用 OCR MLP 识别字符的基础上,可以添加图像质量评估算法。通过分析字符的对比度、清晰度、边缘信息等,来辅助判断字符是否缺失或多余。
- HALCON 提供了一些图像质量分析函数,可以尝试使用这些工具来评估图像质量是否达到可接受的标准,再结合 OCR 结果进行二次筛选。
总结
OCR MLP 本身在处理缺陷字符时容错性较强,这导致其得分不能准确反映字符的完整性。为了解决这个问题,可以通过额外的形态学分析、笔画宽度分析、深度学习分类或 CNN 模型来辅助识别和过滤质量较差的字符。这样可以在保证识别准确率的基础上,进一步提升对缺陷字符的检测能力。
希望如上措施及解决方案能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。