作为一个个人项目/学习体验(这不是家庭作业),我正在开发一款从照片中识别条形码的软件。我不是在寻找可以做到这一点的软件或库 – 相反,我将其用作学习练习,我正在写博客并将在 Codeplex 上发布。
我已编写了可以成功识别 EAN13 条形码的代码(我在 CodePlex 上发布了该代码),UPC 版本 A/E 应该很快也会完成。但我有两个担心的地方。首先是解码图片模糊或对比度差等的条形码。其次是简单地在一个较大的图片中找到实际的条形码(现在你需要给我一张只有条形码的照片)。
我有一种直觉,某种形式的 AI 会在这里帮助我。过去我曾玩过遗传算法,并且很久以前上过一门关于 AI 的课程,所以这对我来说并不完全陌生,但我不太确定从哪里开始。
哪种类型的算法最适合这种类型的问题?有什么推荐的阅读材料或 AI 基础工作的代码?是的,我想了解正在发生的事情,但我不一定想亲自编写排序等代码。
回答:
我建议搜索条形码的属性。我想到的一些是:
- 颜色的直方图显示两种明显不同的颜色,分布大致均匀
- 进行霍夫变换会发现许多平行线
- 线条的粗细具有两个明显的尺寸。
还有其他的吗?
有了这些,我会将图像分成几块,并使用这些特征进行分类,然后将结果组合起来,以计算该块是否包含条形码的可能性。
对于你的第二个问题(模糊图像),我建议计算灰度值的一阶导数,然后在该空间中检测线条的边缘。如果图像模糊,导数的最大值会较低,但应该可以在一定模糊因子内检测到。
这有帮助吗?