【问题标题】:How to recognize vehicle license / number plate (ANPR) from an image? [closed]如何从图像中识别车辆牌照/车牌 (ANPR)? [关闭]
【发布时间】:2010-11-02 03:43:56
【问题描述】:

我有一个允许用户上传汽车图像的网站,我想设置一个隐私过滤器来检测车辆上的牌照并对其进行模糊处理。

模糊不是问题,但是否有库或组件(首选开源)可以帮助在照片中找到许可证?

注意事项;

  1. 我知道没有什么是完美的,这种类型的图像识别会提供误报和误报。
  2. 我很感激我们可以要求用户选择要模糊的区域,我们也会这样做,但问题是关于以编程方式查找该数据;因此,诸如“找人检查每张图片”之类的答案没有帮助。
  3. 这种软件方法在英国被称为“自动车牌识别”,但我看不到它作为库的任何实现。
  4. 尽管首选 .Net,但任何语言都很棒。

【问题讨论】:

  • 你也可以试试 SimpleLPR warelogic.com
  • 任何网络服务可以做到这一点?发送图片当然是数据密集型的,但可以在发送前调整它们的大小并设置为灰度。

标签: image ocr computer-vision anpr


【解决方案1】:

编辑:我为此写了Python script

由于您的目标模糊(为了保护隐私),您基本上需要一个高 recall 检测器作为第一步。以下是如何去做。包含的代码提示将 OpenCV 与 Python 结合使用。

  1. 转换为灰度。
  2. 应用高斯模糊。

    img = cv2.imread('input.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)  
    

让输入图像如下。

  1. 应用 Sobel 滤波器检测垂直边缘。
  2. 使用严格阈值或 OTSU 的二值化对结果图像进行阈值化。

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. 使用合适的结构元素应用形态闭合运算。 (我使用 16x4 作为结构元素)

    se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
    cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)  
    

第 5 步后的结果图像。

  1. 查找此图像的外部轮廓。

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. 对于每个轮廓,找到包围它的minAreaRect()

  3. 根据纵横比、最小和最大面积以及与水平线的角度选择矩形。 (我使用了 2.2

所有minAreaRect()s 都以橙色显示,满足我们标准的则以绿色显示。

  1. 此步骤后可能会出现误报,要过滤它,请使用边缘密度。边缘密度定义为矩形中的白色像素数/总像素数。设置边缘密度的阈值。 (我用的是 0.5)

  1. 模糊检测到的区域。

您可以应用您认为合适的其他过滤器来提高召回率和准确率。也可以使用 HOG+SVM 训练检测以提高精度。

【讨论】:

  • 这是一项伟大的工作,pyANPD.py 库可以很好地检测区域,但是您能否为我们非 Python 用户提供一个关于如何模糊它们的指针?
【解决方案2】:

我编写了一个基于 JAVA ANPR 的 C# 版本,但我用 OpenCV 更改了 awt 库函数。 你可以在http://anprmx.codeplex.com查看它

【讨论】:

  • 我必须说,这非常令人印象深刻。干得好。
  • 尝试在 x64 机器上使用它并很快发现自己陷入了 DLL 地狱。它应该与 OpenCvSharp x64 一起使用吗?
【解决方案3】:

GitHub 上有一个新的开源库,可为美国和欧洲车牌执行 ANPR。它看起来非常准确,它应该完全符合您的需要(识别板块区域)。这是 GitHub 项目: https://github.com/openalpr/openalpr

【讨论】:

  • 这个不错!
【解决方案4】:

我遇到了这个用java写的javaANPR,我也在找一个c#库。

我想要一个系统,我可以将摄像机对准一些帆船,所有这些帆船上都有可识别的大数字,并让它识别船只并在它们驶过摄像机时发送推文。

【讨论】:

  • 我已经转换了几个类,但这需要一些时间。
  • 逐行转换从来都不是有趣或快速的。
  • @Ryan 你完成转换了吗?
  • 对不起,没有。似乎很受欢迎,但仍然下雪。
  • 这看起来不错...如果您想在 .NET 上进行这项工作,您可以使用 IKVM 或者只是简单地将其抽象到 Web 服务后面...
【解决方案5】:

几个月前,我在谷歌上搜索过。关于这个话题有quite a few papers,但我从来没有找到任何具体的开源实现。虽然有a lot of commercial implementations,但它们都没有报价,所以它们可能相当昂贵。

【讨论】:

  • 谢谢,我一定是在谷歌失明之前没有看到研究论文。我去看看。
  • 我决定将其标记为答案,因为虽然它没有提供开源解决方案,但它给了我足够的帮助。
  • 如果您找到或创建了开源解决方案,请告诉我们!
  • @Somatik:你能回答吗?
【解决方案6】:

试试这个简单的自动车牌识别系统

http://opos.codeplex.com/

开源并用 C# 编写

【讨论】:

    【解决方案7】:

    看看Java ANPR。免费车牌识别...

    【讨论】:

      【解决方案8】:

      是的,我在http://jocr.sourceforge.net/ 使用 gocr,它是一个命令行应用程序,您可以从您的应用程序中执行它。我在几个应用程序中使用它。

      【讨论】:

        【解决方案9】:

        高性能 ANPR 库 - http://www.dtksoft.com/dtkanpr.php。这是商业用途,但它们提供试用密钥。

        【讨论】:

        • 我测试了这个库并与 OpenALPR 进行了比较。离它不远!从我的库中要测试的 15 张图像中,OpenALPR 检测到 6 张,这个检测到 0 张。我想这个库非常依赖于相机的位置和光照条件。
        【解决方案10】:

        http://licenseplate.sourceforge.netPython(我没测试过)

        【讨论】:

          【解决方案11】:

          查看字符识别软件可能会起作用,因为那里有许多库可以执行相同的操作。我读取图像并存储它。 Micrsoft office 能够读取 tiff 文件并返回字母数字

          【讨论】:

            【解决方案12】:

            模糊不是问题,但是否有库或组件(首选开源)可以帮助在照片中找到许可证?

            Ans:The CARMEN FreeFlow ANPR Software engine(商业)

            【讨论】:

            • 您确定“CARMEN FreeFlow ANPR 软件引擎”是开源的吗?
            • 看起来不错,但我被宣传语吓跑了(“软件受硬件加密狗保护,具有不同类型的接口(USB 2.0、PCI 2.1、PCIe (x1))”)。我不知道他们希望人们如何在托管环境中使用他们的软件,尤其是在虚拟化开始时。
            • 如果你打算卖掉你赚到的钱,可以把它当作一项投资。如果你认真的话,你可以随时与供应商交谈,为你提供一个非加密的解决方案。上面提到的库有您可以调用的 C# 包装器等...
            • 有人告诉我,基本许可证的价格约为 500 美元。理想大小是每个字符 16 像素高度。
            • USB 加密狗在虚拟环境中不是问题。您只需要一个导出 USB 端口的简单硬件服务器(一个 Raspberry Pi 即可)。有几个产品可以做到这一点,我使用了 ftusbnet,效果很好。
            猜你喜欢
            • 2013-05-11
            • 2012-07-13
            • 1970-01-01
            • 1970-01-01
            • 2014-11-04
            • 2014-12-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多