我有一个网站,允许用户上传汽车的图像,我想放置一个隐私过滤器来检测车辆上的登记牌并模糊它们.
模糊不是问题,但有一个库或组件(首选开源)有助于在照片中找到许可证吗?
注意事项;
我知道没有什么是完美的,这种类型的图像识别将提供误报和否定.
我感谢我们可以要求用户选择要模糊的区域,我们也会这样做,但问题是关于以编程方式查找数据; 所以诸如"让一个人检查每个图像"之类的答案是没有用的.
这种软件方法在英国被称为"自动车牌识别",但我看不出它作为库的任何实现.
虽然.Net是首选,但任何语言都很棒.
小智.. 29
我编写了一个基于JAVA ANPR的C#版本,但我用OpenCV更改了awt库函数.您可以在http://anprmx.codeplex.com上查看
我编写了一个基于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编写的,我也在寻找ac#library.
我想要一个系统,我可以在一些帆船上指出一个摄像机,所有的帆船上都有大量可识别的数字,并让它识别船只并在它们通过摄像机时发送一条推文.
几个月前我在谷歌上做了一些谷歌搜索.有很多关于这个主题的论文,但我从来没有找到任何具体的开源实现.虽然有很多商业实施,但没有一个带有报价,所以它们可能相当昂贵.
试试这个简单的自动车牌识别系统
http://opos.codeplex.com/
开源并用C#编写