导言

本文的目的是解释如何使用面部标志作为神经网络的输入来检测昏昏欲睡的人,在这种情况下,3D卷积神经网络发出警报以唤醒用户并防止某种形式的事故。

我们的想法是从网络摄像头中提取一组帧,然后从中提取面部标志,特别是双眼的位置,然后将这些坐标传递给神经模型,以获得最终分类,告诉我们用户是否清醒或者睡着了。

方法

最近的工作表明,使用3D卷积神经网络或Conv3D可以实现活动识别,因为不是分析单个帧而是分析它们的一组,这组帧是包含活动的短视频。

话虽如此,并将昏昏欲睡视为可以包含在视频中的活动,但使用Conv3D来尝试预测困倦是有意义的。

第一步是从相机中提取帧,在我们的例子中是网络摄像头。一旦我们有了框架,我们就会使用一个名为dlib的python库,其中包含一个面部标志检测器; 结果是x,y坐标的集合,指示面部标志的位置。

即使我们得到一个点的集合,我们只对眼睛的位置感兴趣,所以我们将只保留属于眼睛的十二个点。

到目前为止,我们拥有单帧的面部标志。然而,我们希望给我们的系统提供序列感,并且为此,我们不考虑单帧来进行最终预测,我们最好采用它们中的一组。

我们认为,一次分析一秒钟的视频就足以做出好的睡意预测。因此,我们保持十个面部地标检测,相当于一秒视频; 然后,我们将它们连接成一个单一的模式,即一个具有形状(10,12,12)的数组; 10个帧,x坐标为12个点,y坐标为12个点。此数组是我们的Conv3D模型的输入,以获得最终分类。

我们模型的第一个隐藏层是3D卷积层,接着是最大池化层和展平层,这导致了800个神经元的向量。下一层是青少年单元的密集层,具有relu激活功能。模型y的最后一层由两个神经元组成,其中激活函数是softmax函数,由两个神经元组成,每个类一个。

构建

网络摄像头总是流式传输视频,但我们每0.1秒分析一个帧,直到我们达到10个样本,相当于1秒,以提取面部标志并仅保留对应于双眼的点。我们将这些点分组为7个单元的重叠,这意味着我们将点从第一帧分组到十个,下一组从第四帧到第十三帧形成。

一旦我们有一组眼睛的点(x,y坐标),我们将它们传递给我们的神经模型以获得分类,其结果可以是[1,0]代表“清醒”,或者[0,1]代表“昏昏欲睡”。换句话说,我们正在分析小块网络摄像头的流媒体,以便每秒预测困倦。

执行

在这里,您可以找到如何获得本文中使用的每个元素。

  • 该系统是在python 3.5上实现的

  • 使用OpenCV for python实现从网络摄像头中提取帧

  • 使用库dlib提取面部标志

  • 该模型使用keras构建

  • 在烧瓶的帮助下部署了前端。

from keras.utils import plot_modelfrom keras.models import Modelfrom keras.layers import Inputfrom keras.layers import Densefrom keras.layers import Flattenfrom keras.layers.convolutional import Conv3Dfrom keras.layers.pooling import MaxPooling3Dfrom keras.models import Sequentialvisible = Input(shape=(10,12,12,1))conv1 = Conv3D(8, kernel_size=2, activation='relu')(visible)pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1)flat1 = Flatten()(pool1)hidden1 = Dense(10, activation='relu')(flat1)output = Dense(2, activation='softmax')(hidden1)model = Model(inputs=visible, outputs=output)import plot_modelfrom keras.models import Modelfrom keras.layers import Inputfrom keras.layers import Densefrom keras.layers import Flattenfrom keras.layers.convolutional import Conv3Dfrom keras.layers.pooling import MaxPooling3Dfrom keras.models import Sequentialvisible = Input(shape=(10,12,12,1))conv1 = Conv3D(8, kernel_size=2, activation='relu')(visible)pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1)flat1 = Flatten()(pool1)hidden1 = Dense(10, activation='relu')(flat1)output = Dense(2, activation='softmax')(hidden1)model = Model(inputs=visible, outputs=output)

结果

我们仅为200个时期训练了我们的最终模型,用于训练该模型的优化器是ADAM。当然,我们尝试过许多其他模型,但最好的结果是这里显示的模型。

这项工作的最终结果是显示用户网络摄像头的前端。每隔一秒分析一次流,并在视频下显示预测“昏昏欲睡”或“清醒”。作为我们最后一个示例中的附加功能,如果用户被检测为“昏昏欲睡”,则系统会发出声音警报。

对于进一步的实验,这里提出的解决方案可以很容易地扩展到在智能手机上工作,甚至可以在运行Ubuntu发行版的嵌入式系统中工作,例如众所周知的树莓派。

长按订阅更多精彩▼

使用面部标记提取和深度神经网络进行“昏昏欲睡”的检测相关推荐

  1. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测面部标记

    使用 dlib.OpenCV 和 Python 检测面部标记 今天,我们将使用dlib和OpenCV来检测图像中的面部标记.dlib的安装教程: https://wanghao.blog.csdn.n ...

  2. 深度神经网络在基于视觉的目标检测中的应用

    简 介: 目标检测是计算机视觉的一个重要应用方向,深度神经网络的提出极大地帮助基于视觉的目标检测提高了准确度.自2014年以来,深度神经网络在基于视觉的目标检测中被广泛应用,出现了多种算法.本文分别讨 ...

  3. 深度神经网络算法有哪些,最简单的神经网络算法

    常见的深度学习算法主要有哪些? 深度学习常见的3种算法有:卷积神经网络.循环神经网络.生成对抗网络. 卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且 ...

  4. 深度神经网络的特征表示,神经网络识别图像原理

    有哪些深度神经网络模型? 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN).递归神经网络(RNN).深信度网络(DBN).深度自动编码器(AutoEncoder)和生成对抗网络(GAN)等. ...

  5. 使用深度神经网络进行自动呼叫评分(二)

    导言 在上一篇文章中,分享了我们在特征提取和语音识别方面的经验.具体来说,我们使用呼叫者diarization和LIUM库在单独的短语中检测语音.本文中将分享如何使用XGBoost以及LSTM和XGB ...

  6. 使用深度神经网络进行自动呼叫评分(一)

    导言 呼叫评分是呼叫中心质量保证的重要组成部分,它能够使呼叫中心代理可以更快.更高效的完成工作,并且避免无意义的日常工作.考虑到呼叫中心的生产力,在研发中提出了一种处理所有来电的算法,并将它们分为可疑 ...

  7. PNAS | 理解单个神经元在深度神经网络中的作用

    本次报道论文为发表于PNAS的Understanding the role of individual units in a deep neural network.众所周知,深度神经网络擅长查找可解 ...

  8. BENDR for BCI : 多伦多大学研究者提出受BERT启发的深度神经网络学习​海量EEG 数据...

    从预测文本到智能语音控制,人机交互近年来得到了快速的发展.许多科学家设想下一个前沿领域是脑机接口(BCI),直接的神经连接,利用脑电图(EEG)信号捕捉到的脑电活动. 为了开发能够更好地利用公开的大量 ...

  9. 在深度神经网络中你有多吸引人?

    几个月前,华南大学发表了一篇关于"面部美容预测"的论文和数据集. 你可以在这里找到它. 数据集包括5500人,他们的得分有1到5分的吸引力. 这里有一些来自论文的例子: 还有一些着 ...

最新文章

  1. ThinkPHP5.0中Redis的使用和封装(原创)
  2. 有关try..catch..finally处理异常的总结
  3. 即使被拖库,也可以保证密码不泄露
  4. html宽度自适应怎么调整li超出隐藏,HTML篇之CSS样式——div ul li 嵌套后解决高度自适应方法...
  5. 压缩视频 html5播放,将HTML5视频呈现为Canvas正在压缩图像
  6. 离线轻量级大数据平台Spark之MLib机器学习库TF-IDF实例
  7. hud 4455 Substrings 解题报告
  8. Tomcat 修改JSESSIONID
  9. spring boot rabbitmq_Spring Boot+RabbitMQ 实现延迟消息实现完整版,实用!
  10. 【ubuntu】安装qemu
  11. oracle24801错误,[数据库]oracle错误(ORA
  12. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
  13. matlab 拉斯,魏尔斯特拉斯函数
  14. [学习笔记]opencv双线性插值法图像放大
  15. GEE-Python遥感大数据分析
  16. iOS疯狂详解之启动分层引导动画
  17. 【Mysql数据库应用】
  18. 特斯拉前高管:马斯克发推特之前 很多员工就已知晓私有化计划
  19. linux使用matlab
  20. mybatis plus 事务管理器_最全MyBatis核心配置文件总结,可以作为工具先收藏了

热门文章

  1. python[外星人入侵] 项目
  2. 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)
  3. 中石油计算机职称考试题,2019年职称英语考试中石油历年真题及答案
  4. 吐血推荐:win下如何安装tensorflow?只需两步!!
  5. iptables时区_iptables time 时间匹配规则
  6. 文华软件登录显示请选择服务器,文华财经随身行要登录云服务器
  7. 人工智能机器学习区别计算机应用,AI、人工智能和机器学习有什么区别
  8. 手写 Spring 事务、IOC、DI 和 MVC
  9. web 监听器 过滤器等组件
  10. 云效平台:企业级互联网架构下的持续集成与持续交付实践