C# 用人工智能识别条码

C# 用人工智能识别条码,c#,artificial-intelligence,barcode,C#,Artificial Intelligence,Barcode,作为一个宠物项目/学习经历(不,这不是家庭作业),我正在开发从照片中识别条形码的软件。我不是在寻找一个软件或一个库来实现它——相反,我把它作为一个学习练习来使用,我正在写博客,并将在Codeplex上发布 UPC版本A/E将很快发布。不过,我有两个方面需要关注。首先是解码模糊或对比度差的图片中的条形码,等等。第二是在更大的图片中查找实际的条形码(现在你必须给我一张条形码的照片) 我有种直觉,某种形式的人工智能将在这里帮助我。我以前玩过一些遗传算法,几年前我上过一门人工智能课程,所以这对我来说并不

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

UPC版本A/E将很快发布。不过,我有两个方面需要关注。首先是解码模糊或对比度差的图片中的条形码,等等。第二是在更大的图片中查找实际的条形码(现在你必须给我一张条形码的照片)

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


什么类型的算法最适合这类问题?对于AI grunt工作,有任何推荐的阅读或代码吗?是的,我想了解发生了什么,但我自己不一定想深入到分类编码等层面。

我建议搜索条形码具有的属性。我心目中的一些是:

  • 颜色直方图显示两种不同的颜色,分布大致均匀
  • 做一个计算可以找到许多平行线
  • 线条的厚度有两个不同的尺寸
  • 其他的

    有了这一点,我会把图像分割成几个部分,并用这些特征进行分类,然后整理结果,计算出一个可能性,如果这个部分包含或不包含条形码

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


    这对你有帮助吗?

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

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

    如果你想用人工智能解决这个问题,那么最好的办法可能是使用人工神经网络。对于给定的问题,我建议使用一种非常先进的技术,称为HyperNEAT。请参阅我的解释(和链接)作为SO问题的第一个答案

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

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

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

    可能是神经网络?我不知道。也许我只是喜欢神经网络。人工智能告诉我要喜欢它们。或者。@fire.eagle:有我的链接或指针吗?“神经网络”和“人工神经网络”的网络搜索太广泛了我想你已经看过iPhone上的RedLaser应用程序了吗?@ctacke:对不起,现在还没有。我真的是从我大学图书馆的书中学到了这个问题,我至少还有一个星期没有机会读到这些书。而且,虽然我知道NNs背后的理论,但我知道的还不够多,无法给出指导。我把这个问题标了出来;如果你一周后还在找,我就去看看能不能从图书馆找到书的书名。@Josh:我没见过,但听说过。这可能很像我想要实现的。什么样的“图像处理技术”?我还在这里写代码。我用手机拍了一张照片,我想要回一根线。据我所知,Matlab在这个公式中并不完全适用。Matlab是一个用于图像处理和探索并找到适合您需要的解决方案的神奇工具。有大量的过滤器和函数。Matlab图像处理库浓缩了现代计算机视觉的最新技术。一旦你找到了最好的解决方案,你就可以用你选择的编程语言和平台来翻译它。我不能告诉你什么是解决你问题的最好方法。你必须做一点实验。超净听起来很有趣是的,这是一种非常强大的技术。研究相当密集,他们经常会提出非常有创意的扩展/应用程序。