[]史上最强副驾驶——开车打瞌睡?Python叫醒你( 三 )
cv2.putText(frame,“Open”, (10, height-20), font, 1, (255,255,255), 1, cv2.LINE_AA )
阈值由以下方法确定:例如 , 如果得分大于15意味着该驾驶员闭眼时间较长 , 则阈值为15 。 此时 , 我们将使用sound.play()发出警报 。
本文插图
图源:unsplash
主要文件的源代码如下:
import cv2 import os fromkeras.models importload_model import numpy asnp from pygameimport mixer import time mixer.init() sound =mixer.Sound('alarm.wav') face =cv2.CascadeClassifier('haar cascade fileshaarcascade_frontalface_alt.xml') leye =cv2.CascadeClassifier('haar cascade fileshaarcascade_lefteye_2splits.xml') reye =cv2.CascadeClassifier('haar cascade fileshaarcascade_righteye_2splits.xml') lbl=['Close','Open'] model =load_model('models/cnncat2.h5') path =os.getcwd() cap = cv2.VideoCapture(0) font =cv2.FONT_HERSHEY_COMPLEX_SMALL count=0 score=0 thicc=2 rpred=[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) in faces: cv2.rectangle(frame,(x,y) , (x+w,y+h) , (100,100,100) , 1 ) for (x,y,w,h) in right_eye: r_eye=frame[y:y+h,x:x+w] count=count+1 r_eye =cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY) r_eye = cv2.resize(r_eye,(24,24)) r_eye= r_eye/255 r_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' break for (x,y,w,h) in left_eye: l_eye=frame[y:y+h,x:x+w] count=count+1 l_eye = cv2.cvtColor(l_eye,cv2.COLOR_BGR2GRAY) l_eye = cv2.resize(l_eye,(24,24)) l_eye= l_eye/255 l_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' break if(rpred[0]==0 and lpred[0]==0): score=score+1 cv2.putText(frame,''Closed'',(10,height-20), font,1,(255,255,255),1,cv2.LINE_AA) # if(rpred[0]==1 or lpred[0]==1): else: score=score-1 cv2.putText(frame,''Open'',(10,height-20), font,1,(255,255,255),1,cv2.LINE_AA) if(score<0): score=0 cv2.putText(frame,'Score:'+str(score),(100,height-20), font,1,(255,255,255),1,cv2.LINE_AA) if(score>15): #person is feeling sleepy so we beepthe alarm cv2.imwrite(os.path.join(path,'image.jpg'),frame) try: sound.play() except: # isplaying = False pass if(thicc<16): thicc= thicc+2 else: thicc=thicc-2 if(thicc<2): thicc=2 cv2.rectangle(frame,(0,0),(width,height),(0,0,255),thicc) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
本文插图
Python项目示例
开始项目 , 查看项目运作情况 。 要启动该项目 , 需要打开命令提示符 , 转到主文件“ drowsinessdetection.py”所在的目录 。 使用如下命令运行脚本 。
推荐阅读
- 驱动之家|NVIDIA:7nm安培是有史以来最强大的GPU
- Tech情报局TB|小米MIX4曝光:对标华为P40 Pro+,下半年最强安卓机皇预定?
- 壹观察|从最强到更强手机影像,华为P40 Pro+做了哪些加法?地表最强影像旗舰,再进一步!2020全球旗舰手机新高度
- 信息史上最全SpaceX火箭数据开源,核心、组员舱、起落架、发射信息全都有!
- 羽度非凡|安卓旗舰性能榜单:骁龙865依然最强王者!
- zol中关村在线|拜雅史上最强放血活动!旗舰立减2500元
- 雷科技|苹果最强Bug!千万别更新iOS,会立刻死机,目前无解
- 成都全搜索|史上首次,私人公司载人上太空!“狂人”马斯克想送100万人去火星
- 易评机|华为P40 Pro+翻车了吗?依然是地表最强拍照手机
- |京东618空调卖爆 强势发起史上最省钱空调季!
