Kyl*_*yle 16 python opencv machine-learning image-processing barcode-scanner
我正在寻找一种对主要由文本组成的扫描页面进行分类的方法.
这是我的问题的细节.我有大量扫描文档,需要检测这些文档中是否存在某些类型的页面.我计划将文档"破解"到它们的组件页面(每个页面都是一个单独的图像),并将这些图像中的每一个分类为"A"或"B".但我无法弄清楚这样做的最佳方法.
更多细节:
编辑:
我将回答3个部分,因为你的问题显然很大,如果页面集合不超过1000,我强烈推荐手工方法和廉价劳动力.
第1部分: 特征提取 - 您可以在对象检测字段中选择非常多的要素.由于您的一个要求是旋转不变性,我建议使用SIFT/SURF类功能.您可能还会发现哈里斯角等适合.决定使用哪些功能可能需要专业知识,如果你有计算能力,我会建议创建一个很好的大量功能,并通过基于分类器训练的重要性估算器.
第2部分: 分类器选择 - 我是随机森林分类器的忠实粉丝.该概念非常易于掌握,并且具有高度灵活性和非参数性.调整只需要很少的参数,您也可以在监督培训期间以参数选择模式运行它.
第3部分: 实现 - Python本质上是一种粘合语言.用于图像处理的纯python实现永远不会非常快.我建议结合使用OpenCV进行特征检测,将R用于统计工作和分类器.
解决方案可能看起来过于设计,但机器学习从来都不是一项简单的任务,即使页面之间的差异仅仅是它们是书籍的左手页面和右手页面.
首先,我想说,在我看来,OpenCV 是进行此类操作的一个非常好的工具。此外,它还有一个在这里详细描述的 python 接口。
OpenCV 是高度优化的,你的问题并不容易。
[全球编辑:重组我的想法]
以下是一些可以使用的功能的想法:
为了检测条形码,如果条形码是孤立的,您应该尝试进行距离变换(OpenCV 中的 DistTransform)。也许您可以通过匹配或匹配形状轻松找到兴趣点。我认为这是可行的,因为条形码应该具有相同的形状(大小等)。兴趣点的得分可以用作特征。
图像的矩在这里可能很有用,因为你有不同类型的全局结构。这可能足以区分 A 和 B 页面(请参阅此处的 openCV 函数)(顺便说一下,您将获得不变的描述符:))
你也许应该尝试计算vertical gradient
和horizontal gradient
。条形码是vertical gradient
==0 和horizontal gradient
!=0 的特定位置。这个主要优点是这些操作的成本较低,因为您的目标只是检查页面上是否存在这样的区域。您可以找到兴趣区域并使用其分数作为特征
一旦你有了自己的特征,你就可以尝试进行supervised learning
泛化并进行测试。你的问题需要很少false negative
(因为你要扔掉一些页面),所以你应该用 ROC 曲线评估你的性能,并仔细查看灵敏度(应该很高)。对于分类,您可以使用带有套索惩罚的回归来找到最佳特征。Whatnick 的帖子还给出了好的想法和其他描述符(也许更笼统)。
归档时间: |
|
查看次数: |
7126 次 |
最近记录: |