我是如何用57行代碼復制了一個8600萬美元的項目的">我是如何用57行代碼復制了一個8600萬美元的項目的

分類:IT技術 時間:2017-09-28

當使用現有的開源技術進行實驗時可以將工作做到“足夠好”

維多利亞警察局是澳大利亞維多利亞州的主要執法機構。 過去一年,維多利亞州共有超過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萬美元。

感謝 Drew Firment 。


Tags: 維多利亞州 被盜 維多利亞 一個 車牌 車輛

文章來源:


ads
ads

相關文章
ads

相關文章

ad