opencv人脸特征点检测,opencv人脸检测实验报告
参考博客:Dlib模型中的驾驶员疲劳检测2(打哈欠))))))))))))))。
本文列举了疲劳检测原理、检测工具代码思想、代码修改代码检测结果、疲劳检测原理。
因为人在累的时候大概有两种状态。眨眼:正常眼睛每分钟眨眼约10-15次,每次眨眼持续时间约0.2-0.4秒。累的时候多眨眼,速度就会慢下来。打哈欠:此时嘴巴变大,保持一定状态。所以,检测人是否疲劳,可以根据眼睛的开合、眨眼的频率、嘴巴的开合来判断人是否疲劳。
检测工具dlib:典型的图像处理开源库,其中shape _ predictor _ 68 _ face _ landmarks . dat用于检测人脸的68个重要点。
3359 pan.Baidu.com/s/1v _ j49 iusqpmwtxtc 02 lteg
提取代码:jeu2代码构思第一步:使用dlib . get _ frontier _ face _ detector()获取面部位置检测器第二步:使用dlib.shape_predictor获取面部特征。然后,图像在尺寸上被放大并变灰。第六步:使用检测器(gray,0)第七步检测人脸位置:循环人脸的位置信息生成预测器(gray,0),第八步使用rect获取人脸特征位置信息;第9步,将面部特征信息转换成数组array的格式;第10步,提取左眼和右眼的坐标;使用平均值作为最终耳朵的第11步;第十二步cv2 .凸包用绘制轮廓绘制轮廓位置;第十三步,用矩形框标注面部。分别计算左眼和右眼的得分,并取平均值。如果小于阈值,则加1。如果连续三次小于阈值,闪烁一次显示68个特征点。第15步)画图,用cv2.putText表示眨眼次数。步骤16)计算超过50次的眨眼总数,显示图片,进入睡眠状态。原文链接:有两种常用的函数法,通过修改https://blog.csdn.net/cungudafa/article/details/103477960码来测量激情虎的距离。Np.linalg.norm()和dist.euclidid)。
from scipy . spatialportdistanceasdistimportnumpyasnpimporttimepoints=[1,3 ],[ 8,7]points=[NP . array(val)fal]TOC=time . clock()print(NP .linalg . norm:% . 3 fs)(TOC-TIC)))TIC=time . clock)(forIinrange))500()TOC=time . clock))print( dist。欧几里德3360% . 3fs)%(TOC-TIC))(NP . linalg . norm 3360.2360)))
代码importnumpyasnpfromimutilsimportface _ utils # imutils基于OpenCV,importmultisimportlibimportcv 2 #:# NP . linalg . norm的计算时间比dist.euclidean快,Numpy的算法a=NP。NP.norm是定义眼阈值和口阈值的数学函数。)b=C=NP。利纳格。norm(eye[0]-eye[3])ear=(AB)/(2.0 * C)返回阈值。
mar=(A B)/(2.0 * C)返回3月#常数:眼睛长宽比/闪烁阈值eye _ Aspect _ rato=0.2 eye _ Flicker _ threshold=3 #常数:嘴长宽比/闪烁阈值mouth _ Aspect _ rato=0.5 mouth _ Flicker _ threshold=3 #计数常数e计数器=0e总计=0m计数器=0m总计=0 #脸部位置检测器#返回值就是一个矩形detect=dlib。get _ frontier _ face _ detector()#脸部特征位置检测器预测值=dlib。shape _ predictor( shape _ predictor _ 68 _ face _ landmarks。dat )#获得左右眼和嘴的标志索引(lstart,lend)=face_utils .face _ LANDMARKS _ IDXS[ left _ eye ](rstart,rend)=face_utils .face _ LANDMARKS _ IDXS[ right _ eye ](mstart,mend)=face_utils .face _ LANDMARKS _ IDXS[口]cap=cv2 .VideoCapture(0)而True: ret,frame=cap。read()frame=IMU tils。resize(帧)#,width=720)gray=cv2。CVT颜色(框架,cv2 .COLOR_BGR2GRAY) #返回值为脸部区域的矩形框,数组形式rects=检测(灰色,0) #print(rects) # #循环脸部信息对于作为中的矩形:#检测器检测特征点形状=预测值(灰色,矩形)#将特征点转化为数组组,返回值是68个特征点坐标shape=face _ utils。shape _ to _ NP(形状)# print(形状)#获取左右眼睛和嘴的坐标左眼=形状,右眼=形状,嘴巴=形状计算左右眼的耳朵值,嘴的瑕疵值。左耳=eye _ detect _ 1(lefteye)rightear=eye _ detect _ 1(righteye)ear=(leftear rightear)/2.0 mar=mouth _ detect _ 1(mouth)# cv2。凸包为获取图像凸包位置的函数lefteyehull=cv2。凸包(左眼)右眼凸包=cv2。凸包(右眼)口包=cv2。凸包(嘴)# print(lefteyehull)# cv2。绘制轮廓是轮廓绘制函数#第一个参数是指明在哪幅图像上绘制轮廓;图像为三通道才能显示轮廓#第二个参数是轮廓本身,在计算机编程语言中是一个列表;#第三个参数指定绘制轮廓目录中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。
cv2.drawContours(frame,[lefteyehull],-1,(0,255,0),1) cv2.drawContours(frame,[righteyehull],-1,(0,255,0),1) cv2.drawContours(frame,[mouthhull],-1,(0,255,0),1) #进行画图操作,用矩形框标注人脸#左=右。left()# top=rect。top()# right=rect。right()# bottom=rect。底部()# cv2。矩形(框架,(左,上),(右,下),(0,255,0),3) #循环,满足条件的眨眼次数1如果耳eye_Aspect_rato: #阈值0.2生态计数器=1 #连续3帧都满足条件的计为一次闭眼else:if eCOUNTER=eye _ Flicker _ threshold:#阈值3 e总计=1 e计数器=0cv 2。puttext(框架,闪烁:{} 。格式(eTOTAL),(10,30),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.putText(frame, eCounter:{} .格式(生态计数器),(150,30),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.putText(frame, Ear:{:2f} .格式(耳),(300,30),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) if mar mouth_Aspect_rato: #阈值0.5m counter=1 else:if m counter=mouth _ Flicker _ threshold:#阈值3m总数=1m计数器=0cv 2。puttext(框架,打哈欠:{} 。格式(mTOTAL),(10,60),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.putText(frame, mCounter:{} .格式(mCOUNTER),(300,60),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.putText(frame, Mar:{:2f} .格式(三月),(450,60),cv2 .FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) #进行画图操作,68个特征点标识#for (x,y) in shape: #shape为68特征点的坐标#cv2.circle(frame,(x,y),1,(0,0,255),-1) #假设一秒为60帧,则一帧为1/60秒,一个总数为3帧为1/20秒如果eTOTAL=12或mTOTAL=6: cv2.putText(frame, SLEEP!睡觉!,(360,360),cv2 .FONT_HERSHEY_SIMPLEX,1,(84,255,200),2) cv2.imshow(pilao ,frame)if cv2。wait key(1)0x ff==ord( q ):break #也许是因为我用的opencv-python是4.1.0 所以加上最后这两行总是报错,我删掉后就可以运行了# cap。发布()# cv2。destroyallwindows()检测结果
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。