【问题标题】:Recognizing barcodes with AI使用 AI 识别条码
【发布时间】:2013-04-16 03:11:49
【问题描述】:

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

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

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

哪种算法最适合这类问题?任何推荐的 AI 工作的阅读或代码?是的,我想了解正在发生的事情,但我不一定想亲自进行各种编码等。

【问题讨论】:

  • 也许是神经网络?我不知道。也许我只是喜欢神经网络。人工智能告诉我喜欢他们。否则。
  • @fire.eagle:有任何链接或指针给我吗? “神经网络”和“ANN”的网络搜索范围太广了。 :)
  • 我想你已经看过适用于 iPhone 的 RedLaser 应用程序了吗?
  • @ctacke:现在不行,抱歉。我真的只是在我的大学图书馆里通过书籍了解了这个主题,至少还有一周我都无法访问。而且,虽然我知道 NN 背后的理论,但我知道的还不够多,无法提供指点。我已经标记了这个问题;如果你一周后还在找,我去看看能不能从图书馆里找出书名。
  • @Josh:我没见过,但我听说过。这可能很像我想要实现的目标。

标签: c# artificial-intelligence barcode


【解决方案1】:

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

  1. 颜色直方图显示两种不同的颜色大致均匀分布
  2. 执行hough transformation 会发现许多平行线
  3. 线条的粗细有两个不同的维度。

其他的?

有了这个,我会将图像分成几块,并使用这些特征进行分类,然后结合结果来计算该块是否包含条形码。

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

这对你有帮助吗?

【讨论】:

    【解决方案2】:

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

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

    的第一个答案

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

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

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

    【讨论】:

    • HyperNEAT 听起来很有趣
    • 是的,这是一种非常强大的技术。研究非常密集,他们经常提出非常有创意的扩展/应用程序。
    【解决方案3】:

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

    【讨论】:

    • 什么样的“图像处理技术”?我也在这里写代码。我有一张用我的手机拍的照片,我想要一个字符串。据我所知,Matlab 并不完全适用于该公式。
    • Matlab 是一个用于图像处理的 Wonderfool 工具,用于探索和找到适合您需求的解决方案。有大量的过滤器和功能。 Matlab 图像处理库中浓缩了现代计算机视觉的最新技术。找到最佳解决方案后,您可以将其翻译成您选择的编程语言和平台。我无法告诉您解决问题的最佳方法是什么。您必须进行一些实验。
    猜你喜欢
    • 2020-08-25
    • 2023-01-20
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2010-12-31
    • 2020-02-03
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多