資料介紹
描述
根據美國國家公路交通安全管理局 (NHTSA)最新的汽車事故和死亡數據,2020 年美國死亡人數超過 38,000 人,為 2007 年以來的最高水平。2021 年估計超過 40,000 人。
根據美國國家公路交通安全管理局 (NHTSA) 的說法,在 45% 的致命事故中,乘用車司機至少有以下一種危險行為:超速、酗酒或未系安全帶。(2023 年 1 月 13 日更新:前幾天我在收音機里聽說激進駕駛也是事故的一個因素,所以我在我的項目中添加了另一個傳感器!)。
借助 Edge Impulse 對象檢測模型和 Blues Wireless Notecard,我們可以利用機器學習和無線物聯網的力量來幫助減輕這些危險行為!
我將此項目稱為致命事故風險緩解 (FARM) 。這是車隊管理能力的概念證明:確定您的團隊中誰在駕駛車輛,他們是否系好安全帶,他們是否以安全速度行駛,是否在車內檢測到酒精,以及(更新)他們是否激進駕駛(急加速和/或急剎車)。這一切都可以使用在 Raspberry Pi 4 上運行的 Edge Impulse 對象檢測模型、Raspberry Pi 相機、在 Raspberry Pi HAT 上運行的 Blues Wireless Notecard、DFRobot MQ-3 氣體傳感器(更新)和 Seeed Studio 來完成Grove LIS3DHTR 3 軸加速度計。該裝置可以通過車輛的 12V 電源(即點煙器)甚至電池組供電。
該項目的第一步是創建模型,為此我需要數據。我在外出開車時使用 Raspberry Pi 和相機拍了數百張照片,所以我有一些真實的樣本來展示模型會看到的東西。我收集了大約 300 張我在一天中不同時間系好安全帶駕駛的照片,以及不同日照量來改變輸入。這是我為捕獲這些圖像而開發的簡短 Python 腳本:
import os
import time
FRAMES = 200
TIMEBETWEEN = 6
frameCount = 0
while frameCount < FRAMES:
imageNumber = str(frameCount).zfill(7)
os.system("raspistill -o image%s.jpg"%(imageNumber))
frameCount += 1
time.sleep(TIMEBETWEEN - 6) #Takes roughly 6 seconds to take a picture
獲得圖像后,我將批量上傳到我的 Edge Impulse 項目中。可以在此處找到該項目的公共版本。然后是乏味的工作:貼標簽。幸運的是,Edge Impulse 能夠在其框架內標記每個圖像,從而使這變得非常簡單。對于每張圖片,我在我的臉周圍畫了一個邊界框,在肩部區域附近畫了一個邊界框,顯示系好安全帶(但也有一些背景表明我系了安全帶)。
在所有圖像都貼上標簽后,我開始了 Impulse Design 過程。在大多數情況下,我保留了 Edge Impulse 推薦的默認參數。如前所述,我使用了對象檢測框架。因為我使用的是 Raspberry Pi 4,所以我并不過分關心模型大小。我使用了 320x320 RGB 輸入圖像,并使用遷移學習在由 Edge Impulse 專家之一導入的 YOLOV5 數據集上訓練了 50 個訓練周期。還有一個社區 YOLOV5 模型也可以使用。該模型的精度得分為 98.3%,推理時間為 272 毫秒。模型大小為 3.5 MB,因此有足夠的空間容納 Raspberry Pi 4。
然后我將模型部署為 Linux (ARM V7).eim 文件。
由于我過去曾使用 .eim 文件完成項目,因此我利用該經驗開發 Python 代碼來加載模型、讀取圖像、對這些圖像進行分類,然后對推理結果采取行動(在本例中發送數據到 Blues Wireless Notehub.io)。Python 腳本可以在我的 github 上看到,該項目有一個鏈接(請參閱代碼部分)。
永遠不會滿足,一旦我啟動并運行我的代碼,我決定在設置中添加一個酒精傳感器,看看我是否可以檢測到車內是否存在酒精。我有一個一年前購買的 DFRobot 重力氣體傳感器 (MQ3),并為這個項目回收了它。大多數 MQ3 傳感器都是 5V 和模擬的,這在 Raspberry Pi 上表現不佳。然而,DFRobot 重力傳感器具有 I2C 接口,可承受 3.3V 和 5V,因此連接到 Raspberry Pi 非常容易(沒有 5V 到 3.3V TTL,也沒有 ADC)。
為了測試我的代碼,我將 Raspberry Pi(帶有 HAT)攝像頭、酒精傳感器、(更新)和加速度計安裝到我汽車的儀表板上,并將其插入 12V 電源:
我還連接了一個小型便攜式顯示器和 USB 鍵盤/鼠標,這樣我就可以看到何時獲得 GPS 衛星定位(每次關閉 Notecard 電源時,都必須重新獲取衛星)。一旦我獲得了 GPS 位置,我就開車四處轉轉。我設置了我的代碼,以便每 2 分鐘發送一次帶有駕駛員 ID 信息的注釋,如果他們系好安全帶,如果檢測到酒精,(更新)以及激進加速和制動的計數。速度和 GPS 信息由 Notecard 以預定的時間間隔自動發送(在我的例子中,我將其設置為每 20 秒一次以獲得精細的位置和速度數據)。
筆記被發送到 Blues Wireless Notehub.io。您可以在下面看到發送到Notehub.io的示例注釋:
然后我按照 Blues Wireless 的優秀教程創建了一條通往Datacake的路線,在那里我可視化了 Notes 中感興趣的數據:位置信息的緯度和經度、駕駛員姓名、速度、安全帶信息、檢測到的酒精數據(靜態和趨勢) ,(更新)和攻擊性駕駛的計數。下面是 Datacake 儀表板配置選項卡中的有效載荷解碼器代碼:
function Decoder(request) {
var data = JSON.parse(request.body);
var device = data.device;
var file = data.file;
var decoded = {};
decoded.pi_location = "(" + data.where_lat + "," + data.where_lon + ")";
//detect excessive speed, convert to mph, 30 mph for test purposes
//recommend higher (80 mph?) to detect excessive speeding
if ( (data.body.velocity * 2.23694) > 30.0 )
{
decoded.max_velocity = data.body.velocity * 2.23694;
}
if (file === "locations.qos") {
decoded.voltage = data.body.voltage;
decoded.motion = data.body.motion;
decoded.seconds = data.body.seconds;
} else if (file === "_session.qo") {
decoded.voltage = data.voltage;
} else if (file === "sensors.qo") {
// custom application code
decoded.faceID = data.body.faceID;
decoded.confidence = data.body.confidence;
decoded.seatbelt = data.body.seatbelt;
decoded.alcohol_detected = data.body.alcohol_detected;
//new aggressive driving data (hard acceleration and braking)
decoded.num_hard_accel = data.body.num_hard_accel;
decoded.num_hard_brake = data.body.num_hard_brake;
decoded.time = data.when;
}
if (("tower_lat" in data) && ("tower_lon" in data)) {
decoded.tower_location = "(" + data.tower_lat + "," + data.tower_lon + ")";
}
if (("where_lat" in data) && ("where_lon" in data)) {
decoded.device_location = "(" + data.where_lat + "," + data.where_lon + ")";
}
decoded.rssi = data.rssi;
decoded.bars = data.bars;
decoded.temp = data.temp;
decoded.orientation = data.orientation;
decoded.card_temperature = data.body.temperature;
// Array where we store the fields that are being sent to Datacake
var datacakeFields = []
// take each field from decodedElsysFields and convert them to Datacake format
for (var key in decoded) {
if (decoded.hasOwnProperty(key)) {
datacakeFields.push({field: key.toUpperCase(), value: decoded[key], device: device})
}
}
// forward data to Datacake
return datacakeFields;
}
Datacake 在可視化數據方面做得很好,如下所示:
儀表板識別駕駛員,如果他們系了安全帶,車速(可以設置一個閾值,所以你只看到他們是否超速),安全帶趨勢(如果他們在整個駕駛過程中都系著安全帶),檢測到酒精趨勢(和上次讀數)、地圖上的位置信息、(更新)以及駕駛員加速和猛踩剎車的次數。如果您需要任何這些行為的即時警報,Notehub.io有一個Twilio 路由選項,因此您可以接收短信(例如,如果檢測到酒精)。我沒有在這個演示中實現它,但它是未來的一種可能性。
添加加速度計
如前所述,廣播中關于激進駕駛導致事故的報道啟發我在硬件中添加加速度計傳感器以跟蹤激進駕駛行為。我在他們的 Grove 套件中放置了一個 Seeed Studio Grove 加速度計,通過 Notecarrier Pi HAT 上的 Grove 連接器,這是一個非常簡單的連接。
我用雙面膠帶固定加速度計,Y 面朝前(俯仰),X 面朝另一邊(滾動),Z 面朝上。我在 Seeed Studio 網站上找到了一些 Python 代碼,經過一些修改后,我的測試按預期運行。然后,我在路上進行設置并四處行駛,以測試加速度計如何檢測怠速的汽車、正常駕駛以及急加速和制動。我對數據中不同階段的獨特性感到驚喜:
不出所料,當我空閑時,數據幾乎沒有變化。當我開車時,數據有一點變化。但是當我激進地駕駛時,你可以清楚地看到當我加速時正方向的尖峰和當我在 Y 軸上踩剎車時的負方向尖峰(黃色圖),這是俯仰。這是有道理的,因為如果您快速加速或減速,那是變化最大的軸。所以我簡單地在y軸數據上設置了一個閾值。如果大于 10000 或小于 0,則說明駕駛員駕駛過于激進。我設置了計數器來跟蹤硬停止和啟動的次數,并將其傳遞給Notehub.io并將其路由到 Datacake。如果您想添加額外的檢查,您甚至可以跟蹤急轉彎。我沒有在圖表上標記它,但 x 軸(灰色圖)顯示我在這個數據集中進行了 3 次右轉。您可以看到數據中的 3 個(小)尖峰。如果我要更積極地進行這些轉彎,那么這些尖峰將更加明顯并且很容易達到閾值。我將我的代碼范圍限制在硬加速和剎車上。
最后的想法
這是一個我認為相當簡單的項目,但隨著我對車禍及其原因的研究越來越多,它變得越來越復雜。我對識別我的模型的性能以及我是否系好安全帶感到滿意。酒精傳感器也表現出色。只需喝一口啤酒并正常呼吸,傳感器就會觸發檢測酒精的閾值。加速度計也表現出色。我在為 Notecard 設置正確參數時遇到了一些挑戰,但一旦我這樣做了,結果看起來相當不錯。感謝 Rob Lauer 和 Blues Wireless 的支持團隊一直以來的幫助。總體而言,Blues Wireless Notecard 具有很多功能,我期待在未來的項目中嘗試使用它。
這個項目的巧妙之處在于沒有圖像被發送到任何地方,所以它是安全的。Raspberry Pi 上本地存儲了一張調試照片(以確認相機正在查看的內容),但可以在代碼中將其禁用。否則,唯一發送到 Notehub 和 Datacake 的只是元數據!
我確實想評論的一件事是一些限制。第一:太陽。特別是在新英格蘭的冬天,太陽在天空中的角度很低。根據您駕駛的方向,Raspberry Pi 攝像頭可能會被陽光遮擋,從而導致無法檢測到駕駛員和安全帶。這也許可以通過不同的傳感器(ToF、毫米波雷達?)來解決。但在大多數情況下,這不是問題。第二:我的模型只有我自己和安全帶的課程。如果需要考慮其他驅動因素,則需要進行類似的數據收集和標記(以及模型更新)。第三,我只在車上收集數據。如果您有車隊,則需要為每種車輛類型收集數據(因為每輛車的安全帶位置不同)。當我在我妻子的車里測試我的代碼時,我很容易被識別出來,但安全帶卻沒有。此外,由于這是基于 EO 相機的系統,因此無法在黑暗中工作。也許我可以用用于夜間駕駛的NoIR 攝像頭,但我只將范圍限制在白天。這可能是未來的增強。最后,酒精傳感器可以檢測多種類型的酒精,包括洗手液,所以你可能會得到誤報。不過,進一步細化傳感器讀數可能會過濾掉它。
如果您讀到了這篇文章的結尾,感謝您的閱讀。我希望你喜歡。我很高興我能夠解決導致大多數致命事故的幾個因素:超速、攻擊性駕駛、酗酒和不系安全帶。我希望這能激發未來的生產產品,以降低道路風險,以“建設更智能的世界”。
- 可緩解潮熱癥狀的開源項目
- 關于避免兒童/成人車輛事故的開源項目
- 用于事故檢測和報告的自動化施工PPE開源
- 風險戰斗模擬器開源分享
- 鐵路站臺事故預防系統開源分享
- 實時跟蹤和事故檢測系統開源項目
- 開源網絡協議分析器WireShark軟件下載 15次下載
- 電子電器觸電風險評估模型及其實驗 9次下載
- 軌道交通加氫站的風險評估模型 6次下載
- 基于DBSCAN算法的鐵路恐怖襲擊風險模型 5次下載
- 可提高瓦斯風險預測準確率的ELM模型 2次下載
- 城市軌道交通工程施工安全事故聚類分析綜述 7次下載
- 流域重金屬生態風險評估系統模型綜述 4次下載
- 輸電網風險評估研究 0次下載
- 采用FARM_AC前端模塊的離線式電源介紹 0次下載
- 120型空氣控制閥半自動緩解閥的基本結構及作用原理 3352次閱讀
- 前沿開源技術領域的開源大數據一一解讀 1005次閱讀
- 如何在Linux上模擬和緩解DDoS攻擊 1075次閱讀
- 和大家聊聊IC芯片驗證中的風險 1444次閱讀
- 使用FPGA量身定制的安全性 625次閱讀
- 如何智能識別安全漏洞和網絡風險行為? 1863次閱讀
- 為什么電池會爆炸?如何降低爆炸事故率 3689次閱讀
- 事故照明工作電源自動切換控制電路 5178次閱讀
- 電網事故及告警類信號的介紹 1.2w次閱讀
- NASA的開源軟件是什么?NASA的開源軟件的詳細分析 7186次閱讀
- 基于碰撞緩解的自動駕駛控制設計 4214次閱讀
- 從發布過程以及使用權限的角度入手,對各個常見開源協議進行解析 727次閱讀
- 特斯拉再撞車起火_特斯拉車禍再致命細節分析_特斯拉model s值得買嗎 4770次閱讀
- 公布Uber視頻還原事故真相_自動駕駛安全嗎 3965次閱讀
- 鋁空氣電池工作原理_鋁空氣電池致命缺點 5.5w次閱讀
下載排行
本周
- 1SMD LED選型手冊 貼片燈珠
- 5.47 MB | 3次下載 | 免費
- 2加密芯片的一種破解方法和對應加密方案改進設計
- 0.29 MB | 1次下載 | 免費
- 3多功能MPU芯片GC9005數據手冊
- 2.67 MB | 1次下載 | 免費
- 4碳化硅逆變焊機基本產品介紹
- 7.35 MB | 1次下載 | 免費
- 5基本半導體產品在Sic逆變焊機中的應用
- 7.27 MB | 1次下載 | 免費
- 6基本半導體產品在125kW工商業儲能PCS中的應用
- 10.74 MB | 1次下載 | 免費
- 7MOSFET參數解讀
- 1.59 MB | 1次下載 | 2 積分
- 8550W充電機原理圖
- 0.13 MB | 1次下載 | 6 積分
本月
- 1使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 23314A函數發生器維修手冊
- 16.30 MB | 13次下載 | 免費
- 3美的電磁爐維修手冊大全
- 1.56 MB | 9次下載 | 5 積分
- 4STM32F101x8/STM32F101xB手冊
- 1.69 MB | 8次下載 | 1 積分
- 5使用TL431設計電源
- 0.67 MB | 7次下載 | 免費
- 6感應筆電路圖
- 0.06 MB | 7次下載 | 免費
- 7不對稱半橋(AHB)反激變換器的分析與設計
- 0.68 MB | 6次下載 | 1 積分
- 8LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 5次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多