57行价值八千万美元的车牌识别代码
维多利亚警察局是澳大利亚维多利亚州的主要执法机构。在过去一年里,维多利亚州共有超过1.6万辆车被盗,价值约为1.7亿美元。目前警方正在试验各种技术方案,以打击汽车盗窃行为。
为了防止被窃车辆进入黑市销售,警方使用了一个名为VicRoads的基于网络的服务,该服务用于检查车辆的登记状态。该警局还投资研发了一个固定式汽车牌照扫描器:一个固定的三脚架摄像头,可扫描过往的车辆,并自动识别被窃车辆。
不要问我为什么,但有一天下午,我突然想设计一个车载式汽车牌照扫描器,如果车辆被盗或未登记,它会自动通知你。同时,我还想了解要组成这样一个扫描器需要哪些独立的组件,将这些组件结合在一起有多困难。
但是,经过一番谷歌搜索之后,我发现维多利亚警察局最近已经在试用类似的装置,推广使用的话估计费用在8600万美元左右。一位敏锐的评论员指出,配置220辆车的总成本是8600万美元,相当于每辆车390,909美元。
当然,我们可以做得比这更好。
现有的固定式汽车牌照识别系统
成功的标准
在开始之前,我将简要介绍一下产品设计的几个关键要求。
图像处理必须在本地执行
将视频流传送到中央处理仓库进行处理似乎是解决这个问题最低效的方法。因为除了巨额的数据流量账单以外,你还会将网络延迟引入到这个可能已经相当缓慢的过程当中。
虽然集中式机器学习算法会随着时间的推移而变得越来越准确,但我还是想看一下本地的设备实现是否“足够好”。
必须支持低质量的图像
由于我没有树莓派相机或USB摄像头,所以我将使用dashcam镜头。它是现成的,而且是样本数据的理想来源。有一个额外的好处,dashcam视频质量代表了你对车载摄像机预期的整体质量。
需要使用开源技术构建
依靠专有软件意味着每次你要求修改或改进时,都会感到麻烦。而使用开源技术则不需要担心这个。
解决方案
从整体上来说,我的解决方案是从Dashcam视频中获取图像,通过安装在本地设备上的开源车牌识别系统将数据发送出去,查询注册检查服务,然后接收返回的结果并显示出来。
返回到执法车辆的数据包括:车辆的样式和型号(验证车牌是否被盗)、登记状态,以及如果车辆被盗时的通知。
如果这听起来很简单的话,那是因为它真的很简单。例如,图像处理可以由openalpr库来处理。这就是识别车牌字符的全部内容:
openalpr.IdentifyLicense(imagePath, function (error, output) {// handle result
});
小小的附加说明
VicRoads API不支持公开访问,因此车牌检查是通过网络抓取来实现的。
这就是我的概念证明示例:
// Open form and submit enquire for `rego`
function getInfo(rego) {horseman.userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0').open(url).type('#registration-number-ctrl input[type=text]', rego).click('.btn-holder input').waitForSelector('.ctrl-holder.ctrl-readonly').html().then(function(body) {console.log(processInfo(body, rego));return horseman.close();});
}// Scrape the results for key info
function processInfo(html, rego) {var $ = cheerio.load(html);var vehicle = $('label.label').filter(function() {return $(this).text().trim() === 'Vehicle:';}).next().text().trim();var stolen = $('label.label').filter(function() {return $(this).text().trim() === 'Stolen status:';}).next().text().trim();var registration = $('label.label').filter(function() {return $(this).text().trim() === 'Registration status & expiry date:';}).next().text().trim();return {rego,vehicle,stolen,registration};
}
结果
我必须要说,我感到非常惊讶。
我原来预计开源的车牌识别会相当垃圾。而且图像识别算法可能并没有针对澳大利亚的牌照进行优化。
该解决方案能够在宽阔的视野中识别车牌。
添加注释的效果。尽管存在光线反射和镜头失真,但车牌号还是识别出来了。
虽然该解决方案偶尔会有特定字母出现问题。
车牌号码识别错误,误将M识别为H
但是…… 该解决方案最终还是把车牌识别出来了。
几帧过后,M被正确识别出来了,并具有更高的置信度
你可以从上面两个图像看出,在处理了几帧图像之后,置信度从87%提升到了91%多。
我有信心可以通过提高采样率来提高识别的准确率,然后按置信度排序。或者,在校验注册的号码之前只接受置信度大于90%的识别结果。
这些是非常直接的代码方面的修复,并且不妨碍使用本地数据集训练车牌识别软件。
8600万美元的问题
说句公道话,我完全不知道8600万美元这个数字包括些什么东西,也不能说没有本地化训练的开源工具的准确性能与BlueNet系统相提并论。
我估计这一预算中有一部分包括了替换几个遗留的数据库和软件应用程序,以支持高频率低延迟的车牌查询服务。
另一方面,每辆车的成本约为39万美元,似乎相当昂贵,特别是如果BlueNet不是特别准确,并且没有大型IT项目淘汰或相关系统升级的话。
未来的应用程序
虽然这很容易陷入奥维尔性质的“永远在线”的牌照扒窃网络,但这种技术也有很多积极的应用。想象一下,对一辆被劫持的车辆扫描乘客的被动系统,可以自动上报当局和家人目前的位置和方向。
特斯拉的车辆已经配备了摄像机和传感器,能够接收OTA更新。 Uber和Lyft司机也可以通过配备这些设备来大幅增加覆盖的区域。
使用开源技术和现有的组件,似乎有可能提供一个提供更高响应率的解决方案,并且投资额远低于8600万美元。
文章原标题《How I replicated an $86 million project in 57 lines of code》,作者:Tait Brown,译者:夏天,审校:主题曲。
文章为简译,更为详细的内容,请查看原文
57行价值八千万美元的车牌识别代码相关推荐
- sbc8600_还记得我复制的价值8600万美元的车牌扫描仪吗? 我抓住了它。
sbc8600 by Tait Brown 泰特·布朗(Tait Brown) 还记得我复制的价值8600万美元的车牌扫描仪吗? 我抓住了它. (Remember the $86 million li ...
- 车牌识别 代码_用31行代码构建车牌识别服务
车牌识别 代码 A few days ago, when prowling around the internet, I came across a very interesting article, ...
- pytorch车牌识别代码
我不太了解pytorch车牌识别代码,但我可以提供一些关于它的基本信息. PyTorch是一种被广泛用于图像分类.语音识别和自然语言处理的深度学习框架.它可以用来构建.训练和测试复杂的模型,其中包括车 ...
- Python3.6 车牌识别代码源码
执行环境:python 3.6.PyQt5 (pip install PyQt5).百度SDK AipOcr (pip install baidu-aip) #!/usr/bin/python3 # ...
- mvcnn代码详解_Tensorflow,OpenCV实现的CNN车牌识别代码
[实例简介] 某位大牛在github上分享的 CNN 车牌识别源代码,在将其装到Windows的Python下运行时碰到了各种报错(WIN8下python3.6,Opencv3.0),有些问题搜遍网络 ...
- matlab车牌识别代码项目
由于车牌识别涉及到计算机视觉和图像处理等领域,因此需要涉及到一些专业知识和技能.以下是一些基本步骤和参考代码: 步骤: 读取图像文件并进行预处理(如调整图像大小.灰度化.二值化等). 提取车牌区域,即 ...
- 她在加拿大复刻图森无人卡车,获Hinton李飞飞参与的八千万美元投资
来源|智能车参考 文|浩楠 知一 都2021年了,自动驾驶创业还有机会吗? 当然有. 比如她,Raquel Urtasun(拉奎尔 · 乌尔塔松),不久前就在加拿大创办了一家名叫Waabi的自动 ...
- ds--8600使用手册_我如何用57行代码复制一个价值8600万美元的项目
ds--8600使用手册 by Tait Brown 泰特·布朗(Tait Brown) 我如何用57行代码复制一个价值8600万美元的项目 (How I replicated an $86 mill ...
- 车牌识别采购、研发纵览
车牌识别采购.研发纵览 文章来源 -- 绿睿科技: 车牌识别 雕刻机 三维网页 车牌识别采购.研发纵览 车牌识别采购.研发纵览 <车牌识别采购.研发纵览>是目前最详细的关于车牌识别的资料. ...
最新文章
- 自学python方法-从零开始自学python编程,你找对方法了吗?
- Cassandra学习手册之一:Cassandra介绍
- 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
- file extension php,.php File Extension
- android配置activity
- linux usermod -aG命令:将用户添加到某个组group
- ASP.NET Core使用功能开关控制路由访问
- 微软将降低Visual Studio对操作系统的影响
- IEnumerable和IQueryable的区别
- Android安全笔记-Service基本概念
- strstr不区分大小写_Excel find 函数竟然还能这么用!奖金梯次计算,连 if 都不需要...
- 零基础入门python web 自动化测试_web自动化测试从入门到持续集成
- Kaggle竞赛实战系列(一):手写数字识别器(Digit Recognizer)得分99.53%、99.91%和100%
- citrix服务器共享文件夹,如何使用citrix XenApp 发布远程共享文件夹,及其故障解决...
- 小程序加入人脸识别_微信小程序实现人脸识别登陆的示例代码
- 今日制造怎么安装solidworks插件_PS插件安装后出现了登陆界面,无法使用怎么解决?保证一招搞定...
- 手机b站封面提取网站_【软件分享】B站视频提取器
- Kettle之数据同步
- 涉密打印机与设密计算机之间采用,涉密打印机与涉密计算机之间 - 作业在线问答...
- 为什么要使用mongodb
热门文章
- visio旋转图形_两张图,说清如何任意旋转VISIO形状或图表
- 真实入手点评:高通骁龙875和麒麟9000哪个好-处理器跑分哪个厉害
- C++中ndarray
- 7700php,i7 7700k和i7 8700k性能差距大吗?intel酷睿i7 8700K处理
- Java项目:SSM水果蔬菜商城批发网站
- web开发工具 http-server , grunt 使用
- 【西川善司】PLAYSTATION4图形讲座(后篇) [
- ios 获取电量百分比_获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)...
- TextView设置一行最多显示6个字是什么属性?
- 【C#基础】C# 正则表达式