如何从图像中识别车辆牌照/车牌(ANPR)?[关闭]
-
13-09-2019 - |
题
我有一个网站,允许用户上传汽车图像,我想放置一个隐私过滤器来检测车辆上的车牌并对其进行模糊处理。
模糊不是问题,但是是否有库或组件(首选开源)可以帮助在照片中查找许可证?
注意事项;
- 我知道没有什么是完美的,这种类型的图像识别会提供误报和漏报。
- 我很高兴我们可以要求用户选择要模糊的区域,我们也会这样做,但问题具体是关于以编程方式查找该数据;因此,诸如“让人检查每张图像”之类的答案没有帮助。
- 这种软件方法在英国被称为“自动车牌识别”,但我看不到它作为库的任何实现。
- 任何语言都可以,但 .Net 是首选。
解决方案
我基于JAVA ANPR编写了C#版本,但我用OpenCV更改了awt库函数。您可以在以下位置查看: http://anprmx.codeplex.com
其他提示
编辑:我写了一个 Python脚本 为了这。
由于您的目标模糊(为了保护隐私),您基本上需要一个高 记起 检测器作为第一步。以下是如何进行此操作。包含的代码提示使用 OpenCV 和 Python。
- 转换为灰度。
应用高斯模糊。
img = cv2.imread('input.jpg',1) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)
让输入图像如下。
- 应用 Sobel 滤波器来检测垂直边缘。
使用严格阈值或 OTSU 的二值化对结果图像进行阈值处理。
cv2.Sobel(image, -1, 1, 0) cv2.threshold()
使用合适的结构元素应用形态闭运算。(我使用 16x4 作为结构元素)
se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4)) cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)
步骤 5 后的结果图像。
找到该图像的外部轮廓。
cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
对于每个轮廓,找到
minAreaRect()
限制它。- 根据长宽比、最小和最大面积以及与水平方向的角度选择矩形。(我使用 2.2 <= 纵横比 <= 8、500 <= 面积 <= 15000、角度 <= 45 度)
全部 minAreaRect()
s 以橙色显示,满足我们标准的以绿色显示。
- 此步骤之后可能会有误报,要过滤它,请使用边缘密度。边缘密度定义为 白色像素数/总像素数 在一个矩形中。设置边缘密度阈值。(我用的是0.5)
- 模糊检测到的区域。
您可以应用您认为合适的其他过滤器来提高召回率和精确度。还可以使用 HOG+SVM 来训练检测以提高精度。
GitHub 上有一个新的开源库,可以对美国和欧洲车牌进行 ANPR。它看起来非常准确,并且应该完全满足您的需要(识别板区域)。这是 GitHub 项目:https://github.com/openalpr/openalpr
我发现这个是用java写的 javaANPR, ,我也在寻找一个 C# 库。
我想要一个系统,我可以将摄像机对准一些帆船,所有帆船上都有大的、可识别的数字,并让它识别船只并在它们驶过摄像机时发送推文。
看一下 Java ANPR. 。免费车牌识别...
是的,我使用 gocr http://jocr.sourceforge.net/ 它是一个命令行应用程序,您可以从您的应用程序执行它。我在几个应用程序中使用它。
高性能 ANPR 库 - http://www.dtksoft.com/dtkanpr.php. 。这是商业性的,但他们提供试用密钥。
http://licenseplate.sourceforge.net Python(我没有测试过)
看看字符识别软件也许可行,因为有很多库可以执行相同的操作。我读取图像并存储它。Microsoft Office 能够读取 tiff 文件并返回字母数字
模糊不是问题,但是是否有库或组件(首选开源)可以帮助在照片中查找许可证?
答: CARMEN FreeFlow ANPR 软件引擎 (商业)