深度学习的浅实践:开源软件/数据库实现表情识别(1)

深度学习的浅实践:开源软件/数据库实现表情识别(1)

大数据加深度学习背景下的计算机视觉使得图像检测和识别上了一个新台阶。随着计算和数据资源的进一步发展,面对一个新的任务,收集足够多的数据,人工精确标注,训练深度神经网络,这样一个流程似乎可以解决一部分实际问题。长远来说这个流程是否合理本文先不讨论。在此,我们试试使用这个套方法从训练深度模型开始,实现一个实时的人脸表情识别程序。

前言

-语言&平台
Python, Ubuntu 14.04。python和之后依赖的库都是跨平台的,因此其他系统应该也OK。
- 基本思路
最终效果是一个live demo, 从摄像头获取视频,逐帧进行人脸检测,对每个检测到的人脸,输入一个表情分类器,输出分类结果。人脸检测使用现有的开源实现。人脸表情分类器使用现有的开源数据库和深度学习框架训练得到。
- 使用到的工具
OpenCV, Numpy, MXNet

这个小玩意是我目前做视觉研究过程中的一个自娱自乐的小玩意。由于步骤稍微有点多,分几篇写吧。

  1. 首先得有脸:使用OpenCV进行视频人脸检测
  2. 给机器准备教材:所谓表情识别,得准备好训练样本让计算机从中学习,所谓机器学习嘛
  3. 让机器学习:使用MXnet训练一个深度神经网络作为表情分类器。
  4. 实时测试:有人脸了,有分类器了,串起来,万事大吉。

首先得有脸

表情分析当然得首先得有脸了。虽然Gitbub已经有deep learning 实现的人脸检测了,例如https://github.com/guoyilin/FaceDetection_CNN,可是检测速度还有可用性上可能还需花点心思,这里就直接使用OpenCV的人脸检测了。

接触Python 时间不长,在如何安装OpenCV使得在python里面直接调用也花了点时间调查。后来才发现其实非常简单,基本思路就是编译好OpenCV后,把其中编译出的cv2.so文件复制到python的包路径下即可,例如usr/local/lib/python2.7/site-packages.
可参见:http://docs.opencv.org/3.1.0/dd/dd5/tutorial_py_setup_in_fedora.html#gsc.tab=0

使用OpenCV进行人脸检测非常简单, 目前广泛使用的是一个基于harr 特征的cascaded检测器。好吧,这是十几年前老掉牙的检测器了。
直接上代码:

import cv2

model_file = 'etc/haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(model_file)

video_capture = cv2.VideoCapture(0)

while True:
    ret, frame = video_capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30))
    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    # Display the resulting frame
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capture.release()
cv2.destroyAllWindows()

代码Github: https://github.com/zhzhanp/facial_expression_recognition/blob/master/demo/demo.py
不涉及什么具体算法,效果图如下:

你可能感兴趣的:(大数据,开源软件,计算机视觉,深度学习,表情识别)