我如何用57行代碼複製一個價值8600萬美圓的項目

當使用現有開源技術的實驗作「足夠好」的工做時

維多利亞警察局是澳大利亞維多利亞州的主要執法機構。去年維多利亞州有超過16,000輛汽車被盜 - 耗資約1.7億美圓 - 警察部門正在試驗各類技術驅動的解決方案,以打擊汽車盜竊行爲。他們稱這個系統爲BlueNet。爲了防止被盜車輛的欺詐性銷售,已經有一項VicRoads 基於網絡的服務,用於檢查車輛登記的狀態。該部門還投資了一個固定式車牌掃描儀 - 一個固定三腳架相機,掃描過往交通,自動識別被盜車輛。不要問我爲何,可是有一天下午,我有一個車載車牌掃描儀原型的願望,若是車輛被盜或未註冊,它會自動通知你。瞭解這些單獨的組件存在,我想知道將它們鏈接在一塊兒是多麼困難。可是,通過一番谷歌搜索,我發現維多利亞警方最近經歷了相似設備的試驗,估計推出的成本約爲86,000,000美圓。一位精明的評論者指出,安裝220輛汽車的成本爲8600萬美圓,至關於每輛汽車390,909美圓。固然,咱們能夠作得更好。html

現有固定車牌識別系統

成功標準

在開始以前,我概述了產品設計的一些關鍵要求。算法

要求#1:圖像處理必須在本地執行

將實時視頻流式傳輸到中央處理倉庫彷佛是解決此問題的最有效方法。除了高昂的數據流量帳單外,您還會將網絡延遲引入到可能已經很慢的流程中。數據庫

雖然集中式機器學習算法只會隨着時間的推移變得更加準確,但我想了解本地設備上的實現是否「足夠好」。bash

要求2:必須使用低質量圖像

因爲我沒有Raspberry Pi攝像頭或USB網絡攝像頭,所以我將使用dashcam鏡頭 - 它隨時可用而且是樣本數據的理想來源。做爲額外的獎勵,dashcam視頻表明了您對車載攝像頭所指望的鏡頭的總體質量。服務器

要求#3:須要使用開源技術構建

依靠專有軟件意味着您每次請求更改或加強時都會受到攻擊 - 而且此後每次請求都會繼續刺痛。使用開源技術是一個明智的選擇。網絡

My solution

在較高的層次上,個人解決方案從dashcam視頻中獲取圖像,經過設備本地安裝的開源牌照識別系統,查詢註冊檢查服務,而後返回結果進行顯示。機器學習

返回執法車輛中安裝的設備的數據包括車輛的品牌和型號(僅用於驗證車牌是否被盜),登記狀態以及被報告車輛被盜的任何通知。工具

若是這聽起來很簡單,那是由於它確實如此。例如,圖像處理均可以由學習

openalpr
library.

這真的是識別車牌上的角色所涉及的全部內容:優化

openalpr.IdentifyLicense(imagePath, function (error, output) {
// handle result
});複製代碼

A Minor Caveat

公共訪問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
}; 複製代碼

}

複製代碼

Results我必須說我很驚喜。我預計開源車牌識別很是垃圾。此外,圖像識別算法可能未針對澳大利亞車牌進行優化。該解決方案可以識別普遍視野中的車牌。

              爲效果添加了註釋。儘管有反射和鏡頭失真,但仍能識別車牌

雖然,解決方案偶爾會遇到特定字母的問題。

                                讀板錯誤,將M誤認爲是H.

可是......解決方案最終會使它們變得正確。

                            幾幀後,M被正確識別而且置信度更高

正如您在上面兩張圖片中看到的那樣,處理圖像幾幀後,從87%的置信度評分跳到91%以上的頭髮。我頗有信心,原諒雙關語,經過提升採樣率,而後按最高置信度等級排序,能夠提升準確性。或者,能夠設置閾值,該閾值在繼續驗證註冊號以前僅接受大於90%的置信度。這些是很是直接的代碼優先修復,並不排除使用本地數據集訓練車牌識別軟件。86,000,000美圓的問題公平地說,我徹底不知道$ 86M這個數字包括什麼 - 我也不能說個人開源工具的準確性,沒有本地化培訓與試點BlueNet系統。我但願預算的一部分包括更換幾個遺留數據庫和軟件應用程序,以支持每輛車每秒數次高頻率,低延遲地查詢車牌。另外一方面,每輛車約39.1萬美圓的成本彷佛至關豐富 - 特別是若是BlueNet不是特別準確,而且沒有大規模的IT項目退役或升級依賴系統。Future Applications雖然很容易陷入奧威爾式的「永遠在線」牌照狙擊手網絡中,但這項技術有許多積極的應用。想象一下被動系統掃描同伴駕駛者的綁架車,自動警告當局和家庭成員他們當前的位置和方向。特斯拉斯的車輛已經充滿了可以接收OTA更新的攝像頭和傳感器 - 想象一下,這些變成了一羣虛擬的好撒瑪利亞人。 Ubers和Lyft司機也能夠配備這些設備,以大幅增長覆蓋範圍。使用開源技術和現有組件,彷佛能夠提供一種提供更高回報率的解決方案 - 投資遠低於8600萬美圓。

英文原文:medium.freecodecamp.org/how-i-repli…

更多文章歡迎訪問 http://www.apexyun.com/

聯繫郵箱:public@space-explore.com

(未經贊成,請勿轉載)

相關文章
相關標籤/搜索