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

2017 年 12 月 16 日 数据挖掘入门与实战 要学习更多点这→

 向AI转型的程序员都关注了这个号👇👇👇


大数据挖掘DT数据分析  公众号: datadw


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



本次讲述的表情分类是识别的分析流程分为:

  • 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



人工智能大数据与深度学习

搜索添加微信公众号:weic2c

长按图片,识别二维码,点关注



大数据挖掘DT数据分析

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘

长按图片,识别二维码,点关注

登录查看更多
21

相关内容

Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
【精通OpenCV 4】Mastering OpenCV 4 - Third Edition 随书代码
专知会员服务
39+阅读 · 2019年11月13日
吴恩达新书《Machine Learning Yearning》完整中文版
专知会员服务
145+阅读 · 2019年10月27日
[综述]深度学习下的场景文本检测与识别
专知会员服务
77+阅读 · 2019年10月10日
人脸专集4 | 遮挡、光照等因素的人脸关键点检测
计算机视觉战队
29+阅读 · 2019年4月11日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
人脸表情分类与识别:人脸检测+情绪分类
北京思腾合力科技有限公司
27+阅读 · 2017年12月18日
用深度学习keras的cnn做图像识别分类,准确率达97%
数据挖掘入门与实战
4+阅读 · 2017年12月17日
从传统方法到深度学习,人脸关键点检测方法综述
机器之心
14+阅读 · 2017年12月17日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
使用深度学习方法实现面部表情包识别
高可用架构
4+阅读 · 2017年7月14日
Arxiv
12+阅读 · 2019年4月9日
Arxiv
5+阅读 · 2019年2月28日
Arxiv
5+阅读 · 2018年4月17日
Arxiv
6+阅读 · 2018年1月14日
Arxiv
3+阅读 · 2017年12月14日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关资讯
人脸专集4 | 遮挡、光照等因素的人脸关键点检测
计算机视觉战队
29+阅读 · 2019年4月11日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
人脸表情分类与识别:人脸检测+情绪分类
北京思腾合力科技有限公司
27+阅读 · 2017年12月18日
用深度学习keras的cnn做图像识别分类,准确率达97%
数据挖掘入门与实战
4+阅读 · 2017年12月17日
从传统方法到深度学习,人脸关键点检测方法综述
机器之心
14+阅读 · 2017年12月17日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
使用深度学习方法实现面部表情包识别
高可用架构
4+阅读 · 2017年7月14日
相关论文
Top
微信扫码咨询专知VIP会员