57行程式碼復刻8600萬美元的大專案!

七月線上實驗室發表於2018-04-26

譯者:jshhcdxs

原文:https://medium.com/@taitems/how-i-replicated-an-86-million-project-in-57-lines-of-code-277031330ee9


維多利亞警察局是澳大利亞維多利亞州的主要執法機構。 過去一年,維多利亞州共有超過1.6萬輛車被盜,損失約為1.7億美元,警方正在試驗各種技術解決方案,來打擊汽車盜竊。

為了防止被盜車輛的欺詐性銷售,已經有VicRoads這種線上服務用於檢查車輛註冊狀況。當局還投資了一個固定的車牌掃描器——一個固定的三腳架攝像頭,用於自動掃描識別被盜車輛。

不要問我為什麼,就在某天下午,我想到製作一個車載的車牌掃描器,如果車輛被盜或未註冊,能夠自動通知您。這些單獨的元件是存在的,我想知道將它們協同連線起來會有多困難。

但是,經過一番谷歌搜尋之後,我發現維多利亞警方最近試驗了一個類似的裝置,估計費用約為8600萬美元。 一位精明的評論員指出,這8600萬美金用來匹配220輛車,相當於每一輛車花費39.0909萬美元。

當然我們可以做的比這更好。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

現有的車牌識別系統(白車+攝像頭)






在開始之前,我簡要介紹了產品設計的幾個關鍵要求。


影象處理必須在本地執行


將實時視訊流傳向中央處理倉庫似乎是解決此問題的最低效方法。除了資料流龐大的容量,您還將網路延遲引入到已經相當緩慢的過程中。

雖然集中式機器學習演算法只會隨著時間的推移而變得更加準確,但我想了解本地的裝置實現是否“足夠好”。



它必須能夠解析低質量的影象


因為我沒有樹莓派相機或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    }; }

結果

我必須說我很驚喜。

我原以為開源車牌識別會相當垃圾。此外,影象識別演算法可能沒有針對澳大利亞車牌進行優化。

實際卻發現該解決方案能夠在各種視野中識別車牌。

640?wx_fmt=jpeg

新增註釋生效。 儘管有反光和鏡頭失真,但確定了牌號。

雖然解決方案對特定字母識別有問題。

640?wx_fmt=jpeg

車牌識別不正確,誤把M當作H

但是...識別最終會還是成功了。

640?wx_fmt=jpeg

幾幀後,M被正確識別,並具有更高的置信度

正如你可以看到上述兩個影象,幾幀後影象處理從87%的置信度上升到91%。

我很自信,原諒我這麼說,提高準確率可以通過提高抽樣率,然後按最高置信度排序。或者,可以設定在驗證車牌之前僅接受大於90%的置信度的閾值。

這些是非常直接的程式碼優先修復,並且不排除使用本地資料集訓練車牌識別軟體。



8600萬美元的問題



老實說,我完全不知道8600萬美元的系統都包含什麼,也不知道本地化訓練的開源工具的準確性跟官方系統相比結果如何。

我估計預算的一部分包括更新幾個遺留資料庫和軟體應用程式,以支援每秒對多車進行高速,低延遲的車牌查詢。

另一方面,每輛車的識別成本在39.1萬美元左右也確實挺貴——特別是如果系統的識別結果不是特別準確,而且沒有大規模的IT專案停產或升級相關係統。



未來的應用



雖然在想法上很容易陷入喬治奧威爾式的“永遠線上”式的車牌告密網路,但這種技術還是有很多積極的應用。試想,一個系統掃描到一個綁匪的車,自動通報當局和家屬綁匪目前的位置和方向。

特斯拉斯車輛已經擁有攝像頭和感測器,能夠接收OTA更新——想象將其變成一個虛擬的好心人。Ubers和Lyft司機也可以配備這些裝置來大幅增加覆蓋面積。

使用開源技術和現有元件,似乎有可能提供一個提供更高回報率的解決方案——投資遠低於8600萬美元。






想要系統學習機器學習?

七月線上《機器學習集訓營》10個工業專案實戰輔導 + 一對一面試求職輔導(提供內推機會)

直播答疑、作業批改、線上考試之外,特地增加開課前的入學測評,基於每一個人的測評資料量身定製個性化的不同學習路線

線上+線下授課模式,BAT專家面對面、手把手教學讓你3個月挑戰年薪40萬機器學習工程師!

掃描下方二維碼試聽

640?wx_fmt=png

相關文章