专栏名称: 机器之心
专业的人工智能媒体和产业服务平台
目录
相关文章推荐
爱可可-爱生活  ·  【[226星]3dgrut:3D ... ·  15 小时前  
爱可可-爱生活  ·  【Flow Matching and ... ·  16 小时前  
量子位  ·  DeepSeek上脸实测:AR眼镜实时翻译老 ... ·  20 小时前  
51好读  ›  专栏  ›  机器之心

教程 | 如何通过57行代码复制价值8600万澳元的车牌识别项目

机器之心  · 公众号  · AI  · 2017-09-04 13:57

正文

选自Medium

作者:Tait Brown

机器之心编译

参与:蒋思源、黄小天


Tait Brown 利用 Openalpr 库和 VicRoads API 等通过 57 行 javascript 代码实现了澳洲车牌识别并检测是否被盗。


维多利亚警察局是澳大利亚维多利亚州的主要执法机构。去年在维多利亚州有超过 16000 车辆被偷,造成的经济损失约 1.7 亿美元,警察局正积极尝试多种技术方案攻克这一问题。


为了阻止被偷车辆的非法交易,已经有了一项名叫 VicRoads 的网络服务检查被偷车辆的登记状态。警方还投资了一个固定式汽车牌照扫描仪,它带有一个固定的三脚架摄像头,可以扫描过往车辆并自动识别被偷车辆。


我也不知道为什么,但是有一天的下午,我突然有了打造一个车载拍照扫描仪原型的想法,它可以自动提醒你一辆车是已被偷或未登记。搞明白了已有的单独组件之后,我在想把它们组装起来的难度有多大。


经过一番谷歌搜索,我发现维多利亚经法已在试验一个类似的项目,项目成本预估在 8600 万澳元。一位敏锐的评论员指出,一个 8600 万澳元($)的项目装配在 220 辆车上,平均每辆车的费用是 390909 澳元。


因此,我们当然可以做的更好。

固定式车牌识别系统


成功标准


在开始之前,我概述了产品设计所需的若干个关键需求。


图像处理必须本地执行


把实时视频流传递到中央处理仓库似乎是解决这一问题的效率最低的方法。除了数据量的巨大开支,你也将把网络延迟引入到已经相当缓慢的过程中。


尽管中心化的机器学习算法会随着时间变的更精确,我想知道一个本地的设备上的实现是否足够好。


必须使用低质量图像


尽管我没有树莓派摄像头或 USB 网络摄像头,因此我将会使用 dashcam 镜头,它易于获取,是样本数据的理想来源。作为有一个额外的好处,dashcam 视频代表了像车载摄像头一样的镜头整体质量。


必须使用开源技术构建


如果使用专利软件,那么每一次修改系统或增强系统就会受到阻拦,并且每一次请求都可能出现错误。而使用开源技术就显得十分简单了。


解决方案


从高层次来说,我的解决方法从 dashcam 视频中获取图像,然后将图像传入安装在本地的开源车牌识别系统并请求执行登记检查服务,最后再返回结果。


数据将返回到安装在执法车辆上的设备,包括车辆制造商和型号(只有牌照被盗时才会验证)、登记状态和车辆被盗时的通知。


这确实挺简单的,因为图像处理都可以由 Openalpr 库完成。而我们识别车牌上的字符只需要如下简单的调用就行:


  1. openalpr.IdentifyLicense(imagePath, function (error, output) {

  2.   // handle result

  3. });



注意:VicRoads API 并不能公共访问,因此该原型只能从网页中爬取牌照检测。以下是这一方法的概念验证代码:


  1. // Open form and submit enquire for `rego`

  2. function getInfo(rego) {

  3.    horseman

  4.      .userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0')

  5.      .open(url)

  6.      .type('#registration-number-ctrl input[type=text]', rego)

  7.      .click('.btn-holder input')

  8.      .waitForSelector('.ctrl-holder.ctrl-readonly')

  9.      .html()

  10.      .then(function(body) {

  11.        console.log(processInfo(body, rego));

  12.        return horseman.close();

  13.      });

  14. }

  15. // Scrape the results for key info

  16. function processInfo(html, rego) {

  17.    var $ = cheerio.load(html);

  18.    







请到「今天看啥」查看全文