Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]
1.圖片演示
2.視頻演示
[項(xiàng)目分享]Python基于OpenCV的實(shí)時(shí)疲勞檢測(cè)[源碼&演示視頻&部署教程]_嗶哩嗶哩_bilibili
3.檢測(cè)方法
1)方法
與用于計(jì)算眨眼的傳統(tǒng)圖像處理方法不同,該方法通常涉及以下幾種組合:
1、眼睛定位。
2、閾值找到眼睛的白色。
3、確定眼睛的“白色”區(qū)域是否消失了一段時(shí)間(表示眨眼)。
相反,眼睛長(zhǎng)寬比是一種更為優(yōu)雅的解決方案,它涉及基于眼睛面部輪廓之間的距離之比的非常簡(jiǎn)單的計(jì)算。
參考該博客,這種眨眼檢測(cè)方法快速,高效且易于實(shí)現(xiàn)。
(2)眼睛縱橫比
我們可以應(yīng)用臉部界標(biāo)檢測(cè)來定位臉部重要區(qū)域,包括眼睛,眉毛,鼻子,耳朵和嘴巴
這也意味著我們可以通過了解特定面部部分的索引來提取特定面部結(jié)構(gòu):
在眨眼檢測(cè)方面,我們只對(duì)兩套面部結(jié)構(gòu)感興趣:眼睛。
每只眼睛都由6 (x,y)坐標(biāo)表示,從坐標(biāo)的左角開始(就像您在看那個(gè)人一樣),然后沿該區(qū)域的其余部分順時(shí)針旋轉(zhuǎn):
基于此圖像,我們應(yīng)該取消關(guān)鍵點(diǎn):
這些坐標(biāo)的寬度和高度之間存在關(guān)系。
根據(jù)Soukupová和?ech在2016年的論文《使用面部地標(biāo)進(jìn)行實(shí)時(shí)眼睛眨眼檢測(cè)》的工作,我們可以得出一個(gè)反映這種關(guān)系的方程,稱為眼睛縱橫比(EAR):
其中p1,…,p6是2D面部界標(biāo)位置。
該方程的分子計(jì)算垂直眼界標(biāo)之間的距離,而分母計(jì)算水平眼界標(biāo)之間的距離,對(duì)分母進(jìn)行適當(dāng)加權(quán),因?yàn)橹挥幸唤M水平點(diǎn),但有兩組垂直點(diǎn)。
(3)眨眼檢測(cè)標(biāo)準(zhǔn)
睜開眼睛時(shí)眼睛的縱橫比大約是恒定的,但是當(dāng)眨眼時(shí)眼睛的縱橫比會(huì)迅速降至零。
使用這個(gè)簡(jiǎn)單的方程式,我們可以避免使用圖像處理技術(shù),而只需依靠眼睛界標(biāo)距離的比率來確定一個(gè)人是否在眨眼。
為了更清楚地說明這一點(diǎn),參考該博客:
圖: 左上:當(dāng)眼睛睜開時(shí),眼睛界標(biāo)的可視化。右上:閉上眼睛時(shí)的眼睛地標(biāo)。底部:繪制隨時(shí)間變化的眼睛縱橫比。眼睛縱橫比的下降表示眨眼
在左上角,我們的眼睛完全張開-此處的眼睛長(zhǎng)寬比會(huì)很大(r),并且隨著時(shí)間的推移會(huì)相對(duì)保持恒定。
但是,一旦眨眼(右上角),眼睛的寬高比就會(huì)急劇下降,接近零。
在底部圖中繪出了眼縱橫比隨時(shí)間的視頻剪輯的曲線圖。如我們所見,眼睛的縱橫比是恒定的,然后迅速下降到接近零,然后再次增加,表明已經(jīng)發(fā)生了一次眨眼。
在確定視頻流中是否發(fā)生眨眼時(shí),我們需要計(jì)算眼睛的寬高比。
如果眼睛的寬高比下降到某個(gè)閾值以下,然后又上升到該閾值以上,那么我們將注冊(cè)“眨眼”- EYE_AR_THRESH 是此閾值。我們將其默認(rèn)設(shè)置為0. 3 因?yàn)檫@對(duì)我的應(yīng)用程序最有效,但是您可能需要針對(duì)自己的應(yīng)用程序進(jìn)行調(diào)整。
# 遍歷每一幀 while True:# 預(yù)處理frame = vs.read()[1]if frame is None:break(h, w) = frame.shape[:2]width=1200r = width / float(w)dim = (width, int(h * r))frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 檢測(cè)人臉rects = detector(gray, 0)# 遍歷每一個(gè)檢測(cè)到的人臉for rect in rects:# 獲取坐標(biāo)shape = predictor(gray, rect)shape = shape_to_np(shape)# 分別計(jì)算ear值leftEye = shape[lStart:lEnd]rightEye = shape[rStart:rEnd]leftEAR = eye_aspect_ratio(leftEye)rightEAR = eye_aspect_ratio(rightEye)# 算一個(gè)平均的ear = (leftEAR + rightEAR) / 2.0# 繪制眼睛區(qū)域leftEyeHull = cv2.convexHull(leftEye)rightEyeHull = cv2.convexHull(rightEye)cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1)cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1)# 檢查是否滿足閾值if ear < EYE_AR_THRESH:COUNTER += 1else:# 如果連續(xù)幾幀都是閉眼的,總數(shù)算一次if COUNTER >= EYE_AR_CONSEC_FRAMES:TOTAL += 1# 重置COUNTER = 0# 顯示cv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.imshow("Frame", frame)key = cv2.waitKey(10) & 0xFFif key == 27:breakvs.release() cv2.destroyAllWindows()然后我們有一個(gè)重要的常數(shù), EYE_AR_CONSEC_FRAME —此值設(shè)置為 3 表示連續(xù)三個(gè)幀的眼睛長(zhǎng)寬比小于EYE_AR_THRESH 必須進(jìn)行眨眼才能注冊(cè)眨眼。
同樣,根據(jù)流水線的幀處理吞吐率,您可能需要為自己的實(shí)現(xiàn)提高或降低此數(shù)字。
第44和45行初始化兩個(gè)計(jì)數(shù)器。柜臺(tái) 是眼睛長(zhǎng)寬比小于的連續(xù)幀的總數(shù) EYE_AR_THRESH 盡管 全部的 是腳本運(yùn)行期間發(fā)生的總閃爍次數(shù)。
完整源碼&環(huán)境部署視頻教程&自定義UI界面
參考博客《Python基于OpenCV的實(shí)時(shí)疲勞檢測(cè)[源碼&演示視頻&部署教程]》
4.參考文獻(xiàn)
[1] 汪明明,林小竹.基于OpenCV人眼定位的人臉檢測(cè)方法[D].北京石油化工學(xué)院.2012(12).
[2] 傅亞煌,黃鳴宇.基于眼動(dòng)特性的機(jī)動(dòng)車駕駛疲勞系統(tǒng)[J].電腦與信息技術(shù).2013(2).
[3] 王奕直,周凌霄,孔萬增.基于Adaboost的疲勞駕駛眨眼檢測(cè)[D].杭州電子科技大學(xué)學(xué)報(bào).2013(8).
[4] 張旭,李亞利,陳晨,王生進(jìn),丁曉青.嵌入式駕駛員狀態(tài)檢測(cè)算法的實(shí)現(xiàn)與優(yōu)化[J].自動(dòng)化學(xué)報(bào).2012(12).
[5] 趙鐘.駕駛員疲勞檢測(cè)方法研究及嵌入式實(shí)現(xiàn)[D]. 大連海事大學(xué).2010(6).
[6] 徐淑峰,孫煒,趙峰,張忠.Adaboost人臉檢測(cè)算法在嵌入式平臺(tái)上的優(yōu)化與實(shí)現(xiàn)[D].上海交通大學(xué)微電子學(xué)院.2008(6).
[7] 牛慧萍.基于DSP的人眼狀態(tài)信息檢測(cè)系統(tǒng)的研究和設(shè)計(jì).[D].沈陽理工大學(xué).2010(3).
[8] 鄭玉鐸.田楊萌.靳薇.基于Adaboost 和ASM 算法的人眼定位.[J] .北京信息科技大學(xué)學(xué)報(bào).2013(6).
[9] 郭純宏.基于嵌入式的人眼信息檢測(cè)系統(tǒng)研究.[D].沈陽理工大學(xué).2011(3).
[10] 王洪濤.駕駛疲勞測(cè)評(píng)方法研究及其DSP實(shí)現(xiàn).[D].武漢理工大學(xué).2007(5).
[11] 向本科.基于人眼檢測(cè)的駕駛員疲勞檢測(cè)研究.[D].西南大學(xué).2010(5).
[12] 常瑜亮.基于DSP的疲勞駕駛檢測(cè)系統(tǒng)硬件設(shè)計(jì)與實(shí)現(xiàn). [D].沈陽理工大學(xué).2010(3).
[13] 李文磊.基于DSP的疲勞駕駛實(shí)時(shí)監(jiān)測(cè)系統(tǒng)研究.[D] .南京理工大學(xué).2007(6).
總結(jié)
以上是生活随笔為你收集整理的Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写运维实习生第五周实习周报,包括心得体会
- 下一篇: python 归一化使用