代码之家  ›  专栏  ›  技术社区  ›  ctacke

用人工智能识别条形码

  •  5
  • ctacke  · 技术社区  · 15 年前

    作为一个宠物项目/学习经验(不,这不是家庭作业),我正在开发一个从照片中识别条形码的软件。我并不是在寻找一个软件或一个库来实现它,而是把它作为一个学习练习,我正在写博客,并将在Codeplex上发布。

    I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex) UPC版本A/E将很快发布。不过,我有两个方面很担心。首先是在解码条形码是在一个有点模糊或对比度差的图片等第二是在一个更大的图片中找到实际的条形码(现在你必须给我一个条形码的照片)。

    我有种直觉,某种形式的人工智能会在这里帮助我。我以前学过遗传算法,很久以前学过人工智能,所以对我来说并不完全陌生,但我不太确定从哪里开始。

    3 回复  |  直到 13 年前
        1
  •  9
  •   schoetbi    15 年前

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

    1. 颜色直方图显示两种不同的颜色,分布均匀
    2. 做一个 hough transformation
    3. 线条的粗细有两个不同的维度。

    有了这个,我会把图像分割成碎片,并用这些特征进行分类,然后将结果合并,计算出碎片是否包含条形码的可能性。

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

    这对你有帮助吗?

        2
  •  4
  •   Community Mohan Dere    8 年前

    正如mp已经指出的,你不需要任何真正的人工智能技术。请看第12章 Real World Haskell . 它实现了一个几乎完整的条形码识别器。示例代码在Haskell中,但是有大量的解释,因此即使没有Haskell的经验,您也可能理解这些想法和技巧。

    如果你想用人工智能解决它,那么最好的办法可能是使用人工神经网络。对于给定的问题,我建议使用一种叫做HyperNEAT的高级技术。请参阅我的解释(和链接)作为SO问题的第一个答案 Neural Network Size...

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

    • 第一个在大图上找到条形码的人。每像素/像素集一个输出神经元,如果该像素似乎是条形码的一部分,则输出值为置信度。基于这个结果,我将使用一些图像变换将其转换为“标准”格式(x*y矩形)
    • 如果您很难找到条形码的位置,请使用第二个。输入第一个的结果,让它给出两个角的坐标。然而,我不太确定,这将是非常容易发展这一个。
    • 最后一个是标准格式,输出每一行的神经元(或者正方形,如果你使用可能的二维条形码),告诉你给定的区域应该是黑色还是白色。

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

        3
  •  0
  •   mp.    15 年前

    你不需要任何特定的人工智能或软计算技术。您需要应用图像处理技术来提高图像质量或将条形码从较大的图像中分离出来。 你可以用Matlab做原型,学习更多关于图像处理的知识。

    推荐文章