基于OpenCV的實時睡意檢測系統(tǒng)
共 3652字,需瀏覽 8分鐘
·
2024-06-23 10:05
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達
該系統(tǒng)可以檢測一個人在開車時是否困倦,如果有的話,可以通過使用語音消息實時提醒他。該系統(tǒng)使用網(wǎng)絡(luò)攝像頭和電話攝像頭進行實時數(shù)據(jù)傳輸。
01.研究目的
根據(jù)國家公路交通安全管理局的數(shù)據(jù),每年均涉及疲勞駕駛事故中導(dǎo)致超過1,550人死亡和71,000人受傷,但是實際數(shù)字可能要高得多[1]。因此,為了避免這類事故的發(fā)生,我們制作了這個系統(tǒng)。它通過檢查人的眼睛是否閉合或正在打哈欠來預(yù)測眼睛和嘴巴的標(biāo)志,從而確定一個人是否正處于疲勞駕駛。
02.主要內(nèi)容
該系統(tǒng)的工作可以分為兩個部分:
1. 檢測或定位面部。
2. 預(yù)測檢測到的面部中重要區(qū)域的地標(biāo)。
一旦預(yù)測出結(jié)果,我們僅使用眼睛地標(biāo)和嘴部地標(biāo)來確定人的眼睛長寬比(EAR)和嘴部長寬比(MAR),以檢查人是否困倦。EAR和MAR的計算如下所示:
from scipy.spatial import distance as distdef eye_aspect_ratio(eye):# Vertical eye landmarksA = dist.euclidean(eye[1], eye[5])B = dist.euclidean(eye[2], eye[4])# Horizontal eye landmarksC = dist.euclidean(eye[0], eye[3])# The EAR EquationEAR = (A + B) / (2.0 * C)return EARdef mouth_aspect_ratio(mouth):A = dist.euclidean(mouth[13], mouth[19])B = dist.euclidean(mouth[14], mouth[18])C = dist.euclidean(mouth[15], mouth[17])MAR = (A + B + C) / 3.0return MAR
現(xiàn)在,既然有了代碼,讓我們了解一下代碼是如何工作的:
dlib庫內(nèi)部的預(yù)訓(xùn)練面部界標(biāo)檢測器用于估計映射到面部面部結(jié)構(gòu)的68-(x,y)坐標(biāo)的位置[2]。這些68-(x,y)坐標(biāo)表示臉部的重要區(qū)域,例如嘴巴,左眉,右眉,左眼,右眼,鼻子和下巴。其中,我們只需要左眼,右眼和嘴巴的(x,y)坐標(biāo):
# Grab the indexes of the facial landamarks for the left and right eye respectively(lstart, lend) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"](rstart, rend) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"](mstart, mend) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"]
現(xiàn)在,每只眼睛都由一組6-(x,y)坐標(biāo)表示,該坐標(biāo)從眼睛的左上角開始(就像您在看那個人一樣),然后圍繞該區(qū)域的其余部分順時針旋轉(zhuǎn)[3]。:
左上:當(dāng)眼睛睜開時,眼睛界標(biāo)的可視化。右上:閉上眼睛時的眼睛地標(biāo)。底部:繪制隨時間變化的眼睛縱橫比。眼睛縱橫比的下降表示眨眼[3](Soukupová和?ech的圖1)。[4]
基于論文Real-Time Eye Blink Detection using Facial Landmarks[5],我們可以得出一個反映這種關(guān)系的方程,稱為眼睛縱橫比(EAR):
眼睛縱橫比(EAR)公式。
使用這個概念,我們計算了嘴長寬比:
用68-(x,y)坐標(biāo)表示人臉
正如我們看到的,嘴由一組20-(x,y)坐標(biāo)表示。因此,我們已使用坐標(biāo)62、64、66和68來計算兩者之間的距離,方法與EAR計算相同。
結(jié)果
在人員困倦或打哈欠時發(fā)出警報
另外,為了保留證據(jù),我們保存了讓人昏昏欲睡的框架。
框架存儲在單獨的文件夾中作為證明
該圖顯示了EAR和MAR隨時間的變化
源代碼的GitHub鏈接可在此處獲得:https://github.com/fear-the-lord/Drowsiness-Detection
03.參考文獻
下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
下載2:Python視覺實戰(zhàn)項目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。
下載3:OpenCV實戰(zhàn)項目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
