[实训题目EmoProfo]基于深度学习的表情识别服务搭建(一)

本文介绍了基于深度学习的表情识别服务的搭建过程,包括选择使用dlib进行人脸检测,利用caffe进行表情分类。文章讨论了dlib在光线不均匀情况下的性能问题,并提及未来将接入darknet以提升性能。此外,还概述了实现该服务的类定义、辅助函数以及执行文件的基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于深度学习的表情识别服务搭建(一)

背景

之前我完成了终端和服务端之间交流的全部内容,接下来我需要完成的是服务端识别线程的功能。完成之后,我们的系统应该就剩下前端和优化工作了

识别服务设计

我们称之为服务,是因为它并不能很好的和我们现有的系统无缝拼接,因为这个模块主要由Python实现,但是我们服务端最多只能是PHP+Java,我们的设计是这个样子的:

  • 后台的Java+PHP负责从终端和web端接受音频图片或上传的视频,而识别服务仅仅完成对已有图片的处理
  • 后台和识别服务通过网络方式通信,后台将从用户处接受到的文件名发送给识别服务,识别服务打开这些文件,完成识别,并将识别结果以json的格式发送给后台

有了具体框架,我们还需要定义识别服务的功能:

  • 找出图片中每一张脸的位置
  • 对图片中人脸的朝向进行分析
  • 对人脸的表情进行分析

那么我们就清楚了我们如何去实现这一系列功能

实现方式的选择

经过前期组内的研究,人脸识别应该使用caffe,darknet中虽然有相关的网络,但是darknet的输入只能是彩色图片,而人脸表情特征实际上使用黑白图片就能表述清楚,由于对框架了解不够深入,不知如何做出调整,所以我们先使用功能完善,组内熟悉的Caffe完成表情分类

在寻找脸部方位检测方法的时候我们找到了dlib,这个东西其实是挺不错的,有许多功能,包括人脸检测,头部位置检测,鉴于我们不得不使用它,并考虑到组内其他同学调试方便(如果直接使用darknet的话问题会比较有趣,因为组内所有同学中只有我的电脑有独立显卡,而darknet由于不成熟的原因并不支持传统的CPU加速方法,完成一张图片的检测,GPU只需几十毫秒,而CPU需要80秒),我们决定先完全使用dlib+caffe完成一套系统,darknet过一段时间再考虑

总结一下我们的选择:

  • 人脸检测:darknet(dlib)
  • 头部位置识别:dlib
  • 表情分类:caffe

dlib性能验证

经过我们的研究,dlib中人脸检测使用的是图形学方法,这在光线不均匀的情况下效果极差,表现为一下状态:

光照正常

光照不足

这样可以很明显的看出问题,但是基于深度学习方法的darknet似乎没有这样的烦恼

darknet效果

原本darknet的人脸检测框的没有这么方正,我对框选算法进行了一下修改,具体改动将在后续接入darknet的文章中详细介绍

功能实现

类定义:

class HPD():
    # 3D facial model coordinates
    landmarks_3d_list = [
        np.array([
            [0.000, 0.000, 0.000],  # Nose tip
            [0.000, -8.250, -1.625],  # Chin
            [-5.625, 4.250, -3.375],  # Left eye left corner
            [5.625, 4.250, -3.375],  # Right eye right corner
            [-3.750, -3.750, -3.125],  # Left Mouth corner
            [3.750, -3.750, -3.125]  # Right mouth corner
        ], dtype=np.double),
        np.array([
            [0.000000, 0.000000, 6.763430],  # 52 nose bottom edge
            [6.825897, 6.760612, 4.402142],  # 33 left brow left corner
            [1.330353, 7.122144, 6.903745],  # 29 left brow right corner
            [-1.330353, 7.122144, 6.903745],  # 34 right brow left corner
            [-6.825897, 6.760612, 4.402142],  # 38 right brow right corner
            [5.311432, 5.485328, 3.987654],  # 13 left eye left corner
            [1.789930, 5.393625, 4.413414],  # 17 left eye right corner
            [-1.789930, 5.393625, 4.413414],  # 25 right eye left corner
            [-5.311432, 5.485328, 3.987654],  # 21 right eye right corner
            [2.005628, 1.409845, 6.165652],  # 55 nose left corner
            [-2.005628, 1.409845, 6.165652],  # 49 nose right corner
            [2.774015, -2.080775, 5.048531],  # 43 mouth left corner
            [-2.774015, -2.080775, 5.048531],  # 39 mouth right corner
            [0.000000, -3.116408, 6.097667],  # 45 mouth central bottom corner
            [0.000000, -7.415691, 4.070434]  # 6 chin corner
        ], dtype=np.double),
        np.array([
            [0.000000, 0.000000, 6.763430]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值