使用計算機視覺制作停車助手,讓您可以始終如一地將汽車完美對齊地停放在車庫中。
間接傳感
在傳感器領域,為了簡化和降低傳感成本,進行間接測量是很常見的。例如,為了檢測人的存在以發出警報,超聲波或熱傳感設備用于檢測運動。然而,人類不是這樣工作的。雖然我們可能可以使用聲音來檢測周圍是否有人,但視覺是我們確定周圍事物的最佳方式。一般來說,視覺可能是我們最有價值和最有能力的感覺,它使我們能夠理解世界。
通過計算機視覺感知
最近,計算機視覺取得了很大進展。與機器學習相結合的新算法使我們能夠從視頻捕獲中確定大量信息。然而,這些解決方案的成本遠遠高于其他類型的傳感,因此其用途僅限于監控和工業應用。成本主要來自捕獲和分析視頻所需的強大計算機。
廉價的計算機視覺 (CV) 傳感器可能會成為傳感技術的一項突破,原因有很多:
它可以做得比間接傳感器更智能。例如,在占用傳感器中,當占用者不移動時,間接傳感器會失效。即使沒有移動,真正的計算機視覺占用傳感器也可以檢測占用情況。
只需一個視覺傳感器就可以檢測到許多不同的事物。例如,同一設備可用于檢測位置、占用情況(即使現在很多人都在一個房間里)、火情、光照水平、設備狀態(燈是否亮著?電視是否開著?)、手勢控制,你的名字。如果您可以用自己的眼睛看到它,那么計算機視覺傳感器也可以檢測到它。
一旦開始使用,價格就會自行降低。基本上,這是大規模生產的結果。如果不生產占用傳感器、火災傳感器、位置傳感器,甚至墻壁開關,用基于攝像頭的手勢檢測代替,一切都只用一個 CV 傳感器完成,那么價格將比現在間接感應的價格降低得多。
基于攝像頭的停車助手
由于上述原因,我想使用 FRDM-K82F 創建某種基于計算機視覺的傳感器。雖然我想到了很多想法,但只有一個是實用的、有用的,并且可以在比賽截止日期前完成。
將汽車始終停在車庫內的同一位置是非常困難的。您最終會在側面過多,或者在前面或后面沒有留下足夠的空間。或者,也許你非常小心,但你的另一半卻不是,如果你像我一樣,那會讓你發瘋。目前有解決方案,從低技術到“偽高科技”。這些是其中的一些:
我的想法是創建對用戶更友好的完全不同的東西。這個想法是使用計算機視覺制作一個系統,可以始終指導您正確停車。比現有解決方案更類似于此:
如何運作?
使用視頻圖像中的運動檢測,系統應該能夠指示車輛是否需要左移、右移或停止。
對用戶的指示必須來自一個非常簡單的基于燈光的界面,如下所示:
左右箭頭將指示汽車是否必須向左或向右轉向。中間的燈會顯示三種顏色,綠色表示前進,黃色表示謹慎前進,紅色表示停止。
為什么選擇帶有 FlexIO 的 FRDM-K82F?
像 UV7670 這樣的相機之前已經連接到其他類型的微處理器。然而,在大多數這些實現中,微處理器積極參與從圖像中捕獲數據。這需要微處理器的大量處理能力。一旦圖像被獲取并在 RAM 中,真正的工作就從圖像處理功能開始。
Kinetis FlexIO 允許從 UV7670 傳感器中檢索圖像,幾乎無需微處理器進行處理。一旦圖像被完全捕獲,中斷指示圖像已準備好并在內存中。在處理圖像時,將同時捕獲下一張圖像。
這使得 FRDM-K82F 成為該項目目標的理想平臺:一個非常低成本的圖像處理平臺。
為什么選擇 OV7670 攝像頭模塊?
OV7670 是一款 300Kpixels 相機。分辨率對于這個應用程序來說并不那么重要,實際上在撰寫本文時,程序以最低分辨率 (120x160) 使用它。OV7670 的關鍵是規模經濟。因為它在小型項目中被大量使用,所以在包含鏡頭的分線板上組裝相機的成本約為 10 美元。它還具有其他優點,例如沒有紅外濾光片,使其適合使用紅外照明進行應用。
構建說明
攝像頭組裝:FRDM-K82F 平臺的設計人員很高興能包含一個用于 FlexIO 的連接器,其引腳與 OV7670 完全相同。可以將 OV7670 直接焊接到 FRDM-K82F 板上,但是,我將 0.1” 插座焊接到板上。這樣我以后可以將其他相機或設備連接到 FlexIO 接口。
指示燈:這是項目中唯一需要一些人工來復制它的部分。指示燈是使用帶控制器的 WS2812B RGB LED 制成的,并使用泡沫板進行安裝。使用 WS2812B LED 的原因是因為它們提供了很大的靈活性(可以自定義顏色,并且可以連接任意數量的 LED),只需使用微控制器中的一個簡單 GPIO。指示燈示意圖如下:
LED 安裝在雙面原型穿孔板上,作為三個單獨的板。三塊板用扁平電纜連接。第一個板是唯一不同的,因為它包含上拉電阻。
如果有可用的 WS2812B 分線板,使用起來會更容易。
在泡沫板上切割燈的形狀。小心不要完全切開。也就是說,將紙板背面留在一側。剩余的紙板為 LED 提供了很好的擴散器。這樣做兩次,并使用銳器為內部邊界著色,以避免光線擴散到創建的形狀之外。LED 板安裝在其中一塊泡沫板上,并使用雙面膠帶將所有東西放在一個組件中。
燈總成數據線連接到Port C pin 12,即FRDM-K82F板子中的PTC12:
軟件
至此,硬件準備就緒,是時候在軟件中工作了。
首先安裝 Kinetis Design Studio。就我而言,我將它安裝在我的 MacBook Pro 上,雖然文檔不能保證它會起作用,但它對我來說完美無缺。
要刷新 FRDM-K82F 板,到處都使用 JLink JTAG 適配器,但是,我使用了 OpenSDAv2.1 接口,或者最常見的 mbed 接口。將 OpenSDA 端口連接到 MAC 后,它將顯示為 USB 驅動器,其中復制了 KDS 生成的 .bin 文件。
我這樣做只有一個問題。在某些時候,由于某種無法解釋的原因,配套的微處理器(實現 OpenSDA 接口的那個)不知何故被擦除了。它沒有作為名為 mbed 的 USB 驅動器出現,而是顯示為 BOOTLOADER。
只需將固件復制到 USB 驅動器中,幾分鐘后我就可以重新啟動并運行。
我根據安裝 Kinetis Design Studio 時復制到示例文件夾中的 dev_video_flexio_ov7670_lite 示例啟動了我的軟件。有一段時間,我計劃完全刪除代碼的 USB 部分,但我沒有這樣做很好,因為它有助于調試應用程序。
通常在計算機視覺應用中,不是使用 RGB,而是使用黑白視頻。但是,從 RGB 轉換為基于強度的視頻需要太多的處理器時間,我想為圖像處理留下盡可能多的處理能力,所以我更改了演示程序,以便從 OV7670 傳感器捕獲的圖像在 YUV422 中完成。YUV 422 格式再次使用每像素 16 位,一個字節用于強度,另一個字節用于顏色信息。
這很容易在 flexio_ov7670.h 文件中更改,只需更改以下行:
.outputFormat = (ov7670_output_format_config_t*)&OV7670_FORMAT_RGB565,
至
.outputFormat = (ov7670_output_format_config_t *)&OV7670_FORMAT_YUV422,
然而,正如預期的那樣,這搞砸了通過 USB 發送的視頻。我嘗試了一段時間將東西的USB端更改為YUV422格式,但我沒有成功,所以為了保持USB視頻可用,我將Intensity轉換為RGB圖像,很多比將 RGB 轉換為強度更簡單。
在通過 USB 發送圖像之前,我還在圖像中添加了一些信息,以幫助調試應用程序。這是我的視頻在帶有調試信息的 PC 端的外觀:
停車助手所需的軟件在parkasst.c文件中,基本上需要用YUV422圖像的緩沖區調用。所以這很容易遷移到其他平臺。然而,要復制整個項目,只需在 FRDM-K82F 板中加載項目中包含的 .bin 文件并按照項目中的說明添加 LED。
總結
這不算是一個盡如人意的項目。但是,還是有一些今后可以進行拓展完善的功能。這些是完成該項目的下一個功能步驟:
使用藍牙低功耗將圖像上傳到手機,這樣用戶就可以準確地配置停車限制
將停車區更改為三角形而不是正方形。它需要是一個三角形來考慮相機的視角
-
傳感器
+關注
關注
2551文章
51134瀏覽量
753840 -
計算機視覺
+關注
關注
8文章
1698瀏覽量
46004 -
FRDM
+關注
關注
1文章
11瀏覽量
2527
發布評論請先 登錄
相關推薦
評論