77范文网 - 专业文章范例文档资料分享平台

主要内容

来源:网络收集 时间:2018-11-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

主要内容:

? ?

姿势探测识别 手势探测识别

一、姿势探测识别 1.1 内容介绍

NITE 2的姿势探测识别功能和人体骨骼跟踪一样,是由

UserTracker提供的,在NiTE 2.0版本中,提供了两种姿势:“POSE_PSI”(我称它为“投降姿势”)和“POSE_CROSS_HAND”(称之为“双手抱胸”),除此之外,我们没办法提供自己设定的特定姿势的探测和识别。

在之前的版本中,由于“POSE_PSI”是用来做骨架跟踪校正的标志姿势使用的,但后来NITE提供了不用校正姿势的情况下就可以进行骨架跟踪了,所以在没有特殊使用的情况下,本人(谈谈NITE 2与OpenCV结合的第二个程序(提取人体骨骼坐标))觉得在骨骼跟踪上,姿势的探测已然成为了多余的了;但对于使用姿势识别有关方面的研究的,我想这个姿势探测识别应该还是重要的,没准在NITE后面的版本中提供”自制的特定姿势“跟踪识别了。

由于在NITE中主要提供的是人体跟踪和手的跟踪,而人体姿势探测属于前者,所以姿势探测识别和人体骨骼跟踪一样,都是使用UserTracker。首先通过获得新的使用者信息;然后根据指定使用者,利用UserTracker开始进行姿势的探测;最后根据

每次探测到最新的姿势资料,进行判定识别,以及开始我们自己需要的处理工作。

1.2 代码介绍

同样的,直接上代码说明如何利用UserTracker进行姿势探

测。

#include \#include // 载入NiTE头文件#include // using namespaceusing namespace std;using namespace nite;int main( int argc, char** argv ){ // 初始化NiTE环境 NiTE::initialize(); // 创建UserTracker跟踪器 UserTracker mUserTracker;

mUserTracker.create(); while(true) { // 读取帧信息 UserTrackerFrameRef mUserFrame;

mUserTracker.readFrame( &mUserFrame); // 通过帧信息,获得用户数据UserData const Array& aUsers = mUserFrame.getUsers(); for( int i = 0; i < aUsers.getSize(); ++ i ) { const

UserData& rUser = aUsers[i]; const UserId& uID = rUser.getId(); if( rUser.isNew() ) { cout << \ << uID << \ << endl; // 为每一个新用户进行姿势探测 cout << \ << uID<< endl; // 探测uID的两种姿势 mUserTracker.startPoseDetection( uID, POSE_PSI ); mUserTracker.startPoseDetection( uID,

POSE_CROSSED_HANDS ); } else if( rUser.isLost() ) { cout << \ << uID << \ << endl; } else { // 读取用户的“POSI_PSI”的姿势状态 const PoseData& rPosePSI = rUser.getPose( POSE_PSI ); // 当

做了“POSI_PSI”时: if( rPosePSI.isEntered() ) cout << \开始---投降姿势(PSI pose)\ << endl;

if( rPosePSI.isHeld() ) cout << \保持---投降姿势(PSI

pose)\ << endl; // 当做完了“POSI_PSI”后,双手放下时: if( rPosePSI.isExited() ) cout << \停止---投降姿势(PSI pose)\ << endl; // 同样的读取“POSE_CROSSED_HANDS”的姿势状态 const PoseData& rPCH =

rUser.getPose( POSE_CROSSED_HANDS ); if( rPCH.isEntered() ) cout << \开始---双手抱胸(Cross Hand pose)\ << endl; if( rPCH.isHeld() ) cout << \保持---双手抱胸(Cross Hand pose)\ << endl; if( rPCH.isExited() ) cout << \停止---双手抱胸(Cross Hand pose)\ <<

endl; } } } // 关闭UserTracker跟踪 mUserTracker.destroy(); // 关闭NITE环境 NiTE::shutdown(); return 0;}

上图:

当开始姿势探测时,只要双手举起,PSI就会触发,使

rPosePSI.isEntered()值为true;当保持着这个姿势一段时间,就会使rPosePSI.isHeld()值为true,表示目前的状态为保持着投降姿势;当双手放下时,rPosePSI.isExited()值为true,表示不再保持着投降姿势。同样的道理,当你做出”双手抱胸“的姿势(POSE_CROSSED_HANDS)时,也同样提供isEntered()、

isHeld()和isExited()三个函数来表示当前探测的姿势的状态情况。

注:当我无论如何做出”双手抱胸“的姿势

(POSE_CROSSED_HANDS)时,都无法触发这一姿势的跟踪,所以我的结论是我还不知道怎么去”双手抱胸“~~~

1.3 总结

? ? ?

对于姿势探测识别,主要包括以下几个步骤: 初始化NiTE环境:NiTE::initialize();

创建UserTracker跟踪器:UserTracker::create(); 读取跟踪器帧信息:

UserTracker::readFrame( &UserTrackerFrameRef);

?

通过帧信息,获得用户数据UserData:mUserFrame::getUsers();

?

对特定用户开始姿势探测(包括”投降姿势“和”双手抱胸姿势“的探测):UserTracker::startPoseDetection(UserId user, PoseType type);

?

读取用户的指定姿势的状态信息:PoseData& getPose(PoseType type);

?

主要有isEntered()、isHeld()、isExited()三个函数来表示当前探测的姿势的状态情况;

? ?

停止UserTracker跟踪器:UserTracker::destroy(); 最后停止NiTE环境:NiTE::shutdown();

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库主要内容在线全文阅读。

主要内容.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/296378.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: