前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >keras实战︱人脸表情分类与识别:人脸检测+情绪分类

keras实战︱人脸表情分类与识别:人脸检测+情绪分类

作者头像
机器学习AI算法工程
发布于 2018-03-15 06:44:52
发布于 2018-03-15 06:44:52
3.3K0
举报

脸识别热门,表情识别更加。但是表情识别很难,因为人脸的微表情很多,本节介绍一种比较粗线条的表情分类与识别的办法。

本次讲述的表情分类是识别的分析流程分为:
  • 1、加载pre-model网络与权重;
  • 2、利用opencv的函数进行简单的人脸检测
  • 3、抠出人脸的图并灰化;
  • 4、表情分类器检测

一、表情数据集

主要来源于kaggle比赛,下载地址。

在公众号 datadw 里 回复 keras 即可获取。

有七种表情类别: (0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral). 数据是48x48 灰度图,格式比较奇葩。

第一列是情绪分类,第二列是图像的numpy,第三列是train or test。


二、opencv的人脸识别

参考《opencv+Recorder︱OpenCV 中使用 Haar 分类器进行面部检测》

http://blog.csdn.net/sinat_26917383/article/details/69831495

理论略过,直接来看重点: (1)加载人脸检测器,haarcascade_frontalface_default.xml; (2)图片加载并灰化,cvtColor,可参考: opencv︱图像的色彩空間cvtColor(HSV、HSL、HSB 、BGR)

http://blog.csdn.net/sinat_26917383/article/details/70860910

(2)人脸探测,detectMultiScale.

# (1)加载人脸检测器

cascPath = '/.../haarcascade_frontalface_default.xml'

faceCascade = cv2.CascadeClassifier(cascPath)

# (2)图片加载并灰化

jpg_file = '/home/ubuntu/keras/image/8c80abb4gw1f3b5hxd3aaj20jg0cx411.jpg'

img_gray = cv2.imread(jpg_file)

img_gray = cv2.cvtColor(img_gray, cv2.COLOR_BGR2GRAY)

# 人脸探测

faces = faceCascade.detectMultiScale(

img_gray,

scaleFactor=1.1,

minNeighbors=1,# minNeighbors=5比较难检测

minSize=(30, 30),

flags=cv2.cv.CV_HAAR_SCALE_IMAGE

)

其中minNeighbors设置小一些,容易检测出来。这个检测器还是有点粗糙。

三、表情分类与识别

本节源自github的mememoji。

https://github.com/JostineHo/mememoji

网络结构:

opencv中的人脸检测的pre-model文件(haarcascade_frontalface_default.xml)和表情识别pre-model文件(model.h5)都在作者的github下载。

作者的github地址

在公众号 datadw 里 回复 keras 即可获取。

是利用Keras实现的。直接来看完整的代码:

import cv2

import sys

import json

import time

import numpy as np

from keras.models import model_from_json

emotion_labels = ['angry', 'fear', 'happy', 'sad', 'surprise', 'neutral']

# load json and create model arch

json_file = open('/.../model.json','r')

loaded_model_json = json_file.read()

json_file.close()

model = model_from_json(loaded_model_json)

# load weights into new model

model.load_weights('/.../model.h5')

def predict_emotion(face_image_gray): # a single cropped face

resized_img = cv2.resize(face_image_gray, (48,48), interpolation = cv2.INTER_AREA)

# cv2.imwrite(str(index)+'.png', resized_img)

image = resized_img.reshape(1, 1, 48, 48)

list_of_list = model.predict(image, batch_size=1, verbose=1)

angry, fear, happy, sad, surprise, neutral = [prob for lst in list_of_list for prob in lst]

return [angry, fear, happy, sad, surprise, neutral]

# -------------------直接预测-----------------------

img_gray = cv2.imread('/.../real-time_emotion_analyzer-master/meme_faces/angry-angry.png')

img_gray = cv2.cvtColor(img_gray, cv2.COLOR_BGR2GRAY)

angry, fear, happy, sad, surprise, neutral = predict_emotion(img_gray)

# -------------------人脸预测-----------------------

# 加载检测器

cascPath = '/.../real-time_emotion_analyzer-master/haarcascade_frontalface_default.xml'

faceCascade = cv2.CascadeClassifier(cascPath)

# 图像灰化

jpg_file = '/.../001.jpg'

img_gray = cv2.imread(jpg_file)

img_gray = cv2.cvtColor(img_gray, cv2.COLOR_BGR2GRAY)

# 人脸检测

faces = faceCascade.detectMultiScale(

img_gray,

scaleFactor=1.1,

minNeighbors=1,# minNeighbors=5比较难检测

minSize=(30, 30),

flags=cv2.cv.CV_HAAR_SCALE_IMAGE

)

# 表情画框

for (x, y, w, h) in faces:

face_image_gray = img_gray[y:y+h, x:x+w]

cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

angry, fear, happy, sad, surprise, neutral = predict_emotion(face_image_gray)

via : http://blog.csdn.net/sinat_26917383/article/details/72885715

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据挖掘DT数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
本文介绍了一种基于深度学习的人脸表情识别与分类方法,首先通过OpenCV和Tensortflow库进行人脸检测与表情图像预处理,然后使用Keras框架搭建了一个基于CNN的模型,利用迁移学习进行预训练,最后在COCO数据集上进行微调,实现了表情识别与分类的功能。
悟乙己
2018/01/02
4.3K0
keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
基于深度学习的面部表情识别系统
来源商业新知网,原标题:零起步,数据科学家手把手教你coding表情识别(内附代码)
商业新知
2019/06/14
7.8K0
基于深度学习的面部表情识别系统
教程 | 100行代码搞定实时视频人脸表情识别
好就没有写点OpenCV4 + OpenVINO的应用了,前几天上课重新安装了一下最新OpenVINO2020.3版本,实现了一个基于OpenCV+OpenVINO的Python版本人脸表情识别。100行代码以内,简单好用!
OpenCV学堂
2020/07/08
2.5K0
视频人脸检测——OpenCV版(三)
视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》 实现思路: 调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,
磊哥
2018/05/08
1.3K0
视频人脸检测——OpenCV版(三)
使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练
     OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的demo
用户9127725
2022/08/08
1.8K0
基于python的OpenCV人脸识别模型
import numpy as npimport cv2# 人脸识别分类器faceCascade = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml')# 识别眼睛的分类器eyeCascade = cv2.CascadeClassifier(r'haarcascade_eye.xml')# 开启摄像头cap = cv2.VideoCapture(0)ok = Truewhile ok: # 读取摄像头中的图像,ok为是否读取成功的
常温阔乐
2022/12/08
6530
HAAR人脸检测
算法:HEAR人脸检测是构造能够区分包含人脸实例和不包含人脸实例的分类器。这些实例称为“正类”(包含人脸图像)和“负类”(不包含人脸图像)。
裴来凡
2022/05/28
1.8K0
HAAR人脸检测
python+opencv 实现图像人脸检测及视频中的人脸检测
原文链接:https://yetingyun.blog.csdn.net/article/details/108153075 创作不易,未经作者允许,禁止转载,更勿做其他用途,违者必究。
叶庭云
2022/01/10
1.4K0
python+opencv 实现图像人脸检测及视频中的人脸检测
openCV人脸识别简单案例[通俗易懂]
我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。
全栈程序员站长
2022/09/01
7880
用Python在25行以下代码实现人脸识别
在本文中,我们将看到一种使用Python和开放源码库开始人脸识别的非常简单的方法。
Python知识大全
2020/02/13
9420
用Python在25行以下代码实现人脸识别
Python制作动态人脸识别:实时人脸检测动效
人脸识别技术在现代社会中应用广泛,从安防监控到手机解锁,都是其典型应用。在这篇博客中,我们将使用Python来实现一个简单的实时人脸检测动效。通过利用OpenCV库,我们能够轻松捕捉摄像头视频流并检测人脸。
屿小夏
2024/09/25
2470
Python中使用opencv-python进行人脸检测
之前写过一篇VC++中使用OpenCV进行人脸检测的博客。以数字图像处理中经常使用的lena图像为例,如下图所示:
ccf19881030
2024/05/24
2100
Python中使用opencv-python进行人脸检测
Python使用Opencv进行图像人脸、眼睛识别实例演示
人脸识别是一种可以自动检测图像或视频中存在的人脸的技术。它可以用于各种应用,例如安全控制,自动标记照片和视频,以及人脸识别解锁设备等。在这篇博客中,我们将详细讨论人脸识别技术,以及如何使用 Python 中的 OpenCV 库实现人脸识别。
小蓝枣
2023/04/24
1.4K0
Python使用Opencv进行图像人脸、眼睛识别实例演示
记录一下人脸识别
需要将 haarcascade_frontalface_default.xml haarcascade_eye_tree_eyeglasses.xml 放入当前文件夹 或者你使用绝对路径也可以 这两个文件在\python\Lib\site-packages\cv2\data\ 里面 电脑没有摄像头的话可以使用手机当摄像头 在手机(安卓\IOS都可以)和电脑上面下载iVcam 并用数据线连接起来 下载地址:https://www.e2esoft.cn/ivcam/ 然后我发现我的台式电脑 使用上面那个软件 是0才可以运行 也就是选择笔记本摄像头才可以 如果你选的1 USB摄像头没有反应 不妨试试0 笔记本摄像头
残浔
2023/05/11
4570
记录一下人脸识别
超有趣!手把手教你使用树莓派实现实时人脸检测
选自hackster 作者:MJRoBot 机器之心编译 本文介绍了如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目。该项目不仅描述了识别人脸所需要的具体步骤,同时还提供了很多扩
机器之心
2018/05/10
2.4K0
简单人脸识别一之使用opencv+cnn网络实现人脸识别
最近在研究目标检测这个方向,看到网上有很多的人脸识别帖子,所以也想着上上手看看。当时是做了三个模型出来,第一个就是网上很通用普遍的opencv+简单三层cnn网络来实现的,说实话效果真的一般吧!具体的下面再细细陈述。第二个是把三层cnn网络换成了残差网络。因为自己刚好也是学习了残差网络。就想着生搬硬套过来,但效果说实话很迷,时好时坏,把我是整蒙逼了,后面也会提的。最后一个是用opencv+MTCNN+FaceNet来实现的,效果就比较好了,训练速度快,检测人脸的准确率也比前两个模型更好。我接下来会写三篇文章来一一介绍!
全栈程序员站长
2022/08/26
1.9K0
简单人脸识别一之使用opencv+cnn网络实现人脸识别
【OpenCV人脸识别入门教程之二】人脸检测
本篇文章主要介绍了如何使用OpenCV实现人脸检测。本文不具体讲解人脸检测的原理,直接使用OpenCV实现。
全栈程序员站长
2022/06/26
8450
【OpenCV人脸识别入门教程之二】人脸检测
VC++中使用OpenCV进行人脸检测
对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序,
ccf19881030
2024/05/24
1580
VC++中使用OpenCV进行人脸检测
关于OpenCV for Python入门-自带人脸检测算法比较
本来学习OpenCV的目的就是为了做人脸识别、车辆识别、人群计数等等,识别人脸首先要进行人脸检测,OpenCV中内置了Haar Cascade人脸分类器,其中包括haarcascade_frontalface_alt、haarcascade_frontalface_alt_tree、haarcascade_frontalface_alt2、haarcascade_frontalface_default这四种,本文不求甚解,只是从比对上判断一下这几种内置分类器的可用性。
python与大数据分析
2022/04/02
6750
关于OpenCV for Python入门-自带人脸检测算法比较
Python | Opencv的人脸检测和人类识别
开始人类检测之前,我们要先获取一个特征数据。在opencv安装目录中,cv2/data文件夹,进入该文件夹后,里面全是特征文件,我们一般选用haarcascade_frontalface_default.xml。
用户9925864
2022/07/27
1.4K0
Python | Opencv的人脸检测和人类识别
推荐阅读
相关推荐
keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档