写这边文章之前查询过大量资料,发现.Net在这方面的资料太少了.决定写出来好让大家交流一下.
之前参考过这边文章,但是觉得识别率不高,并且速度太慢了,我们公司要求是在300ms以内识别出来的,准确度必须要在98%以上...所以他的就不太合适了.只能自己重新做过.
参考了:
基于百度paddle的快递面单三段码识别_全栈攻城狮s的博客-CSDN博客
我需要处理的是直线上拍到的照片以及环线(这个拍到的照片质量比较差),所以此教程以直线拍到的照片为主.
第一步:先用paddle进行快递单检测(当然这里的模型需要自己训练).
//初始化PaddleOcr
public static PaddleOcrAll alls = new PaddleOcrAll(model, ocrAction)
{
AllowRotateDetection = true, /* 允许识别有角度的文字 */
Enable180Classification = true, /* 允许识别旋转角度大于90度的文字 */
};
第二步:根据识别到的坐标将快递单裁剪下来,这里为什么要裁剪下来呢.是为了在后面文字识别的时候能提升速度,增加识别率.
第三步:在裁剪下来之后的快递单上再用paddleDetection检测三段码.这里的模型当然也是需要自己的训练.得到三段码后.我们就需要做:文本倾斜矫正
这里有很多方法,比如
霍夫倾斜矫正等方法,具体要看自己要处理的图片是怎样子的.
参考文章:https://blog.csdn.net/stq054188/article/details/129440927
最后一步.就是使用OCR识别被我们矫正过的文字内容.这一步就比较简单.
最后识别到的结果一般为:
X-XX-XXX XX
到了这一步,我们还要确保识别结果的准确性.所以我们还需要再对识别的结果进行规则的判断,如果判断失败,我们需要回到第三步进行重新检测.
我部署的是Web模式的,除去不完整的快递单外,识别率大概是在98%左右,识别速度在250ms左右.
题外话:
虽然经常上述操作能识别到,但是准确率有点低,因为识别的物体角度有很多不一样的,并且摄像头拍到的快递单有时候会缺一块,所以这里就需要另外一种技术去拟补剩下未识别到的.下编文章再讲.
欢迎大家一起交流: