首先要给futures绑定,注意需要用的几个

static const DWORD THIS_APP_FACE_FRAME_FEATURES =
FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInColorSpace
|FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInInfraredSpace
| FaceFrameFeatures::FaceFrameFeatures_PointsInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_RotationOrientation
| FaceFrameFeatures::FaceFrameFeatures_Happy
| FaceFrameFeatures::FaceFrameFeatures_RightEyeClosed
| FaceFrameFeatures::FaceFrameFeatures_LeftEyeClosed
| FaceFrameFeatures::FaceFrameFeatures_MouthOpen
| FaceFrameFeatures::FaceFrameFeatures_MouthMoved
| FaceFrameFeatures::FaceFrameFeatures_LookingAway
| FaceFrameFeatures::FaceFrameFeatures_Glasses
| FaceFrameFeatures::FaceFrameFeatures_FaceEngagement;

//为每个body创建一个source,注意绑定的features

IFaceFrameSource *   myFaceFrameSources[BODY_COUNT];
IFaceFrameReader*   myFaceFrameReaders[BODY_COUNT];
HRESULT hrface = false;
for (int i = 0; i < BODY_COUNT;i++){
hrface = CreateFaceFrameSource(myKinectSecsor, 0, THIS_APP_FACE_FRAME_FEATURES, &myFaceFrameSources[i]);
if (SUCCEEDED(hrface)){
hrface = myFaceFrameSources[i]->OpenReader(&myFaceFrameReaders[i]);
}
}

//get face point

HRESULT hr3 = false;
vector<RectI> myFaceRect;
for (int iFace = 0; iFace < BODY_COUNT; ++iFace)
{

// retrieve the latest face frame from this reader
IFaceFrame* pFaceFrame = nullptr;
hr3 = myFaceFrameReaders[iFace]->AcquireLatestFrame(&pFaceFrame);

BOOLEAN bFaceTracked = false;
if (SUCCEEDED(hr3) && nullptr != pFaceFrame)
{
// check if a valid face is tracked in this face frame
hr3 = pFaceFrame->get_IsTrackingIdValid(&bFaceTracked);
}

if (SUCCEEDED(hr3))
{
if (bFaceTracked)
{
IFaceFrameResult* pFaceFrameResult = nullptr;
RectI faceBox = { 0 };
RectI depthBox = {0};
PointF facePoints[FacePointType::FacePointType_Count];

hr3 = pFaceFrame->get_FaceFrameResult(&pFaceFrameResult);

// need to verify if pFaceFrameResult contains data before trying to access it
if (SUCCEEDED(hr3) && pFaceFrameResult != nullptr)
{
hr3=pFaceFrameResult->get_FaceBoundingBoxInColorSpace(&faceBox);
hr3=pFaceFrameResult->get_FaceBoundingBoxInInfraredSpace(&depthBox);
myFaceRect.push_back(depthBox);

cv::rectangle(bufferMat, cv::Point(faceBox.Left, faceBox.Top), cv::Point(faceBox.Right, faceBox.Bottom), cvScalar(0, 0, 255), 2);
if (SUCCEEDED(hr3))
{
hr3 = pFaceFrameResult->GetFacePointsInColorSpace(FacePointType::FacePointType_Count, facePoints);
}
for (int i = 0; i < 5; i++)
{
cv::circle(bufferMat, cv::Point(facePoints[i].X, facePoints[i].Y),2, cvScalar(255), 2);
}
}
destory(pFaceFrameResult);
}else if (myBody[iFace]){  //如果该body没被绑定,而这个body的骨骼又被提取到了,那么用下面的id来给source绑定上id
BOOLEAN bTracked = false;
// 检查被骨骼跟踪没有
hr3 = myBody[iFace]->get_IsTracked(&bTracked);
UINT64 bodyTId;
if (SUCCEEDED(hr3) && bTracked) {
// 获取跟踪id
hr3 = myBody[iFace]->get_TrackingId(&bodyTId);
if (SUCCEEDED(hr3)) {
// 更新跟踪id
myFaceFrameSources[iFace]->put_TrackingId(bodyTId);
}
}
}
}
destory(pFaceFrame);
}

faceframe kinect2.0 api 注意点相关推荐

  1. 天地图,js 4.0 api,简单调用,高手请绕行

    本文介绍使用天地图 js4.0 api,实现地图显示后台gps分布情况: 主要借用H5 GPS获取,利用天地图的背景展示: 效果图如下: 第一步,通过采集网页,手机gps数据,录入后台数据库:界面如下 ...

  2. php 接口 2.0,YII 2.0 API接口开发

    YII2.0 API接口开发 首先先安装 YII2.0 高级模板(安装请参考其他教程) 准备 添加数据库配置 common/config/main-local.php image 把backend目录 ...

  3. java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI(xxx

    在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个 ...

  4. Kinect2.0获取数据

    最近事情真是多,今天抽空研究一下Kinec2.0的数据获取! 系统要求 https://developer.microsoft.com/en-us/windows/kinect/hardware-se ...

  5. android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)

    Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的PreferenceScreen. (3.0/API 11 以前)是这样使用的 看代码: mypreference.xml and ...

  6. Android 5.0 API 的变化——开发人员注意

    Android 5.0 API变化 译自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0.html -- By N ...

  7. 本周ASP.NET英文技术文章推荐[03/23 - 04/05]:C#、Visual Studio、MVC、死锁、Web 2.0 API、jQuery、IIS7、FileUpload...

    摘要 本期共有9篇文章: 提高C#和Visual Studio 2008生产力的10个技巧 ASP.NET MVC Action过滤器:缓存和压缩 程序停止工作及其解决方法:第一部分:死锁 调用Dig ...

  8. 深度相机Kinect2.0三维点云拼接实验(三)

    文章目录 概要 刚体空间旋转的描述 旋转矩阵 欧拉角 四元数 刚体空间平移的描述 总结 概要   Kinect2.0是微软推出的一款RGB-D相机,它即支持普通相机的拍摄,也支持脉冲测量深度信息.本系 ...

  9. android版本兼容API24,Android 7.0 (API 24) 适配

    Android 7.0 (API 24) 适配 电池和内存 低电耗模式 此项新增的行为不会影响有关使您的应用适应Android 6.0(API级别23)中所推出的旧版本低电耗模式的建议和最佳做法,如对 ...

  10. Android开发者福利之--------Android 6.0 API

    Android 6.0 API 着手开发 要着手开发 Android 6.0 应用,您必须先获得 Android SDK,然后使用 SDK 管理器下载 Android 6.0 SDK Platform ...

最新文章

  1. C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用
  2. JS的数据访问及优化访问速度
  3. PHP 遇见 Serverless,帮你解决这些痛点
  4. linux移植wifi sd8688.bin 最新固件,[ZZ]浅析firmware完整生存和使用流程
  5. 基于roslyn的动态编译库Natasha
  6. 【GTK】信号量(signal)大全
  7. sqlyog怎么查找表_VBA代码解决方案第58讲:在VBA中查找指定工作表的实用方法
  8. HDU-5781 ATM Mechine(概率DP)
  9. Lucene4:创建一个简单查询
  10. Java字符串相关的类详解
  11. 计算机职高会考知识,2013年金华市职高会考各科目考纲汇总.doc
  12. 高仿网易评论列表效果之数据准备
  13. html画圆中有个正方形,Adobe Illustrator CS6中绘画圆形及正方形的操作使用方法
  14. PG-FP6烧录机1拖16上位机项目
  15. Markdown入门指南【我为什么要推荐你学习Markdown?】
  16. 2021-09-10体脂模块做体脂秤方案,体脂秤模块原理解析
  17. 四年级计算机考试反思,小学四年级信息技术考试质量分析报告
  18. 工业级无线路由器无线客户端的配置教程
  19. 信息安全实训笔记1——身份认证技术
  20. android 笔试题大全,2018年Android面试题大全

热门文章

  1. Vuex 实战:如何在大规模 Vue 应用中组织 Vuex 代码 | 掘金技术征文
  2. STM32正交编码器驱动电机
  3. 整理Oracle日期时间函数
  4. awk双文件互相匹配查找
  5. ai怎么平均排列_一篇AI打麻将的论文,理科生眼中的麻将是这样的
  6. cls_template.php on line 1067,ecshop php5.5兼容utf-8版本
  7. 单机多实例数据库搭建过程
  8. 多线程id为什么是负的?原因
  9. 大数斐波那契数列(nyoj655)光棍的yy
  10. ios android c跨平台,Unity 使用C/C++ 跨平台终极解决方案(PC,iOS,Android,以及支持C/C++的平台)...