基於Opencv&Tensorflow實現實時查詢停車位置
介紹
你是不是經常在停車場周圍轉來轉去尋找停車位。如果你的手機能準確地告訴你最近的停車位在哪裡,那是不是很爽?事實證明,基於深度學習和 OpenCV 解決這個問題相對容易,只需獲取停車場的實時視訊即可。下面的 GIF 圖片突出顯示洛杉磯機場停車場上所有可用的停車位,並顯示可用停車位的數量,關鍵是這一過程是實時的!
動圖太大,上傳不了原圖請點選檢視原文
你可以在 ofollow,noindex" target="_blank"> Github repo 找到我曾用過的程式碼。
步驟概述
構建這個停車檢測模型主要有兩個步驟:
1. 檢測所有可用的停車位;
2. 確定停車位是空的還是被佔用的;
因為安裝了攝像頭檢視,我們可以使用 OpenCV 對每個停車位進行一次對映。一旦你知道了每個停車位的位置,你就可以用深度學習來預測它是否空著。我已經在我的部落格上分享了所涉及的一個高層次步驟的概述。如果你對詳細程式碼感興趣,請看看我的 部落格 。
檢測所有可用停車位的位置
檢測停車位的基本思路是,所有的停車點的分隔線都是處於水平線,而一列中的停車點之間的間隔大致相等。首先使用 Canny 邊緣檢測 來獲得邊緣影象。我還把沒有停車的地方遮了起來。如下所示 :
然後我在邊緣影象上做了霍夫變換,畫出了它能識別的所有線。我只選擇斜率接近於零的直線來隔離水平線。霍夫變換的輸出如下 :
正如你所看到的那樣,霍夫變換在識別停車線方面做得相當好,但是輸出有噪聲 —— 幾個停車線被多次檢測到,而有些被遺漏了。那麼我們如何解決這個問題呢 ? 然後我用觀察和直覺開始,通過使用霍夫變換返回的座標,聚集 x 座標來確定主要的停車道。利用聚類邏輯來識別車道線 x 座標的間隔。這樣就能識別出這裡的 12 個車道。如下:
如果所有這些看起來都很複雜,別擔心 5—— 我已經在 github 的 jupyter notebook 上一步一步地記錄了程式碼。現在我已經知道了所有的停車道都在哪裡,通過合理地假設所有的停車點大小都一樣來識別每個單獨的停車位。我仔細觀察了結果,以確保儘可能準確地捕捉到點之間的邊界。我終於能夠標出每個停車位。如下:
當完成了每個車位的定位之後,我們可以為每個點分配一個 ID ,並將其座標儲存在字典中並將它 pickled 了一下,以便以後能取回。這是可以實現的,因為安裝了攝像頭,我們不需要一次又一次地計算每個點在檢視中的位置。更多詳情請登入我的 部落格 。
識別該車位是否有標記
現在我們有了每個停車位的對映,可以通過以下幾種方式來確定這個停車位是否被佔用:
1. 使用 OpenCV 檢查視訊影象中停車位的畫素顏色是否與空停車位的顏色一致。這是一種簡單的方法,但容易出錯。例如,燈光的變化將會改變一個空停車位的顏色,在一天的光照變化中,這種方法將無法正確工作。如果有可能的話,這種邏輯會把灰色的汽車當成空停車位;
2. 使用目標檢測來識別所有的汽車,然後檢查汽車的位置是否與停車位重疊。我做了嘗試,發現實時檢測模型真的很難檢測小尺寸的物件,檢測到的車輛不超過 30% ;
3. 使用 CNN 檢測每個停車位,並預測是否有人停車,這種方法最終效果最好。
要構建一個 CNN ,我們需要停車位有車以及無車這兩種情況的影象。我提取了每個停車位的影象,並將其儲存在資料夾中,然後將這些影象分組。我還在 Github 上分享了這個訓練資料夾。
因為在 1280x720 畫素的影象中有近 550 個車位,所以每個車位的大小隻有 15x60 畫素左右。下面是空車位和被佔用車位的影象:
然而,由於被佔用車位和空車位看起來有很大的不同,這對 CNN 來說應該不是一個具有挑戰性的問題。
然而,我只有大約 550 張關於這兩個類的圖片,所以決定利用 VGG 的前 10 層,並在 VGG 模型的輸出新增一個單一的 softmax 圖層來進行遷移學習。你可以在 這裡 找到這個遷移學習模型的程式碼,準確率達到 94% 。見下文:
現在,我將停車位檢測和 CNN 預測器結合起來,構建了一個停車位檢測器,準確率非常高。
我還在 notebook 記錄了在視訊流上執行這個的程式碼。
結論
對於聯合不同的工具和使用深度學習來構建實際應用程式這麼容易我感到很驚奇,我在兩個下午完成了這項工作。
準備進一步探索的其他幾個想法:
1. 如果可以將車位檢測邏輯擴充套件到任何可能使用深度學習的車位地圖上,那就太好了, OpenCV 對每個用例進行調優有限制;
2. CNN 使用的 VGG 模型是一個重量化模型,想要嘗試更輕量化的模型。
以上為譯文。
本文由 阿里云云棲社群 組織翻譯。
文章原標題《find-where-to-park-in-real-time-using-opencv-and-tensorflow 》,
作者: Priya Dwivedi 譯者:烏拉烏拉 ,審校:。
文章為簡譯,更為詳細的內容,請檢視 原文 。