人脸面部情绪识别 (一)

人脸面部情绪识别(二)

人脸面部情绪识别 age&gender(三)

根据人脸预测年龄性别和情绪代码实现 (c++ + caffe)(四)

这里写代码片
#!Anaconda/anaconda/python
#coding: utf-8"""
从视屏中识别人脸,并实时标出面部特征点
"""import dlib                     #人脸识别的库dlib
import numpy as np              #数据处理的库numpy
import cv2                      #图像处理的库OpenCvclass face_emotion():def __init__(self):# 使用特征提取器get_frontal_face_detectorself.detector = dlib.get_frontal_face_detector()# dlib的68点模型,使用作者训练好的特征预测器self.predictor = dlib.shape_predictor("D:/ActiveX1.9/model/shape_predictor_68_face_landmarks.dat")#建cv2摄像头对象,这里使用电脑自带摄像头,如果接了外部摄像头,则自动切换到外部摄像头self.cap = cv2.VideoCapture(0)# 设置视频参数,propId设置的视频参数,value设置的参数值self.cap.set(3, 480)# 截图screenshoot的计数器self.cnt = 0def learning_face(self):# 眉毛直线拟合数据缓冲line_brow_x = []line_brow_y = []# cap.isOpened() 返回true/false 检查初始化是否成功while(self.cap.isOpened()):# cap.read()# 返回两个值:#    一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾#    图像对象,图像的三维矩阵flag, im_rd = self.cap.read()# 每帧数据延时1ms,延时为0读取的是静态帧k = cv2.waitKey(1)# 取灰度img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)# 使用人脸检测器检测每一帧图像中的人脸。并返回人脸数rectsfaces = self.detector(img_gray, 0)# 待会要显示在屏幕上的字体font = cv2.FONT_HERSHEY_SIMPLEX# 如果检测到人脸if(len(faces)!=0):# 对每个人脸都标出68个特征点for i in range(len(faces)):# enumerate方法同时返回数据对象的索引和数据,k为索引,d为faces中的对象for k, d in enumerate(faces):# 用红色矩形框出人脸cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255))# 计算人脸热别框边长self.face_width = d.right() - d.left()# 使用预测器得到68点数据的坐标shape = self.predictor(im_rd, d)# 圆圈显示每个特征点for i in range(68):cv2.circle(im_rd, (shape.part(i).x, shape.part(i).y), 2, (0, 255, 0), -1, 8)#cv2.putText(im_rd, str(i), (shape.part(i).x, shape.part(i).y), cv2.FONT_HERSHEY_SIMPLEX, 0.5,#            (255, 255, 255))# 分析任意n点的位置关系来作为表情识别的依据mouth_width = (shape.part(54).x - shape.part(48).x) / self.face_width  # 嘴巴咧开程度mouth_higth = (shape.part(66).y - shape.part(62).y) / self.face_width  # 嘴巴张开程度# print("嘴巴宽度与识别框宽度之比:",mouth_width_arv)# print("嘴巴高度与识别框高度之比:",mouth_higth_arv)# 通过两个眉毛上的10个特征点,分析挑眉程度和皱眉程度brow_sum = 0  # 高度之和frown_sum = 0  # 两边眉毛距离之和for j in range(17, 21):brow_sum += (shape.part(j).y - d.top()) + (shape.part(j + 5).y - d.top())frown_sum += shape.part(j + 5).x - shape.part(j).xline_brow_x.append(shape.part(j).x)line_brow_y.append(shape.part(j).y)# self.brow_k, self.brow_d = self.fit_slr(line_brow_x, line_brow_y)  # 计算眉毛的倾斜程度tempx = np.array(line_brow_x)tempy = np.array(line_brow_y)z1 = np.polyfit(tempx, tempy, 1)  # 拟合成一次直线self.brow_k = -round(z1[0], 3)  # 拟合出曲线的斜率和实际眉毛的倾斜方向是相反的brow_hight = (brow_sum / 10) / self.face_width  # 眉毛高度占比brow_width = (frown_sum / 5) / self.face_width  # 眉毛距离占比# print("眉毛高度与识别框高度之比:",round(brow_arv/self.face_width,3))# print("眉毛间距与识别框高度之比:",round(frown_arv/self.face_width,3))# 眼睛睁开程度eye_sum = (shape.part(41).y - shape.part(37).y + shape.part(40).y - shape.part(38).y +shape.part(47).y - shape.part(43).y + shape.part(46).y - shape.part(44).y)eye_hight = (eye_sum / 4) / self.face_width# print("眼睛睁开距离与识别框高度之比:",round(eye_open/self.face_width,3))# 分情况讨论# 张嘴,可能是开心或者惊讶if round(mouth_higth >= 0.03):if eye_hight >= 0.056:cv2.putText(im_rd, "amazing", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,(0, 0, 255), 2, 4)else:cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,(0, 0, 255), 2, 4)# 没有张嘴,可能是正常和生气else:if self.brow_k <= -0.3:cv2.putText(im_rd, "angry", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,(0, 0, 255), 2, 4)else:cv2.putText(im_rd, "nature", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,(0, 0, 255), 2, 4)# 标出人脸数cv2.putText(im_rd, "Faces: "+str(len(faces)), (20,50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)else:# 没有检测到人脸cv2.putText(im_rd, "No Face", (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)# 添加说明im_rd = cv2.putText(im_rd, "S: screenshot", (20, 400), font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)im_rd = cv2.putText(im_rd, "Q: quit", (20, 450), font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)# 按下s键截图保存if (k == ord('s')):self.cnt+=1cv2.imwrite("screenshoot"+str(self.cnt)+".jpg", im_rd)# 按下q键退出if(k == ord('q')):break# 窗口显示cv2.imshow("camera", im_rd)# 释放摄像头self.cap.release()# 删除建立的窗口cv2.destroyAllWindows()if __name__ == "__main__":my_face = face_emotion()my_face.learning_face()
  1. 效果图

  2. 虽然有效果出来,但是效果不佳,思路注释很清楚了,之后继续研究其他相关方法

人脸面部情绪识别(一)相关推荐

  1. 【百度大脑新品体验】人脸面部动作识别

    [百度大脑新品体验]人脸面部动作识别 作者:busyboxs 最近在尝试做一个类似于 Facedance challenge 的应用,这个应用需要识别人脸五官的动作.目前可能的解决方法就是通过对关键点 ...

  2. 面部情绪识别基础知识积累——背景

    1. MIT 媒体实验室的罗莎琳德·皮卡德(Rosalind W. Picard)于 1995 年提出了情感计算(Affective Computing)的概念,并于 1997 年正式出版了<情 ...

  3. python图像人类检测_Python 超简单实现人类面部情绪的识别

    还记得我们之前写过一篇文章<手把手教你人脸识别自动开机>吗?里面用OpenCV对人脸进行简单的识别,让计算机训练认识到某个特定人物后识别对象.今天来做点高级的,识别出人脸的情绪. 本文分为 ...

  4. python识别人脸多种属性_9种人脸情绪识别、22类人脸属性、 15类皮肤质量识别,竹间智能要让情感机器人更理解人...

    撰文 | 邱陆陆 编辑 | 藤子 「我们希望做情感机器人,希望透过机器更智能地理解一个人.」随着计算能力的提升.神经网络的步步深入,配以图像识别.语音识别的人工智能已经逐渐变得能够「听见」.「看见」. ...

  5. ❀论文篇 ❀ 2010-2022,情绪识别(EmotionRecognition)论文

    情绪识别目前我所了解的有,基于人脸的情绪识别,基于声音的情绪识别,基于身体特征的情绪识别,基于脑电波的情绪识别,基于时空的情绪识别等. 这篇博客主要是人脸表情/情绪识别(Face expression ...

  6. 对于《Self-Cure Net抑制大规模人脸情绪识别的不确定性》论文阅读总结

    对于<Self-Cure Net抑制大规模人脸情绪识别的不确定性>论文及代码阅读总结 论文核心概括 核心内容 一.注意力机制 二.对样本的重新排名机制 三.ResNet18 总结 参考资料 ...

  7. 【人脸表情识别】情绪识别相关会议、比赛汇总(2018-2020)

    前面专栏中,我们介绍了有关基于图片/视频的人脸表情识别的相关内容,也了解了通过回归的方式来理解表情的方式--基于连续模型的人脸表情识别.在专栏的最后一篇文章中,我们将分享计算机视觉领域中围绕情绪识别主 ...

  8. 人脸情绪识别系统第一次迭代总结

    设想和目标: 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 问题定义:目前有一种情感维度理论,我们要用机器学习的方式给出人脸的维度值. 典型场景1:用户通过 ...

  9. 课堂考试作弊检测系统,情绪识别、表情识别和人脸识别结合

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 智慧教室 课堂专注度及考试作弊系统.课堂动态点名,情绪识别.表情识别和人脸识别结合 课堂专注度 ...

  10. 人脸情绪识别挑战赛 图像分类 pytorch

    "这篇文章是对202 科大讯飞人脸情绪识别挑战赛的说明与总结." 比赛链接 http://challenge.xfyun.cn/topic/info?type=facial-emo ...

最新文章

  1. jieba分词流程及部分源码解读(一)
  2. 兼容Silverlight4的实用的Silverlight可拖放工具类源代码
  3. CPU工作过程——MCU
  4. 微服务+:服务契约治理
  5. 新手第一课-什么是深度学习
  6. iPad开发(Universal Applications)
  7. 继微信支付后 支付宝宣布向银联云闪付开放线上场景
  8. python数据可视化是什么_python3数据可视化是什么?
  9. spring自动扫描的注解@Component @Controller @Service @Repository
  10. jprofiler_监控远程linux服务器的JVM进程(转 非常棒)
  11. FLask框架AJAX操作
  12. 什么是化工工程?重化工业包含哪些项目?
  13. java中的分号是什么作用,分号的作用是什么
  14. 【九州贯连智能家居——拥抱华为5.5G,打造未来家居公共物联网关,让生活赋能】
  15. APP推广渠道下载量统计方案
  16. do还是doing imagine加to_to-do和doing用法及区别
  17. B/S 架构 与 C/S 架构
  18. 【Vue——basic】dom是什么
  19. 亚马逊云计算服务将支持甲骨文数据库
  20. 西安交大计算机辅助手术系统,我们在西安交大感受到外科技术创新的无穷魅力!...

热门文章

  1. 六年级计算机学习,小学六年级计算机学习教案(24页)-原创力文档
  2. Different tests were collected between gw0 and gw1. The difference is: --- gw0
  3. Unity浏览器插件Embedded browser
  4. 主流的移动机器人视觉系统,主要分为哪几种?
  5. H3C交换机机框首次启动报错“The device (FFFFFFFF-40) doesn‘t support this kind of board.”
  6. Spring 实体类依赖注入属性的三种方式
  7. 对象存储基本知识介绍
  8. Axure 8 网页滚动效果+APP上下垂直拖动效果
  9. 小啊呜产品读书笔记001:《邱岳的产品手记-03》第04+05讲 如何当好AI时代的产品经理 06讲 产品案例分析·TheGuardian的文本之美
  10. Android自定义控件 芝麻信用分雷达图