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

发布于 2024-07-24 22:43:08 字数 1436 浏览 8 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

凶凌 2024-07-31 22:43:09

编辑:我为此编写了一个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)   
      

让输入图像如下。

在此处输入图像描述

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

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

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

第 5 步后的结果图像。

在此处输入图像描述

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

    cv2.findContours(图像,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)  
      
  2. 对于每个轮廓,找到其边界的 minAreaRect()

  3. 根据长宽比、最小和最大面积以及与水平方向的角度选择矩形。 (我使用 2.2 <= 纵横比 <= 8、500 <= 面积 <=15000,角度 <= 45 度)

所有 minAreaRect() 均以橙色显示,并且满足我们标准的颜色为绿色。

在此处输入图像描述

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

输入图像描述此处

  1. 模糊检测到的区域。

在此处输入图像描述

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

EDIT: I wrote a Python script for this.

As your objective is blurring (for privacy protection), you basically need a high recall detector as a first step. Here's how to go about doing this. The included code hints use OpenCV with Python.

  1. Convert to Grayscale.
  2. Apply Gaussian Blur.

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

Let the input image be the following.

enter image description here

  1. Apply Sobel Filter to detect vertical edges.
  2. Threshold the resultant image using strict threshold or OTSU's binarization.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Apply a Morphological Closing operation using suitable structuring element. (I used 16x4 as structuring element)

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

Resultant Image after Step 5.

enter image description here

  1. Find external contours of this image.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. For each contour, find the minAreaRect() bounding it.

  3. Select rectangles based on aspect ratio, minimum and maximum area, and angle with the horizontal. (I used 2.2 <= Aspect Ratio <= 8, 500 <= Area <=15000, and angle <= 45 degrees)

All minAreaRect()s are shown in orange and the one which satisfies our criteria is in green.

enter image description here

  1. There may be false positives after this step, to filter it, use edge density. Edge Density is defined as the number of white pixels/total number of pixels in a rectangle. Set a threshold for edge density. (I used 0.5)

enter image description here

  1. Blur the detected regions.

enter image description here

You can apply other filters you deem suitable to increase recall and precision. The detection can also be trained using HOG+SVM to increase precision.

深空失忆 2024-07-31 22:43:09

我基于JAVA ANPR编写了C#版本,但我用OpenCV更改了awt库函数。
您可以在 https://github.com/jivanro/ANPRMX_SourceCode 查看

I coded a C# version based on JAVA ANPR, but I changed the awt library functions with OpenCV.
You can check it at https://github.com/jivanro/ANPRMX_SourceCode

长不大的小祸害 2024-07-31 22:43:09

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

There is a new, open source library on GitHub that does ANPR for US and European plates. It looks pretty accurate and it should do exactly what you need (recognize the plate regions). Here is the GitHub project:
https://github.com/openalpr/openalpr

我的鱼塘能养鲲 2024-07-31 22:43:09

我遇到了这个用 java javaANPR 编写的,我也在寻找 ac# 库。

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

I came across this one that is written in java javaANPR, I am looking for a c# library as well.

I would like a system where I can point a video camera at some sailing boats, all of which have large, identifiable numbers on them, and have it identify the boats and send a tweet when they sail past a video camera.

抹茶夏天i‖ 2024-07-31 22:43:09

几个月前我已经对此进行了一些谷歌搜索。 关于此主题有相当多的论文,但是我从未找到任何具体的开源实现。 有许多商业实现 不过,但它们都没有报价,所以它们可能相当昂贵。

I have done some googling about this a couple of months ago. There are quite a few papers about this topic, but I never found any concrete open-source implementation. There are a lot of commercial implementations though, but none of them with a price quote, so they're probably pretty expensive.

心凉怎暖 2024-07-31 22:43:09

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

http://opos.codeplex.com/

开源并用 C# 编写

try this Simple Automatic Number Plate Recognition System

http://opos.codeplex.com/

Open source and written with C#

萌逼全场 2024-07-31 22:43:09

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

Have a look at Java ANPR. Free license plate recognition...

寂寞笑我太脆弱 2024-07-31 22:43:09

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

Yes I use gocr at http://jocr.sourceforge.net/ its a commandline application which you could execute from your application. I use it in a couple of my applications.

终止放荡 2024-07-31 22:43:09

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

High performance ANPR Library - http://www.dtksoft.com/dtkanpr.php. This is commercial, but they provide trial key.

北斗星光 2024-07-31 22:43:09

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

http://licenseplate.sourceforge.net Python (I have not tested it)

倾其所爱 2024-07-31 22:43:09

看看字符识别软件也许可行,因为有很多库可以执行相同的操作。 我读取图像并存储它。 Microsoft Office 能够读取 tiff 文件并返回字母数字

It maybe work looking at Character recoqnition software as there are many libraries out there that perform the same thing. I reading an image and storing it. Micrsoft office is able to read tiff files and return alphanumerics

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文