热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv的人脸识别,大众疲劳识别测试方法

参考博客:Dlib模型之驾驶员疲劳检测二(打哈欠)文章目录疲劳检测原理检测工具代码思路代码修改代码检测结果疲劳检测原理因为人在疲倦时大概会产生两种状态:眨眼:正常人的眼睛


参考博客: 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_frontal_face_detector ()获取面部位置检测器的第二步骤:使用dlib.shape_predictor获取面部特征然后,对图像进行维度放大并灰度化第六步骤:利用检测器(gray,0 )进行脸部位置检测的第七步骤:使脸部的位置信息循环,生成predictor(gray,0 ), 使用rect获得脸部特征位置的信息的第8步骤:将脸部的特征信息变换为数组array的格式的第9步骤:提取左眼和右眼的坐标的第10步骤:使用平均值作为最终的EAR的第11步骤: cv2.convexHull 使用drawContours描绘轮廓位置进行描绘操作的第12步骤:用矩形框标记脸部的第13步骤:分别计算左眼和右眼的得分并进行平均,如果不到阈值则加1,如果连续3次不到阈值,则进行1次眨眼显示68个特征点标记的步骤15 )进行绘图操作,同时使用cv2.putText表示眨眼次数的步骤16 )计算总眨眼次数超过50次,显示画面并睡觉。 原文链接: https://blog.csdn.net/cungudafa/article/details/103477960代码修改用于测量激情老虎距离的常用函数方法有两种。 np.linalg.norm ()和dist.euclidid )。


from scipy.spatialimportdistanceasdistimportnumpyasnpimporttimepoints=[ 1,3 ],[ 8,7 ] points=[ NP.array (val ) fal ] toc=time.clock () print(NP.LinaLG.norm:%.3fs ) (TOC-TIC ) ) ) tic=time.clock ) (forIinrange ) ) 500 () toc=time.clock ) ) print('dist.Euclidean3360%.3fs ) %(TOC-TIC ) ) (NP.linaLG.norm3360.2360 ) ) )


代码importnumpyasnpfromimutilsimportface _ utils # im utils是基于OpenCV的importimutilsimportdlibimportcv2# : #np.linalg.norm的计算时间比dist.euclidean更快,Numpy的算法a=NP.NP.norm是定义眼睛阈值和嘴阈值的数学函数) b=使用b=NP.LinaLG.norm的c=NP.LinaLG.norm(eye[0]-eye[3] ) ear=(ab )/(2.0 * C ) returneardefmouth

mar = (A + B) / (2.0 * C) return mar#常数:眼睛长宽比/闪烁阈值eye_Aspect_rato = 0.2eye_Flicker_threshold = 3#常数:嘴长宽比/闪烁阈值mouth_Aspect_rato = 0.5mouth_Flicker_threshold = 3#计数常数eCOUNTER = 0eTOTAL = 0mCOUNTER = 0mTOTAL = 0#脸部位置检测器#返回值就是一个矩形detect = dlib.get_frontal_face_detector()#脸部特征位置检测器predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')#获得左右眼和嘴的标志索引(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']cap = cv2.VideoCapture(0)while True: ret,frame = cap.read() frame = imutils.resize(frame)#, Blinks:{}'.format(eTOTAL),(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.putText(frame,'eCounter:{}'.format(eCOUNTER), (150, 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) if mar > mouth_Aspect_rato: #阈值0.5 mCOUNTER += 1 else: if mCOUNTER >= mouth_Flicker_threshold: #阈值3 mTOTAL += 1 mCOUNTER = 0 cv2.putText(frame, 'Yawning:{}'.format(mTOTAL), (10,60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, 'mCounter:{}'.format(mCOUNTER), (300,60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, 'Mar:{:.2f}'.format(mar), (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) #假设1秒为60帧,则1帧为1/60秒,一个TOTAL为3帧为1/20秒 if eTOTAL >= 12 or mTOTAL >= 6: cv2.putText(frame,"SLEEP!SLEEP!!",(360,360),cv2.FONT_HERSHEY_SIMPLEX,1,(84,255,200),2) cv2.imshow('pilao',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break #也许是因为我用的opencv-python是4.1.0 所以加上最后这两行总是报错,我删掉后就可以运行了 #cap.release() #cv2.destroyAllWindows() 检测结果



推荐阅读
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
author-avatar
zhangmy0815522
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有