kinect v2 面部模型
来源:互联网 发布:市场开发矩阵 编辑:程序博客网 时间:2024/04/20 17:08
原文 请戳这里
http://blog.csdn.net/dustpg/article/details/39455813
使用SDK: Kinect for Windows SDK v2.0 public preview1409
同前面,因为SDK未完成,不附上函数/方法/接口的超链接。
是的,微软在9月16日更新了SDK。没看具体更新内容,但是感觉上解决了一些bug,比如x86的Fusion。
这次说说高清面部帧的面部模型。
Kinect 2可以根据面部进行实时面部建模,感觉高大上,但是目前不能捕捉舌头,是个遗憾。
毕竟颜艺中舌头的地位可不低啊。
说到模型自然当然就是顶点集合啦,目前面部模型的定点数是1347,利用GetFaceModelVertexCount获取,
请注意这是函数,而不是宏定义,也就是说强烈建议使用动态分配,而不是静态分配。
嗯,1347,1+3+4+7=15,也就说是三角面咯。但是这节不涉及,毕竟这节是2D的,将顶点显示出来就好了。
怎么获取面部模型呢?首先,面部模型对应的接口是IFaceModel,使用IFaceModel::CalculateVerticesForAlignment,
同前面,每(高清面部)帧需要更新面部对齐IHighDefinitionFaceFrame::GetAndRefreshFaceAlignmentResult.
那么怎么获取IFaceModel,一种方法是利用IHighDefinitionFaceFrame::get_FaceModel等(帧源也能),但是这样,
相当于每帧都会创建一个面部模型,即使我们释放掉,内存也没有回收。有点像内存泄漏,不过只是内部引用计数未归零。
这样会严重导致性能。所以使用函数CreateFaceModel即可,看参数名就知道了,很简单。
所以我们的大致步骤:
创建资源与事件
在高清面部临帧事件里面更新 面部对齐, 计算面部模型,将面部模型顶点映射为彩色空间
在刻画是顺便画这些点即可。
当然,还要保证跟踪ID有效,事件模式在多个事件就有点麻烦了,没有轮询模式简单。
为了效率,这里选择ICoordinateMapper::MapCameraPointsToColorSpace即数组转换,省去单个转换中虚函数的开销。
所以我们需要申请两块定点缓存,一个3D的一个2D的。
自然,动态内存分配需要时间,加上假设第一次分配成功但是第二次分配失败还要回滚。这里一次申请即可。
- // 创建顶点缓存
- if (SUCCEEDED(hr)){
- m_pFaceVertices = reinterpret_cast<CameraSpacePoint*>(malloc(
- (sizeof(CameraSpacePoint) + sizeof(ColorSpacePoint)) * m_cFaceVerticeCount)
- );
- if (!m_pFaceVertices) hr = E_OUTOFMEMORY;
- }
- // 修改数据
- if (SUCCEEDED(hr)){
- const_cast<const ColorSpacePoint*>(m_ImagaRenderer.data.face_points) =
- reinterpret_cast<const ColorSpacePoint*>(m_pFaceVertices + m_cFaceVerticeCount);
- const_cast<UINT&>(m_ImagaRenderer.data.face_points_count) = m_cFaceVerticeCount;
- }
也算是小技巧吧,不过因为使用了const,所以还有点麻烦。
差不多就是这样:
下载地址....见评论区或者到笔者资源区里面寻找,这连10kb的东西都要审核...
这次是2D,下次是3D,不知道是用D3D,还是抱Unity的大腿....
- kinect v2 面部模型
- Kinect for Windows SDK v2.0 开发笔记 (十二) 高清面部帧(3) 面部模型(2D)
- Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
- Kinect for Windows SDK v2.0 开发笔记 (十四) 高清面部帧(5) 面部模型 3D
- Kinect面部模型(2D)
- Kinect v2.0原理介绍之十三:面部帧获取
- Kinect v2.0原理介绍之九:高清面部帧(2) 面部特征对齐
- Kinect for Windows SDK v2.0 开发笔记 (十一) 高清面部帧(2) 面部特征对齐
- Kinect for Windows SDK v2.0 开发笔记 (九)面部帧获取
- Kinect for Windows SDK v2.0 开发笔记 (十) 高清面部帧(1) FACS 介绍
- Kinect v2.0原理介绍之八:高清面部帧(1) FACS 介绍
- Kinect v2.0原理介绍之十:获取高清面部帧的AU单元特征保存到文件
- 初接触Kinect v2
- Kinect v2 简介
- Kinect V2基本资料
- kinect v2 标定
- 基于Kinect v2+PCL的模型奶牛重建(上)——数据获取
- 基于Kinect v2+PCL的模型奶牛重建(下)——点云融合
- iOS安全攻防(十五):使用iNalyzer分析应用程序
- 为什么寄存器比内存快
- Java中sleep()与wait()的解读
- jquery-datatable之服务器分页
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- kinect v2 面部模型
- Linux的时间与时钟中断处理
- Android Fragment 基本介绍
- DIV 弹出层(笔记)
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- 多线程及同步
- java提高篇(二)-----理解java的三大特性之继承
- 学习Javascript的8张思维导图
- 有1至10w的顺序的数字,从中任意去掉两个之后打乱,然后找到被去掉的这两个数字