需要源碼的朋友可以私信我
基于Dlib的疲勞檢測(cè)系統(tǒng)
1、設(shè)計(jì)背景及要求
隨著經(jīng)濟(jì)的飛速發(fā)展,貨運(yùn)行業(yè)的發(fā)展趨勢(shì)愈加迅猛,貨車駕駛員24h都留在車上的現(xiàn)象已成為行業(yè)常態(tài)。據(jù)國(guó)家統(tǒng)計(jì)局?jǐn)?shù)據(jù)顯示,近幾年的特大事故中,有超40%的事故是由于駕駛員疲勞駕駛造成的。為了減少疲勞駕駛導(dǎo)致的交通安全問(wèn)題,本系統(tǒng)旨在設(shè)計(jì)一款可以自動(dòng)實(shí)時(shí)檢測(cè)駕駛員是否疲勞駕駛并發(fā)出警報(bào)的系統(tǒng)。
設(shè)計(jì)要求
(1) 設(shè)計(jì)并實(shí)現(xiàn)一個(gè)軟件界面,能夠?qū)崟r(shí)獲取人臉視頻;
(2) 使用OpenCV或Dlib庫(kù)實(shí)現(xiàn)人臉檢測(cè)和特征點(diǎn)標(biāo)定;
(3) 定義并提取與疲勞駕駛相關(guān)的人臉特征;
(4) 合理設(shè)計(jì)算法,實(shí)現(xiàn)駕駛員疲勞狀態(tài)檢測(cè),檢測(cè)到疲勞時(shí)發(fā)出預(yù)警;
(5) 測(cè)試系統(tǒng)性能,并分析
2、系統(tǒng)分析
通過(guò)攝像頭實(shí)時(shí)采集駕駛員的行為表情狀態(tài),判斷駕駛員的頭部姿態(tài),眼睛閉合頻率和單位時(shí)間打哈欠的次數(shù)來(lái)判斷駕駛員的疲勞程度。
3、系統(tǒng)設(shè)計(jì)
3.1功能結(jié)構(gòu)圖
功能結(jié)構(gòu)圖設(shè)計(jì):
本系統(tǒng)通過(guò)收集人臉朝向、人臉位置、瞳孔朝向、眼睛開(kāi)合度、眨眼頻率等數(shù)據(jù),提取駕駛員面部68個(gè)特征點(diǎn)及其坐標(biāo),準(zhǔn)確定位駕駛員人臉的位置,并利用眼部的12個(gè)特征點(diǎn)計(jì)算眼部長(zhǎng)寬比EAR,根據(jù)嘴部的6個(gè)特征點(diǎn)計(jì)算嘴巴的MAR,利用其他坐標(biāo)結(jié)合HPE算法計(jì)算頭部轉(zhuǎn)動(dòng)的歐拉角。將這些數(shù)據(jù)分別與對(duì)應(yīng)的閾值比較,從而統(tǒng)計(jì)出駕駛員眨眼、打哈欠和點(diǎn)頭的次數(shù)。通過(guò)對(duì)駕駛員眨眼、打哈欠、點(diǎn)頭次數(shù)的統(tǒng)計(jì),可實(shí)時(shí)判斷駕駛員的注意力集中程度,分析駕駛員是否疲勞駕駛,并及時(shí)作出安全提示。
3.2基于EAR、MAR和HPE算法的疲勞檢測(cè)
3.2.1基于EAR算法的眨眼檢測(cè)
當(dāng)人眼睜開(kāi)時(shí),EAR在某個(gè)值域范圍內(nèi)波動(dòng),當(dāng)人眼閉合時(shí),EAR迅速下降,理論上接近于0。當(dāng)EAR低于某個(gè)閾值時(shí),眼睛處于閉合狀態(tài);當(dāng)EAR由某個(gè)值迅速下降至小于該閾值,再迅速上升至大于該閾值,則判斷為一次眨眼。為檢測(cè)眨眼次數(shù),需要設(shè)置同一次眨眼的連續(xù)幀數(shù)。眨眼速度較快,一般1~3幀即可完成眨眼動(dòng)作。
3.2.2基于MAR算法的哈欠檢測(cè)
基于MAR算法的哈欠檢測(cè),利用Dlib提取嘴部的6個(gè)特征點(diǎn),通過(guò)這6個(gè)特征點(diǎn)的坐標(biāo)(51、59、53、57的縱坐標(biāo)和49、55的橫坐標(biāo))來(lái)計(jì)算打哈欠時(shí)嘴巴的張開(kāi)程度。當(dāng)一個(gè)人說(shuō)話時(shí),點(diǎn)51、59、53、57的縱坐標(biāo)差值增大,從而使MAR值迅速增大,反之,當(dāng)一個(gè)人閉上嘴巴時(shí),MAR值迅速減小。
3.3.3基于HPE算法的點(diǎn)頭檢測(cè)
HPE(Head Pose Estimation, HPE)算法步驟 :2D人臉關(guān)鍵點(diǎn)檢測(cè),3D人臉模型匹配,求解 3D點(diǎn)和對(duì)應(yīng)2D點(diǎn)的轉(zhuǎn)換關(guān)系,根據(jù)旋轉(zhuǎn)矩陣求解歐拉角。檢測(cè)過(guò)程中需要使用世界坐標(biāo)系(UVW)、相機(jī)坐標(biāo)系(XYZ)、圖像中心坐標(biāo)系(uv)和像素坐標(biāo)系(xy)。
世界坐標(biāo)系轉(zhuǎn)換到相機(jī)坐標(biāo)系:
相機(jī)坐標(biāo)系轉(zhuǎn)換到像素坐標(biāo)系:
像素坐標(biāo)系與世界坐標(biāo)系的關(guān)系為:
圖像中心坐標(biāo)系轉(zhuǎn)換到像素坐標(biāo)系:
4、系統(tǒng)實(shí)現(xiàn)與調(diào)試
4.1初步實(shí)現(xiàn)
系統(tǒng)的關(guān)鍵就是對(duì)駕駛員的面部進(jìn)行識(shí)別,然后計(jì)算并統(tǒng)計(jì)出疲勞值,通過(guò)顯示屏把數(shù)據(jù)顯示在屏幕上給駕駛員看,如果駕駛員被判定為疲勞駕駛或者危險(xiǎn)駕駛系統(tǒng)就會(huì)立即進(jìn)行語(yǔ)音提醒。想要成功獲得人臉面部的68個(gè)特征點(diǎn),就必須先檢測(cè)到人臉的存在。調(diào)用Dlib中的正向人臉檢測(cè)器API,如果沒(méi)有檢測(cè)到人臉就會(huì)在屏幕上顯示“No Face”,控制臺(tái)輸出“沒(méi)有檢測(cè)到人臉”,這里用手遮住臉、臉轉(zhuǎn)向左右兩邊的幅度太大、人臉不在攝像頭的攝像范圍里,人臉距離攝像頭太遠(yuǎn)都算沒(méi)有檢測(cè)到人臉。
從視頻流進(jìn)行循環(huán),讀取圖片,并對(duì)圖片做維度擴(kuò)大,并進(jìn)灰度化,使用dlib獲得臉部位置以及臉部特征位置,將臉部特征信息轉(zhuǎn)換為數(shù)組array的格式,從而提取左眼和右眼坐標(biāo)。構(gòu)造函數(shù)計(jì)算左右眼的EAR值,使用平均值作為最終的EAR。類似的,獲得嘴部MAR值。分別計(jì)算左眼、右眼和嘴部的評(píng)分求平均作為最終的評(píng)分,如果小于閾值,則加1,如果連續(xù)3次都小于閾值,則表示進(jìn)行了一次眨眼活動(dòng);如果嘴部評(píng)分大于閾值,則表示一次打哈欠。
4.2具體實(shí)現(xiàn)過(guò)程
基于上述程序基礎(chǔ),添加可視化界面,增加系統(tǒng)交互性。利用wx進(jìn)行界面搭建,設(shè)置視頻源,可選擇攝像頭或視頻文件導(dǎo)入,提供實(shí)時(shí)檢測(cè)和文件檢測(cè)功能;添加疲勞檢測(cè)參數(shù)設(shè)置,可自行勾選檢測(cè)參數(shù)以及疲勞時(shí)間調(diào)整,檢測(cè)條件更加靈活;狀態(tài)輸出欄可查看歷史狀態(tài),追溯用戶歷史數(shù)據(jù),為事故調(diào)查提供條件。如圖7為 UI界面。
后添加點(diǎn)頭檢測(cè)增加系統(tǒng)精度,本系統(tǒng)根據(jù)計(jì)算歐拉角判斷駕駛員的點(diǎn)頭次數(shù),這里涉及歐拉角的三個(gè)角,分別是 Pitch(繞X軸旋轉(zhuǎn)),Yaw(繞Y軸旋轉(zhuǎn)),Roll(繞Z軸旋轉(zhuǎn)),一個(gè)物體對(duì)于相機(jī)的姿態(tài)可以用旋轉(zhuǎn)矩陣(R)和平移矩陣(T)來(lái)表示。人臉2D與3D之間的仿射變換矩陣包含了頭部旋轉(zhuǎn)和平移信息,可以直接調(diào)用OpenCV的solvePnp()函數(shù)求解得出旋轉(zhuǎn)和平移向量,最終利用得到的旋轉(zhuǎn)矩陣來(lái)求解歐拉角。當(dāng)在某一個(gè)時(shí)間段10s內(nèi),駕駛員的|Pitch|≥20或者|Roll|≥20的時(shí)間占比超過(guò)0.3時(shí),則判定駕駛員處于疲勞狀態(tài)。
5、系統(tǒng)實(shí)現(xiàn)與調(diào)試
本系統(tǒng)采用人臉追蹤和圖像處理相結(jié)合的方式采集面部圖像處理疲勞信息,利用面部疲勞特征判斷疲勞狀態(tài),以采集到的人臉圖像信息作為輸入,通過(guò)檢測(cè)算法輸出判斷結(jié)果,判斷為疲勞狀態(tài)后,系統(tǒng)發(fā)出警告。
本系統(tǒng)通過(guò)Dlib庫(kù)中的人臉識(shí)別和dat模型中的68個(gè)關(guān)鍵點(diǎn),結(jié)合EAR、MAR和HPE算法,判斷駕駛員是否眨眼、打哈欠、點(diǎn)頭,不僅實(shí)現(xiàn)了檢測(cè)指標(biāo)多樣化,還實(shí)現(xiàn)了實(shí)時(shí)檢測(cè)駕駛員疲勞狀態(tài)的目的,可用于貨車、汽車、出租車等機(jī)動(dòng)車輛,為駕駛員的生命安全增加一份保障。本系統(tǒng)的不足之處在于當(dāng)駕駛員面部有部分遮擋時(shí)就無(wú)法準(zhǔn)確判斷駕駛員是否處于疲勞駕駛狀態(tài),只會(huì)發(fā)出提示,提醒駕駛員“您已脫離攝像范圍”。因此,下一步的工作重點(diǎn)是如何解決在有遮擋情況下也能正確識(shí)別駕駛員精神狀態(tài)的問(wèn)題。
博客主頁(yè):https://blog.csdn.net/weixin_51141489,需要源碼或相關(guān)資料實(shí)物的友友請(qǐng)關(guān)注、點(diǎn)贊,私信吧!