首页 > 其他分享 >FaceShift人脸表情识别原理分析

FaceShift人脸表情识别原理分析

时间:2024-03-14 12:59:17浏览次数:23  
标签:FaceShift 脸部 关键点 人脸 BlendShape 识别 表情

之前负责了一个数字人应用平台的建设,其中一个核心功能是用摄像头实时捕捉用户的脸部图像,然后通过表情识别算法分析出用户的表情信息,驱动数字人做出同样的表情。这个功能已经在动画电影制作和游戏动画人物制作中频繁使用,目前更多的是穿戴专业的动捕服在专业的动捕篷中完成,制作成本很高。现在希望能做出使用更简单、价格更便宜的方案。

1. FaceShift介绍

经过前期大量考察,FaceShift的实现方案是很理想的参考方案。这里有必要先对FaceShift公司和产品做个简单介绍。

Faceshift是位于瑞士苏黎世的一家实时动作捕捉技术创业公司,成立于2011年,公司诞生于瑞士联邦科技学院的计算机图形与几何实验室。

Faceshift公司的产品Faceshift Studio通过3D传感技术,无需穿戴专业动捕服,也不需要在脸上打标志点,就可以实现面部动作及表情实时捕捉,Faceshift生成的动画人物表情可与真人保持一致。这项技术被应用到了《星球大战》电影制作中。

FaceStudio动捕界面(图片来自于互联网)

由于Faceshift的出色表现,2015年被苹果收购,后来这项技术被用到了苹果的产品上。如果你正好用过Animoji动画表情App,就已经对他有了了解,因为Animoji动画表情正是来自于Faceshift的动捕技术。

Apple iPhone X提供Animoji动画表情(来源:Apple)

2. 表情动捕实现思路

回归主题,我们的方案就是复制FaceShift动捕的思路。但前方的道路是困难重重,FaceShift被苹果收购后,官网关闭了,在苹果官网中也找不到任何技术资料,目前我们手里有的唯一资料就是FaceShift被收购前发行的FaceShift Studio可运行版本,所以只能尝试通过分析FaceShift Studio的使用方法,逆向工程出FaceShift动捕原理的实现思路。实现的一些细节就不放上来了,只是把整体的思路整理一下分享出来。

2.1 表情训练

FaceShift里提供了50多个基础表情,比如闭眼、张嘴、皱眉等,人的丰富的表情可以通过这50多个基础表情线性组合表达出来。

FaceShift Studio中的组合表情制作(图片来自于互联网)

FaceShift Studio中内置了一个标准人脸3DMM模型(3DMM模型概念参考链接文章,这里不展开介绍了),这个标准模型上制作了50多个标准的BlendShape(BlendShape概念自行网上搜索),每个BlendShape对应一个基础表情。在表情动态捕捉阶段,其实就是通过算法不断计算这50多个基础表情的权重值,然后根据权重值组合出来最终的表情。

世界上很难找到两个长得完全一样的人,每个人都有自己的脸部特征,有的人胖一点,有的人脸长一点,有的人眼睛大,有的人眼睛小...,各不一样。所以用同一套基础表情(BlendShape)去带入动捕算法,不考虑每个用户的脸部特征,会为算法带来偏差,也就影响最终的识别效果。

在FaceShift Studio中提供了基础表情训练功能,训练阶段的任务就是要把标准人脸上的基础表情(BlendShape)转变成带有用户自己脸部特征的基础表情,这样每个用户都拥有一套自己特有的基础表情(BlendShape),在进行表情识别的时候,减少输入误差,让识别结果更准确。

基础表情训练过程主要通过4个步骤实现:

1、通过深度摄像头获得用户人脸的3维点云;

2、将3维点云转换成3维网格,这个网格信息已经包含用户脸部特征;

3、通过包裹变形算法用第2步得到的3维网格影响标准脸的3维网格,将用户脸部特征传递到标准脸的3维网格上;

4、从第3步得到的标准脸3维网络中把当前基础表情影响区域的点数据取出来生成新的基础表情(BlendShape),这样就得到了带有用户脸部特征的基础表情。

经过训练中立表情(图片来自于互联网)

特别说明

中立表情是脸部保持正常,不带有任何微表情的状态,被认为是表情识别中的‘0’状态。所有其他微表情都是在中立表情基础上做出来的。从脸部几何体构成的角度看,任何微表情都是在中立表情的基础上,脸部某些网格点在空间发生了位移带来的视觉效果。

2.2 表情识别

有了用户自己的一套微表情BlendShape,那表情识别的过程就转化为通过优化算法求解50多个BlendShape的权重值(权重值取值范围0~1),让这50多个BlendShape线性组合得到的复合表情与摄像头拍摄的每帧图像上用户的表情相吻合。

  1. 人脸关键点检测

对摄像头拍摄的每帧图像检测人脸关键点(包括:脸部轮廓,五官关键点),这些关键点带着用户的表情特征。网上可以找到不少做人脸关键检测方案,比如:dlib库、Google的Mediapipe都能做到。在实际应用过程中,不同方案检测到脸部关键点的准确度是有区别的,我们总是希望找到能够及时准确表达用户脸部特征的关键点检测方案。比较过很多方案,Google的Mediapipe方案和Intel Realsence深度摄像头SDK自带的检测方案相对更好。

2. 人脸模型关键点投影

在基础表情训练阶段提到FaceShift Studio内置了一个人脸模型,先在这个人脸模型中找到与脸部关键点一一对应的网格点。然后将这些网格点通过坐标变换投影到二维屏幕上,得到在二位屏幕上的像素坐标。通过优化算法得到一套基础表情(BlendSahpe)系数,让组合起来的复合表情投影到屏幕,得到的二维像素坐标与人脸关键点检测得到的屏幕坐标距离平方和最小。

网格点投影到二维屏幕的过程涉及到几个坐标系的转换:世界坐标系-->相机坐标系-->屏幕物理坐标系-->屏幕像素坐标系。经过转换得到的优化公式:

E=\sum_{i=0}^{n}\parallel \left ( sRS+t \right )_{i_{3d}}-Y_{i_{2d}}\parallel _{_{2}}^{2}

其中,S是人脸模型,s是缩放尺度,R是旋转矩阵,t是位移,Y是人脸检测点,n为人脸关键点个数。i_{2d}i_{3d}分别是人脸图像关键点及人脸三维模型点的索引。

这是个非线性最小二乘问题,可以用Gauss-Newton,Levenberg-Marquardt等算法求解,这里不展开讲,这部分可以参考“人脸重建速览,从3DMM到表情驱动动画”这篇文章。

通过求解得到每帧图像对应的基础表情(BlendShape)系数,也就实现了表情识别,但为了不让得到的表情失真,基础表情(BlendShape)系数限制在0~1之间。

3. 后续工作

表情识别的整个流程走通了,但识别精度和实时性上与FaceShift还是有明显差距,这个也是后面工作的重点,不断的调优,让表情识别精度和实时性不断提高。

标签:FaceShift,脸部,关键点,人脸,BlendShape,识别,表情
From: https://blog.csdn.net/weixin_43365462/article/details/136630763

相关文章

  • Tiktok/抖音旋转验证码识别方案
    一、引言在数字世界的飞速发展中,安全防护成为了一个不容忽视的课题。Tiktok/抖音,作为全球最大的短视频平台之一,每天都有数以亿计的用户活跃在其平台上。为了保护用户的账号安全,Tiktok/抖音引入了一种名为“旋转验证码”的安全验证方式。本文将深入解析Tiktok/抖音旋转验证码......
  • 基于opencv的手势识别
            当然可以,下面是一个使用OpenCV实现简单手势识别,并在摄像头捕捉的视频中描绘出手部轮廓为线条的示例。该代码会读取摄像头流,然后检测出手部,并用线条描绘出手的轮廓。  首先,你需要安装OpenCV库。如果你还没有安装,可以使用pip来安装:pipinstallopencv-pyt......
  • 【计算机毕业设计源码】基于OpenCV的人脸检测系统
    项目概况基于OpenCV的人脸检测系统可对人脸进行框线检测,利用OpenCV的检测算法对单个或多个人脸实现框线定位。运行环境基于OpenCV的人脸检测系统运行环境如下:Python:≥3.5OpenCV:≥4.0IDE工具:VisualStudioCode技术栈:Python+OpenCV+PyQt5主要功能基于Ope......
  • 项目分享|基于ELF 1开发板的远程监测及人脸识别项目
    今天非常荣幸地向各位小伙伴分享一个由共创社成员完成的远程监测及人脸识别项目,该项目依托ELF1开发板为核心硬件平台,构建了一套完整的视频监控系统,并在此基础上集成了人脸识别功能。接下来,就为各位小伙伴详尽展示这一项目的相关细节。项目实现步骤1.视频监控这一步骤中需......
  • 基于YOLOv5s的电动车入梯识别系统(数据集+权重+登录界面+GUI界面+mysql)
             本人训练的yolov5s模型,准确率在98.6%左右,可准确完成电梯内检测电动车任务,并搭配了GUI检测界面,支持权重选择、图片检测、视频检测、摄像头检测、识别结果拍照和在线标注数据集等功能。        并且为用户提供了登录注册功能,使用mysql数据库进行存储......
  • 基于深度学习的人员指纹身份识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a  3.算法理论概述      指纹识别技术是一种生物特征识别技术,它通过分析人类手指末端皮肤表面的纹路特征来进行身份认证。深度学习是机器学习的一个分支,特别适用于处理大规模高维数据,并在图像识别、语......
  • PLSQL登录ora_12541无法识别连接符
       tnsnames.ora文件配置时,有一定的格式要求,一般从其他地方粘贴时,地址端口服务名都不会有什么问题,这时粘贴时要注意各行的格式要求:<ATOMICSCHEMANAME>=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOSTNAME>)(PORT=<PORTNUMBER>)))(CON......
  • 人脸识别算法
    人脸识别已经成为了计算机视觉与生物识别领域被研究最多的主题之一人脸检测 :提取图像中的人脸,划定边界;人脸对齐 :使用一组位于图像中固定位置的参考点来缩放和裁剪人脸图像;人脸表征 :人脸图像的像素值会被转换成紧凑且可判别的特征向量,或称模板;人脸匹配 :选取并计算两个模板......
  • ESP32CAM使用Quirc识别二维码并连接WIFI
    ESP32CAM使用Quirc识别二维码并连接WIFI网上有教程,但是是要做出来很难,或者说做出来报错识别不了。前提:搭建好ESP-IDF环境CAMERA能成功初始化此处用的二维码识别库是用的quirc,如下这个和Github下载的差不多,加了个CMakeList,我会把这个传到我的Github上,感兴趣去下载Lesterbor/E......
  • 无线表格识别模型LORE转换库:ConvertLOREToONNX
    引言总有小伙伴问到阿里的无线表格识别模型是如何转换为ONNX格式的。这个说来有些惭愧,现有的ONNX模型是很久之前转换的了,转换环境已经丢失,且没有做任何笔记。今天下定决心再次尝试转换,庆幸的是转换成功了。于是有了转换笔记:ConvertLOREToONNX。这次吸取教训,环境文件采用Anacond......