如何从图像中识别车牌/号牌(ANPR)?

时间:2009-06-11 14:18:33

标签: image ocr computer-vision anpr

我有一个网站,允许用户上传汽车图像,我想放置一个隐私过滤器来检测车辆上的登记牌并模糊它们。

模糊不是问题,但有没有图书馆或组件(首选开源)有助于在照片中查找许可证?

注意事项;

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

12 个答案:

答案 0 :(得分:29)

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

查看

答案 1 :(得分:26)

编辑:我为此写了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)  
    
  3. 让输入图像如下。

    enter image description here

    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)  
      
    4. 步骤5之后的结果图像。

      enter image description here

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

        cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
        
      2. 对于每个轮廓,找到minAreaRect()边界。

      3. 根据纵横比,最小和最大面积以及与水平面的角度选择矩形。 (我使用2.2 <=纵横比&lt; = 8,500 <=面积&lt; = 15000,角度&lt; = 45度)
      4. 所有minAreaRect()以橙色显示,满足我们标准的是绿色。

        enter image description here

        1. 此步骤后可能存在误报,过滤它,使用边缘密度。边缘密度定义为矩形中的白色像素数/总像素数。设置边缘密度的阈值。 (我用了0.5)
        2. enter image description here

          1. 模糊检测到的区域。
          2. enter image description here

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

答案 2 :(得分:13)

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

答案 3 :(得分:10)

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

我想要一个系统,我可以在一些帆船上指出一个摄像机,所有这些帆船上都有大量可识别的数字,并让它识别船只,并在它们通过摄像机时发送一条推文。 / p>

答案 4 :(得分:8)

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

答案 5 :(得分:5)

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

http://opos.codeplex.com/

开源并用C#编写

答案 6 :(得分:3)

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

答案 7 :(得分:2)

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

答案 8 :(得分:2)

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

答案 9 :(得分:2)

http://licenseplate.sourceforge.net Python(我还没有测试过)

答案 10 :(得分:-1)

它可能正在查看Character recoqnition软件,因为有许多库执行相同的事情。我正在阅读图像并存储它。 Micrsoft办公室能够读取tiff文件并返回字母数字

答案 11 :(得分:-2)

模糊不是问题,但有没有图书馆或组件(首选开源)有助于在照片中查找许可证?

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