我如何用57行程式碼複製一個價值8600萬美元的專案

銀河1號發表於2019-01-14

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

我如何用57行程式碼複製一個價值8600萬美元的專案

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

我如何用57行程式碼複製一個價值8600萬美元的專案
現有固定車牌識別系統

成功標準

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

要求#1:影象處理必須在本地執行

將實時視訊流式傳輸到中央處理倉庫似乎是解決此問題的最有效方法。除了高昂的資料流量賬單外,您還會將網路延遲引入到可能已經很慢的流程中。

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

要求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我必須說我很驚喜。我預計開源車牌識別非常垃圾。此外,影象識別演算法可能未針對澳大利亞車牌進行優化。該解決方案能夠識別廣泛視野中的車牌。

我如何用57行程式碼複製一個價值8600萬美元的專案

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

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

我如何用57行程式碼複製一個價值8600萬美元的專案
                                讀板錯誤,將M誤認為是H.

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

我如何用57行程式碼複製一個價值8600萬美元的專案
                            幾幀後,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

(未經同意,請勿轉載)


相關文章