基于Python的面部表情识别分析系统

资源下载地址:https://download.csdn.net/download/sheziqiong/85660758

面部表情识别

练习技能:

  • 爬虫
  • 数据清洗
  • 计算机视觉(图片基本处理,信息提取)
  • 深度学习

图像识别技术文档


一、项目概述

  • 项目名称:面部表情识别

  • 项目背景:在与客户交流的过程中,通过客户的面部表情来判断用户对话题是否感兴趣,营销人员或者沟通人员可以从中找到客户感兴趣的方面,或者判断客户的购买欲望

  • 图像识别是指利用计算机对图像进行处理、分析、理解,图像识别的过程可分为图像处理和图像分析两个过程
    图像处理是指对所需要分析的图像进行一系列的图形操作,包括拉伸缩放、旋转翻转、颜色变换、像素保留……,图像分析是指通过图像的特征来反馈图像信息并且分类,最简单的是基于统计的方法、最常用的是深度学习方法

  • 技术支持
    图像处理:VoTT、OpenCV、PIL
    图像分析:TensorFlow、Keras、CNN



二、应用领域

总体目标

  • 一级目标
    • 通过客户的面部表情变化,来抓住客户感兴趣的点,提高沟通效率
  • 二级目标
    • 学习图像识别的技术
  • 三级目标
    • 学习深度学习实现工具
  • 四级目标
    • 了解图像识别技术实现的步骤,技术原理

三、实验步骤

3.1 资源

  • 数据资源:本次实验为面部表情的二分类识别,情绪为高兴和沮丧,各表情图像 5000 张
  • 技术支持:Keras、TensorFlow、VoTT、OpenCV、PIL
Keras

Keras 是一个由 Python 编写的开源人工神经网络库,可以作为 Tensorflow、Microsoft-CNTK 和 Theano 的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化,Keras 的神经网络 API 是在封装后与使用者直接进行交互的 API 组件,在使用时可以调用 Keras 的其它组件。除数据预处理外,使用者可以通过神经网络 API 实现机器学习任务中的常见操作,包括人工神经网络的构建、编译、学习、评估、测试等。

TensorFlow

TensorFlow 由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括 TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud 在内的多个项目以及各类[应用程序接口]( API) [2] 。自 2015 年 11 月 9 日起,TensorFlow 依据阿帕奇授权协议(Apache 2.0 open source license)开放源代码,TensorFlow 是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,谷歌大脑自 2011 年成立起开展了面向科学研究和谷歌产品开发的大规模深度学习应用研究,其早期工作即是 TensorFlow 的前身 DistBelief。

VoTT

VoTT 是一个用 TypeScript 编写的 React + Redux Web 应用程序。该项目是通过 Create React App 启动的,用于图像和视频资产的开源注释和标签工具,VoTT 可以作为本机应用程序安装,也可以从源代码运行。VoTT 也可以作为独立的 Web 应用程序使用,并且可以在任何现代 Web 浏览器中使用。

OpenCV

OpenCV 是一个基于 BSD 许可(开源)发行的跨平台计算机视觉库,可以运行在 Linux、Windows、Android 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

PIL

python 图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力。


3.2 方法

3.2.1 试验阶段

  • 在项目开始初步试验阶段,通过人工百度搜索人像表情图像,利用 VoTT 工具进行裁切和标注,各表情 100 张,并按照 7,2,1 的比列把数据分为训练集、测试集、验证集。
  • 利用 Keras 深度学历框架搭建简单的 CNN 进行训练,结果显示 CNN 在图像处理领域效果很不错,在模型未经过调整前准确率能超过 50%。

3.2.2 中期工作

  • 扩大数据集,利用爬虫批量获取人像图片,在爬取百度图片的过程中,如果直接获取那最多只能获取到 30 张图像,之后程序就自动停止了,采用的解决方法是,通过观察 url 发现可以添加 page 页码这个选择来达到滚轮向下刷新图片的作用,因此添加一个页码循环来爬取图像。

    所以采用 VoTT 加 Python 的方式来完成图像标注和裁切,在 VoTT 新建项目,选择图像位置进行框选和标注,完成后保存导出 JSON 格式文件,在利用 Python 读取 JSON 文件,打开对应图像按照框选的大小进行裁切,然后转化为数组也就是像素保存,按照 6,2,2 的比例划分数据集保存 CSV 文件。


  • 打开 VoTT,选择新建项目




  • 新建连接点




  • 选择为添加位置




  • 选择图像所在文件夹位置,添加确认





  • 工作界面右上角区域为标签处理区域,可以进行标签的添加删除和位置更改操作




  • 正上方区域为框选工作区域




  • 左边为文件选项,可以选择框选图像已经导出




  • 标注好的图像导出为 JSON 格式




  • 卷积神经网络和普通神经网络的区别主要在于“卷积”二字,卷积也就是我们说的内积计算方式,就是将矩阵相乘再相加,卷积的操作是为了提取区域的主要特征,也是一种减少维度的方法,并且在图像识别中这种方式也是很合理的,卷积这个操作最开始来自于计算机波纹处理,后来应用到计算机视觉领域得到了显著的作用。










  • 卷积操作可以作为物体的边缘检测,这在图像识别上提供了很大的帮助,在将我们的滤波器放在选中的像素上之后,我们将卷积核中的每一个数值和图像中对应的数值成对相乘。最后将乘积的结果相加,然后把结果放在输出特征图的正确位置上。我们在上边的动画中可以以一个微观的形式看到这个运算的过程,但是更有趣的是我们在整幅图像上执行这个运算得到的结果。




  • “池化”操作是和“卷积”配合使用,池化操作也是一种提取重要特征的方式,但是在这一环节中没有权重产生,它的工作方式是指定池化的大小,对数据进行扫描保留区域内最大数值,这个操作也可以保留区域内的平均数值。除了卷积层,CNN 通常会用到所谓的池化层。它们最早被用来减小张量的大小以及加速运算。这些层是比较简单的——我们需要将我们的图像分成不同的区域,然后在每一个部分上执行一些运算。例如,对 Max Pool 层而言,我们会选择每个区域的最大值,并将它放到对应的输出区域。与卷积层的情况一样,我们有两个可用的超参数——滤波器大小和步长。最后但同样重要的一点是,如果你对一个多通道的图像执行池化操作,那么每一个通道的池化应该单独完成。







  • “全连接”,此操作是将图像数组进行平压之后全连接,之后的操作和普通的神经网络原理一致,最后的输出层利用逻辑函数进行预测。

  • 数据输入,在数据输入过程中添加 Keras 图像生成器模块,扩大数据集。

  • 效果展示












3.2.5 模型评估


  • 训练集

    01
    04749216
    12836933
    评估百分比
    真阳率96.98%
    假阳率3.02%
    真阴率5.62%
    假阴率94.38%
    召回率96.08%
  • 测试集

    01
    056264
    176803
    评估百分比
    真阳率92.62%
    假阳率7.38%
    真阴率11.91%
    假阴率88.09%
    召回率91.35%

  • 实时预测

    对面部表情进行实时识别需要计算机获取摄像头的信息,思路是通过获取计算机摄像头的权限,打开摄像头进行实时画面的捕捉,获取当前画面的一帧来做预测,根据刷新率不同识别的实时速率也不同
    
    #-*- coding: utf-8 -*-import cv2
    import sys
    import gc
    import json
    import numpy as np
    from keras.models import Sequential
    from keras.models import model_from_json
    root_path=os.path.abspath(".")
    model_path=root_path+'/model/'
    img_size=48
    emo_labels = ["happy", 'disgust']
    num_class = len(emo_labels)
    json_file=open(model_path+'model_json.json')
    loaded_model_json = json_file.read()
    json_file.close()
    model = model_from_json(loaded_model_json)
    model.load_weights(model_path+'model_weight.h5')if __name__ == '__main__':if len(sys.argv) == 1:print(len(sys.argv))print("Usage:%s camera_id\r\n" % (sys.argv[0]))sys.exit(0)#框住人脸的矩形边框颜色color = (0, 0, 2555)#捕获指定摄像头的实时视频流cap = cv2.VideoCapture(0)#人脸识别分类器本地存储路径cascade_path ="C:/ProgramData/Anaconda3/lib/site-packages/cv2/data/haarcascade_frontalface_alt.xml"#循环检测识别人脸while True:_, frame = cap.read()   #读取一帧视频#图像灰化,降低计算复杂度frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#使用人脸识别分类器,读入分类器cascade = cv2.CascadeClassifier(cascade_path)#利用分类器识别出哪个区域为人脸faceRects = cascade.detectMultiScale(frame_gray, scaleFactor = 1.1,minNeighbors = 1, minSize = (120, 120))if len(faceRects) > 0:for faceRect in faceRects:x, y, w, h = faceRectimages=[]rs_sum=np.array([0.0]*num_class)image = frame_gray[y: y + h, x: x + w ]image=cv2.resize(image,(img_size,img_size))image=image*(1./255)images.append(image)images.append(cv2.flip(image,1))images.append(cv2.resize(image[2:45,:],(img_size,img_size)))for img in images:image=img.reshape(1,img_size,img_size,1)list_of_list = model.predict_proba(image,batch_size=32,verbose=1)result = [prob for lst in list_of_list for prob in lst]rs_sum+=np.array(result)print(rs_sum)label=np.argmax(rs_sum)emo = emo_labels[label]print ('Emotion : ',emo)cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness = 2)font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(frame,'%s' % emo,(x + 30, y + 30), font, 1, (255,0,255),4)cv2.imshow("识别朕的表情!", frame)#等待10毫秒看是否有按键输入k = cv2.waitKey(30)#如果输入q则退出循环if k & 0xFF == ord('q'):break#释放摄像头并销毁所有窗口cap.release()cv2.destroyAllWindows()

资源下载地址:https://download.csdn.net/download/sheziqiong/85660758

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28127.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人脸表情识别】基于图片的人脸表情识别,基本概念和数据集

大家好,欢迎来到我们人脸表情识别的专栏,这是专栏的第一篇文章,今天我们讨论的问题是关于表情识别的基本概念和数据集。 作者&编辑 | Menpinland 在较早之前,有三AI已经有一篇《人脸表情识别研究》的文章,里面已经…

【实战】深度学习构建人脸面部表情识别系统

实战:深度学习构建人脸面部表情识别系统 一、表情数据集 数据集采用了kaggle面部表情识竞赛的人脸表情识别数据集。 https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data 如果数据下载不下来的话&…

icon图标在线制作生成的方法

我们在实际的建站过程中,经常需要制作自己的icon图标文件;又或者我们需要把windows系统里的应用图标改成自定义的图标样式,那么有什么办法能够快速的将一张普通图片经过裁剪等操作后,制作生成一张icon图标文件呢,参考这…

如何给生成的exe加图标

一、简述 今天就简单介绍一下如何给exe加图标,其实很简单,但是主要是为了讲述另一个问题,这也是之前遇到的一个容易忽略的问题。 首先我们了解一下一共有多少个图标可以设置。 看到下面这张图,我们首先会了解到生成的一个exe程…

一键生成iosandroid应用图标

用的在线工具: https://toool.top/app-icon-generate 只需要准备一张 1024 x 1024 的图片 即可生成各个分辨率的应用图标 ,十分方便

奇舞周刊第 488 期:一个服务端同学的 Vue 框架入门及实践

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 一个服务端同学的 Vue 框架入门及实践 做为服务端同学,接触前端代码较少,刚毕业的时候用过 jQuery Bootstrap2/3,当时的感觉就是,容…

国内站的ai聊天网站

国内站的ai聊天网站 网站如下: https://chat-gpt.org/chat其他网站如下: 在线体验ChatGPT网站集合 UI与官方相似https://chat.theb.ai/https://chatgpt-35-turbo.com/https:

Threads实测:和推特很像,马斯克大呼不讲武德

自从马斯克买下了推特,这个全球最大的在线社区就永远不缺少乐子,马斯克的整活能力在全球网红中都算是顶尖的。只不过,以前他只能在自己的推特账号那一亩三分地上整活,把推特买回家后,整个推特都变成了他的“乐园”。前…

AIGC明星独角兽爆雷!7亿融资烧大半,拖欠员工工资,创始人被扒得千疮百孔...

丰色 萧箫 发自 凹非寺 Stable Diffusion背后团队创始人,被曝巨大丑闻! 这两天,福布斯发布的一则长新闻在网上病毒式传播: 30多位前员工投资人现身说法,细数Stability AI老板Emad Mostaque(伊玛德莫斯塔克&…

马化腾聊天截图,被疯狂转发。

推荐阅读: 《在一个公司死磕了 5~10 年的人最后都怎么样了?》 《西安,被误解为贼城似乎是一件很正常的往事......》 1 裁员 前一段时间,一个有大佬九边,写了一篇关于裁员的文章,被马化腾给转发了&#xff0…

在「机器人领域」使用ChatGPT提高生产力

最近几个月,ChatGPT 大火,它是OpenAI于去年11月底推出的人工智能聊天机器人程序,已经成为了历史上增长最快的消费者应用程序 [1]。毫无疑问,ChatGPT受到了各个行业的广泛关注。 其中在机器人领域,微软于今年2月20日发布…

2020年一线城市程序员工资大调查

趋势 从趋势上看,基本上一线城市的工资都是上升的趋势。 人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元&#xff…

人工智能,落地为王!深圳人工智能企业百强榜超七成为应用层

中国工程院院士、香港中文大学(深圳)校长徐扬生认为,深圳具有完备的制造产业链,包括制造机器人的产业链,为设计、开发、制造人工智能系统提供了得天独厚的条件,这也不难理解为何深圳AI企业百强榜中超七成为应用层了。 人工智能作为…

致敬我在深圳大学的C++启蒙老师,跟着他学计算机编程就对了 (文末赠书5本)

致敬我的C启蒙老师,跟着他学计算机编程就对了 摘要 讲述了一个故事,介绍了一位良师,一段因C而续写的回忆,希望对各位看官有所帮助和启发。 文章目录 1 写在前面2 我的C启蒙老师3 谈谈老师给我的启发4 友情推荐5 文末福利 1 写在前…

本周杭州程序员工资大调查,高于深圳和广州

今天晚上11点,爬了某招聘网站,获取近7日内杭州的程序员工资2344条。其中,有工资的2275条。本文分别统计了工资的分布,工资和学历,工作经验和公司的性质,规模,产业的关系。 这里的程序员包括普通…

不得不说的Telegram : 币圈与链圈的微信

如果让你在「大而全的应用」和「小而美的应用」之间选一个,你会选择哪一个?你可以带着这个问题来阅读这篇软件体验报告,今天的主角是一款 IM 软件:Telegram Telegram Messenger 是一个跨平台的实时通讯软件,它的客户端…

再次来到爱丁堡

工作了几年后,作为访问学者再次来到爱丁堡。 出国访学有下面几个原因: 不太喜欢国内的科研环境。太浮躁,杂事也多。没有几个真正想搞学术的,大部分学术圈的人要么躺平,要么天天想着快速捞名利,我那个差单位…

【2020年领域新星】 赵彦鹏 爱丁堡大学

【2020年领域新星】赵彦鹏,爱丁堡大学语言、认知和计算研究所博士生,导师是Ivan Titov和Mirella Lapata教授。研究兴趣是结构预测和隐变量模型,现在主要关注语言结构和图像结构的学习,以及二者之间的联系。论文“Visually Grounde…

InstructGPT高效实践——【DeepSpeed-Chat】源码详解(2/3):Supervised Finetuning、Reward Model Finetuning

目录 前言1 phase-1: Supervised Finetuning1.1 训练数据样例1.2 训练过程1.3 关键代码详解1.3.1 基座模型结构1.3.2 LoRA结构及其正向传播1.3.3 phase1的指标评估 1.4 实例测试1.5 相关拓展1.5.1 多轮对话性能1.5.2 本阶段训练更倾向过拟合 1.6 版块相关问题 2 phase-2: Rewar…

NEWS|药物发现公司正在定制ChatGPT:方法如下

大型语言模型正在帮助科学家与人工智能交谈,甚至产生潜在的药物靶点。 近几个月来,世界大部分地区都被OpenAI的ChatGPT等文本生成引擎的出现所震惊,人工智能(AI)算法能够生成看起来像是由人类编写的文本。虽然像微软和…