57行程式碼復刻8600萬美元的大專案!
譯者: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萬美元。
當然我們可以做的比這更好。
現有的車牌識別系統(白車+攝像頭)
在開始之前,我簡要介紹了產品設計的幾個關鍵要求。
影象處理必須在本地執行
將實時視訊流傳向中央處理倉庫似乎是解決此問題的最低效方法。除了資料流龐大的容量,您還將網路延遲引入到已經相當緩慢的過程中。
雖然集中式機器學習演算法只會隨著時間的推移而變得更加準確,但我想了解本地的裝置實現是否“足夠好”。
它必須能夠解析低質量的影象
因為我沒有樹莓派相機或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萬美元的系統都包含什麼,也不知道本地化訓練的開源工具的準確性跟官方系統相比結果如何。
我估計預算的一部分包括更新幾個遺留資料庫和軟體應用程式,以支援每秒對多車進行高速,低延遲的車牌查詢。
另一方面,每輛車的識別成本在39.1萬美元左右也確實挺貴——特別是如果系統的識別結果不是特別準確,而且沒有大規模的IT專案停產或升級相關係統。
未來的應用
雖然在想法上很容易陷入喬治奧威爾式的“永遠線上”式的車牌告密網路,但這種技術還是有很多積極的應用。試想,一個系統掃描到一個綁匪的車,自動通報當局和家屬綁匪目前的位置和方向。
特斯拉斯車輛已經擁有攝像頭和感測器,能夠接收OTA更新——想象將其變成一個虛擬的好心人。Ubers和Lyft司機也可以配備這些裝置來大幅增加覆蓋面積。
使用開源技術和現有元件,似乎有可能提供一個提供更高回報率的解決方案——投資遠低於8600萬美元。
想要系統學習機器學習?
七月線上《機器學習集訓營》10個工業專案實戰輔導 + 一對一面試求職輔導(提供內推機會)
除直播答疑、作業批改、線上考試之外,特地增加開課前的入學測評,基於每一個人的測評資料量身定製個性化的不同學習路線。
線上+線下授課模式,BAT專家面對面、手把手教學;讓你3個月挑戰年薪40萬機器學習工程師!
掃描下方二維碼試聽
相關文章
- 使用碼雲管理你的專案程式碼
- 快速熟悉專案程式碼
- 一刻社群程式碼開源啦
- AI大模型+低程式碼,在專案管理中的應用實踐AI大模型專案管理
- 大專案寫程式碼寫到暈頭轉向?敏捷多專案框架解君愁敏捷框架
- 如何研究開源專案的程式碼?
- 程式猿的心酸時刻
- 我如何用57行程式碼複製一個價值8600萬美元的專案行程
- 前端專案程式碼加密教程前端加密
- OpenDoc - 專案程式碼整理指南
- Android 專案程式碼混淆Android
- 專案程式碼風格要求
- 如何統計專案程式碼?
- 9個必須時刻警惕的Linux命令&程式碼Linux
- 如何保障前端專案的程式碼質量前端
- cmdr 02 - 復刻一個 wgetwget
- 全棧低程式碼專案,你手寫一個企業級的低程式碼全棧專案全棧
- Golang 扁平專案程式碼結構Golang
- 淺談專案程式碼規範
- git管理複雜專案程式碼Git
- 客快物流大資料專案(四十二):Java程式碼操作Kudu大資料Java
- 谷歌內部專案:大模型AI智慧體發現了程式碼漏洞谷歌大模型AI智慧體
- 如何優化我們的程式碼(vue專案)優化Vue
- 寫專案程式碼之前必須要做的事
- 程式碼差別不大的多專案如何管理?
- 如何移除你專案中99%的JS程式碼JS
- 含有SilverLight專案的程式碼重用
- 17joys專案程式碼的命名規範
- 專案的改造——RemoveButterKnife外掛程式碼的重構REM
- 稚暉君來填坑:開源靈犀X1全套圖紙+程式碼,復刻搞起來
- 新碰一個專案,專案程式碼拉取之後所需要做的事情
- 《整潔程式碼cleancode》的javascript原始碼實現專案JavaScript原始碼
- 程式碼質量對比:開源專案 vs 閉源專案
- NSA 向 Coreboot 專案貢獻程式碼boot
- Go 語言專案程式碼品質Go
- 知乎專案程式碼閱後總結
- gitHub_2 上傳專案程式碼Github
- 第九章專案程式碼