日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

怎么用Python实现驾驶员疲劳检测

發(fā)布時間:2023/12/15 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 怎么用Python实现驾驶员疲劳检测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章主要講解了“怎么用Python實(shí)現(xiàn)駕駛員疲勞檢測”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用Python實(shí)現(xiàn)駕駛員疲勞檢測”吧!

先決條件

該P(yáng)ython項(xiàng)目需要一個網(wǎng)絡(luò)攝像頭,用于捕獲圖像。您需要在系統(tǒng)上安裝Python(建議使用3.6版),然后使用pip安裝所需的軟件包。

  • OpenCV – 使用pip安裝opencv-python(面部和眼部檢測)。

  • TensorFlow – 使用pip安裝tensorflow(keras使用TensorFlow作為后端)。

  • Keras – 使用pip安裝keras(建立分類模型)。

  • Pygame – 使用pip安裝pygame(播放警告提示音)。

數(shù)據(jù)集

需要創(chuàng)建用于此模型的數(shù)據(jù)集。為創(chuàng)建數(shù)據(jù)集,我們編寫了一個腳本來捕獲攝像機(jī)中的人眼圖像并將其存儲在本地磁盤中,將人眼圖像分為“睜開”或“閉合”狀態(tài)兩類,通過刪除構(gòu)建模型不需要的圖像來手動清理數(shù)據(jù)。

數(shù)據(jù)包括大約7000張?jiān)诓煌庹諚l件下的人眼圖像。在數(shù)據(jù)集上訓(xùn)練模型后,我們附加了最終權(quán)重和模型結(jié)構(gòu)文件“models /cnnCat2.h6”。現(xiàn)在,你可以使用此模型按人眼睜開還是閉合對圖像進(jìn)行分類。

模型結(jié)構(gòu)

我們使用的模型是Keras通過卷積神經(jīng)網(wǎng)絡(luò)(CNN)構(gòu)建的。卷積神經(jīng)網(wǎng)絡(luò)是一種特殊類型的深度神經(jīng)網(wǎng)絡(luò),在圖像分類方面表現(xiàn)非常出色。

CNN基本上由一個輸入層、一個輸出層和一個可以包含多個層的隱藏層組成。通過過濾器在這些層上執(zhí)行卷積運(yùn)算,該濾波器在層和過濾器上執(zhí)行2D矩陣乘法。

CNN模型結(jié)構(gòu)包括以下幾層:

  • 卷積層;32個節(jié)點(diǎn),內(nèi)核大小為3

  • 卷積層;32個節(jié)點(diǎn),內(nèi)核大小為3

  • 卷積層;64個節(jié)點(diǎn),內(nèi)核大小為3

  • 完全連接層;128個節(jié)點(diǎn)

最后一層也是具有2個節(jié)點(diǎn)的完全連接層。在所有層中,除了使用Softmax的輸出層外,均使用Relu激活函數(shù)。

Python項(xiàng)目進(jìn)行駕駛員疲勞檢測的步驟

從zip下載python項(xiàng)目源代碼并提取系統(tǒng)中的文件:Python項(xiàng)目Zip文件。

zip的目錄為:

1.“haar級聯(lián)文件/ cascade files”文件夾包含從圖像中檢測對象所需的xml文件。在本案例中,需要檢測人臉和人眼。

2.模型文件夾包含我們的模型文件“cnnCat2.h6”,該文件是在卷積神經(jīng)網(wǎng)絡(luò)上進(jìn)行訓(xùn)練的。

3.我們有一段音頻“alarm.wav”,用于在駕駛員昏昏欲睡時播放。

4.“Model.py”文件包含一個程序,通過該程序?qū)?shù)據(jù)集進(jìn)行訓(xùn)練來構(gòu)建分類模型。您可以從此文件中了解卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行情況。

5.“Drowsinessdetection.py”是本項(xiàng)目的主要文件。開始檢測時,我們必須要運(yùn)行此文件。

接下來。讓我們逐步了解該算法是怎么工作的。

第1步-從相機(jī)中獲取圖像作為輸入

使用網(wǎng)絡(luò)攝像頭獲取圖像作為輸入。為了訪問網(wǎng)絡(luò)攝像頭,我們進(jìn)行了無限循環(huán)以捕獲每一幀。我們使用OpenCV提供的方法cv2.VideoCapture(0)來訪問攝像機(jī)并設(shè)置捕獲對象(cap)。cap.read()將讀取每一幀,并將圖像存儲在幀變量中。

第2步-檢測圖像中的臉部并創(chuàng)建一個感興趣區(qū)(ROI)

為了檢測圖像中的人臉,首先需要將圖像模式轉(zhuǎn)換為灰度,因?yàn)橛糜趯ο髾z測的OpenCV算法需要輸入灰度圖像。因此無需顏色信息即可檢測物體。

我們將使用haar級聯(lián)分類器來檢測人臉。通過face =cv2.CascadeClassifier('抵達(dá)haar級聯(lián)xml文件的路徑')設(shè)置分類器,然后使用faces =face.detectMultiScale(gray)執(zhí)行檢測。進(jìn)而產(chǎn)生帶有x、y坐標(biāo)以及高度(對象邊界框的寬度)的檢測數(shù)組?,F(xiàn)在我們可以迭代這些臉并為每張人臉繪制邊界框。

for(x,y,w,h)infaces:cv2.rectangle(frame,(x,y),(x+w,y+h),(100,100,100),1)

第3步-從ROI中檢測人眼并將其輸入分類器

檢測人臉的過程也同樣適用于檢測人眼。

首先,我們分別在leye和reye中為眼睛設(shè)置級聯(lián)分類器,然后使用left_eye =leye.detectMultiScale(gray)來檢測人眼?,F(xiàn)在,我們只需要從完整圖像中提取出人眼數(shù)據(jù)即可。這可以通過提取眼睛的邊界框來實(shí)現(xiàn),然后可以使用此代碼從幀中提取眼睛圖像。

l_eye=frame[y:y+h,x:x+w]

l_eye僅包含左眼的圖像數(shù)據(jù)。這將被輸入到CNN分類器中,該分類器將預(yù)測眼睛是處于睜開還是閉合狀態(tài)。同樣,我們將右眼的數(shù)據(jù)提取到r_eye中。

第4步-分類器將按睜開或閉合對眼睛進(jìn)行分類。

使用CNN分類器預(yù)測眼睛狀態(tài)。因?yàn)槟P托枰獜恼_的維度開始,因此將圖像輸入模型之前需要執(zhí)行一些操作。

首先,使用r_eye = cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY)將彩色圖像轉(zhuǎn)換為灰度圖像。

然后,由于模型是在24 * 24像素的圖像上測試,需要將圖像也調(diào)整為24 * 24像素:

cv2.resize(r_eye,(24,24))。我們將數(shù)據(jù)標(biāo)準(zhǔn)化以實(shí)現(xiàn)更好的收斂性:r_eye = r_eye/ 255(所有值都在0-1之間)。擴(kuò)展維度以輸入到分類器中。使用model = load_model(‘models / cnnCat2.h6’)來加載模型。

現(xiàn)在我們用模型預(yù)測每只眼睛的狀態(tài):lpred =model.predict_classes(l_eye)。如果lpred [0]= 1,則說明眼睛是睜開的;如果lpred [0]= 0,則說明眼睛是閉合的。

第5步-計(jì)算分?jǐn)?shù)判斷駕駛員是否處于疲勞狀態(tài)

分?jǐn)?shù)基本上是一個值,用于確定駕駛員閉眼的時長。因此,如果雙眼都閉合,得分將不斷增加,而雙眼睜開時,得分將降低。使用cv2.putText()函數(shù)在屏幕上繪制結(jié)果,該函數(shù)將顯示駕駛員的實(shí)時狀態(tài)。

cv2.putText(frame,“Open”,(10,height-20),font,1,(255,255,255),1,cv2.LINE_AA)

閾值由以下方法確定:例如,如果得分大于15意味著該駕駛員閉眼時間較長,則閾值為15。此時,我們將使用sound.play()發(fā)出警報(bào)。

主要文件的源代碼如下:

importcv2importosfromkeras.modelsimportload_modelimportnumpyasnpfrompygameimportmixerimporttimemixer.init()sound=mixer.Sound('alarm.wav')face=cv2.CascadeClassifier('haarcascadefiles\haarcascade_frontalface_alt.xml')leye=cv2.CascadeClassifier('haarcascadefiles\haarcascade_lefteye_2splits.xml')reye=cv2.CascadeClassifier('haarcascadefiles\haarcascade_righteye_2splits.xml')lbl=['Close','Open']model=load_model('models/cnncat2.h6')path=os.getcwd()cap=cv2.VideoCapture(0)font=cv2.FONT_HERSHEY_COMPLEX_SMALLcount=0score=0thicc=2rpred=[99]lpred=[99]
while(True):ret,frame=cap.read()height,width=frame.shape[:2]gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)faces=face.detectMultiScale(gray,minNeighbors=5,scaleFactor=1.1,minSize=(25,25))left_eye=leye.detectMultiScale(gray)right_eye=reye.detectMultiScale(gray)cv2.rectangle(frame,(0,height-50),(200,height),(0,0,0),thickness=cv2.FILLED)for(x,y,w,h)infaces:cv2.rectangle(frame,(x,y),(x+w,y+h),(100,100,100),1)for(x,y,w,h)inright_eye:r_eye=frame[y:y+h,x:x+w]count=count+1r_eye=cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY)r_eye=cv2.resize(r_eye,(24,24))r_eye=r_eye/255r_eye=r_eye.reshape(24,24,-1)r_eye=np.expand_dims(r_eye,axis=0)rpred=model.predict_classes(r_eye)if(rpred[0]==1):lbl='Open'if(rpred[0]==0):lbl='Closed'breakfor(x,y,w,h)inleft_eye:l_eye=frame[y:y+h,x:x+w]count=count+1l_eye=cv2.cvtColor(l_eye,cv2.COLOR_BGR2GRAY)l_eye=cv2.resize(l_eye,(24,24))l_eye=l_eye/255l_eye=l_eye.reshape(24,24,-1)l_eye=np.expand_dims(l_eye,axis=0)lpred=model.predict_classes(l_eye)if(lpred[0]==1):lbl='Open'if(lpred[0]==0):lbl='Closed'breakif(rpred[0]==0andlpred[0]==0):score=score+1cv2.putText(frame,"Closed",(10,height-20),font,1,(255,255,255),1,cv2.LINE_AA)#if(rpred[0]==1orlpred[0]==1):else:score=score-1cv2.putText(frame,"Open",(10,height-20),font,1,(255,255,255),1,cv2.LINE_AA)if(score<0):score=0cv2.putText(frame,'Score:'+str(score),(100,height-20),font,1,(255,255,255),1,cv2.LINE_AA)if(score>15):#personisfeelingsleepysowebeepthealarmcv2.imwrite(os.path.join(path,'image.jpg'),frame)try:sound.play()except:#isplaying=Falsepassif(thicc<16):thicc=thicc+2else:thicc=thicc-2if(thicc<2):thicc=2cv2.rectangle(frame,(0,0),(width,height),(0,0,255),thicc)cv2.imshow('frame',frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()

Python項(xiàng)目示例

開始項(xiàng)目,查看項(xiàng)目運(yùn)作情況。要啟動該項(xiàng)目,需要打開命令提示符,轉(zhuǎn)到主文件“ drowsinessdetection.py”所在的目錄。使用如下命令運(yùn)行腳本。

python“drowsinessdetection.py”

可能需要幾秒鐘來打開網(wǎng)絡(luò)攝像頭并開始檢測。

示例截圖:

總結(jié)

以上是生活随笔為你收集整理的怎么用Python实现驾驶员疲劳检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 深爱开心激情 | 激情在线观看视频 | 亚洲每日在线 | 日本xx片| 欧美精品成人久久 | av第一福利大全导航 | 黄色aaaaa| 91成年人视频 | 欧美日韩人妻精品一区二区三区 | 一区二区中文字幕 | 亚洲手机av| 亚洲乱论| 久久精品免费网站 | 国产精品久久久久久久无码 | 日韩不卡视频一区二区 | 91在线看 | 三级网站免费 | 国精产品一区二区三区 | 永久免费在线观看视频 | 久久3p| 久久无吗视频 | 日韩 国产 一区 | 国产亚洲精品久久久久久打不开 | 无码一区二区三区 | 国产精品一区二区精品 | 最新激情网 | 亚av| 少妇闺蜜换浪荡h肉辣文 | 超碰在线影院 | 日韩在线激情 | 人妻少妇精品视频一区二区三区 | 波多野结衣在线一区 | 一区二区三区免费在线 | 欧美国产一级 | 日批免费观看 | 国产美女引诱水电工 | 国产激情免费 | 欧美日韩国产色 | 免费黄色视屏 | 欧美激情五月 | 亚洲精品一区三区三区在线观看 | 热久久久 | 国产乱码精品一区二区三区五月婷 | 国产精品男同 | 精品在线你懂的 | 亚洲第三区 | 日韩精品电影在线 | 色av一区二区 | 欧美激情在线狂野欧美精品 | 日本三级精品 | 成人免费黄色网 | 在线一区二区三区四区 | 少妇中文字幕 | www,久久久 | 极品久久久 | 国产福利片在线 | 久久久精品亚洲 | 麻豆成人久久精品一区二区三区 | 免费av网址在线观看 | 国产91页 | 色婷综合 | 欧美一区二区三区大屁股撅起来 | 天堂av8在线 | 欧美一卡二卡三卡 | 欧美日韩亚洲国产一区 | 精品在线91 | 亚洲欧美bt | 中文字幕乱码人妻二区三区 | 天天av天天干 | 先锋影音久久 | 牛牛av国产一区二区 | 香蕉视频一区二区三区 | 日日操夜夜干 | 男人天堂视频在线 | 日韩精品电影一区二区三区 | 日美女逼逼 | 99热最新在线 | 狠狠澡 | 亚洲人成免费 | 欧美日韩亚洲在线观看 | 爽爽影院在线 | 国产在线精品一区二区三区 | 美女脱衣服一干二净 | 精品人妻一区二区三区潮喷在线 | 亚洲黄色免费电影 | 黄色小视频免费观看 | 国产女主播在线播放 | 日本不卡网 | av不卡免费在线观看 | 福利视频一二区 | 亚洲天堂2018av | 国产成人在线观看网站 | 日本五十熟hd丰满 | 成人精品黄段子 | 久久人人爽天天玩人人妻精品 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 韩国女同性做爰三级 | 国产日韩精品中文字无码 | 在线免费福利 |