如何从图像中识别车辆牌照/车牌(ANPR)? [已关闭]

问题描述 投票:0回答:11

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

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

注意事项;

  1. 我知道没有什么是完美的,这种类型的图像识别会提供误报和漏报。
  2. 我很高兴我们可以要求用户选择要模糊的区域,我们也会这样做,但问题具体是关于以编程方式查找该数据;所以诸如“让人检查每张图像”之类的答案没有帮助。
  3. 这种软件方法在英国被称为“自动车牌识别”,但我看不到它作为库的任何实现。
  4. 任何语言都可以,但 .Net 是首选。
image ocr computer-vision automatic-license-plate-recognition
11个回答
36
投票

编辑:我为此编写了一个Python脚本

由于您的目标模糊(为了隐私保护),您基本上需要一个高“召回率”检测器作为第一步。以下是如何进行此操作。包含的代码提示使用 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. 让输入图像如下。

应用 Sobel 滤波器来检测垂直边缘。
  1. 使用严格阈值或 OTSU 的二值化对结果图像进行阈值处理。
  2. cv2.Sobel(image, -1, 1, 0) cv2.threshold()

  3. 使用合适的结构元素应用形态闭运算。 (我使用 16x4 作为结构元素)
  4. se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4)) cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)

    
    
    
  5. 第 5 步后的结果图像。

    找到该图像的外部轮廓。
  1. cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

  2. 对于每个轮廓,找到其边界的
  3. minAreaRect()

    
    

    根据长宽比、最小和最大面积以及与水平方向的角度选择矩形。 (我用的是2.2
  4. <= Aspect Ratio <= 8, 500 <= Area <=15000, and angle <= 45 degrees)
  5. 所有
minAreaRect()

均显示为橙色,满足我们标准的为绿色。


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

模糊检测到的区域。

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


34
投票
https://github.com/jivanro/ANPRMX_SourceCode

查看


14
投票
https://github.com/openalpr/openalpr


10
投票
javaANPR

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


8
投票
相当多的论文

,但我从未找到任何具体的开源实现。虽然有很多商业实现,但没有一个有报价,所以它们可能相当昂贵。


5
投票

http://opos.codeplex.com/

开源并用C#编写


3
投票
Java ANPR

。免费车牌识别...


2
投票
http://jocr.sourceforge.net/

使用 gocr,它是一个命令行应用程序,您可以从您的应用程序执行它。我在几个应用程序中使用它。


2
投票
http://www.dtksoft.com/dtkanpr.php

。这是商业性的,但他们提供试用密钥。


2
投票
http://licenseplate.sourceforge.net

Python(我没有测试过)


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.