用AI识别条形码

时间:2010-08-17 21:05:16

标签: c# artificial-intelligence barcode

作为一个宠物项目/学习经历(不是这不是家庭作业)我正在研究识别照片条形码的软件。我不是在寻找能够做到这一点的软件或图书馆 - 而是将其用作我正在写博客的学习练习,并将在Codeplex上发布。

I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex)和UPC版本A / E应该很快就会出现。不过,我有两个我很关心的方面。首先是解码图像中有点模糊或对比度差的条形码等。其次是简单地在更大的图片中找到实际的条形码(现在你必须给我一张条形码的照片)。 / p>

我有直觉,某种形式的AI会帮助我。我过去曾用遗传算法玩过一段时间,而且我在人工智能上学了很长时间,所以对我来说并不完全陌生,但我不太清楚从哪里开始。

哪种算法最适合此类问题? AI grunt工作的任何推荐阅读或代码?是的,我想了解发生了什么,但我不一定想要自己编写各种类型的编码等级。

3 个答案:

答案 0 :(得分:8)

我建议搜索条形码所具有的属性。我想到的一些是:

  1. 颜色直方图在均匀分布中显示两种不同的颜色
  2. 执行hough transformation找到许多平行线
  3. 线条的粗细有两个不同的尺寸。
  4. 其他一些?

    有了这个,我会将图像分割成碎片并使用这些特征进行分类,然后将结果合并,以计算一个喜欢的部分,如果该部分包含条形码。

    对于你的第二个问题(模糊图像),我建议计算灰色值的1st order derivative,然后检测此空间中线条的边缘。如果图像模糊,则导数的最大值较低,但应该可以检测到某个模糊因子。

    这对你有帮助吗?

答案 1 :(得分:4)

正如mp已经指出的那样,你不需要任何真正的AI技术。看看Real World Haskell的第12章。它实现了几乎完整的条形码识别器。示例代码在Haskell中,但有很多解释,所以即使没有Haskell经验,您也可以理解这些想法和技巧。

如果你想用AI解决它,那么最好的选择可能是使用人工神经网络。对于给定的问题,我建议使用一种称为HyperNEAT的非常先进的技术。请参阅我的解释(和链接)作为SO问题Neural Network Size...

的第一个答案

我可能会使用两个或三个不同的网络,

  • 第一个在大图上找到条形码的人。每个像素/像素集一个输出神经元,输出值是该像素似乎是条形码的一部分的置信度。根据结果​​,我会使用一些图像转换将其转换为“标准”格式(x * y矩形)
  • 如果您在查找条形码的位置时遇到困难,请使用第二个。输入第一个结果,并要求它给出两个角的坐标。但是,我不太确定发展这个很容易。
  • 最后一个可以使用标准化格式,输出每条线的神经元(或方形,如果使用可能的二维条码),说明给定区域应该被视为黑色还是白色。

也可能有助于对图像进行一些预处理,例如RWH中描述的那些。

答案 2 :(得分:0)

您不需要任何特定的AI或软计算技术。您需要应用图像处理技术来提高图像质量或将条形码与较大的图像隔离。 您可以使用Matlab进行原型设计,并了解有关图像处理的更多信息。