【问题标题】:How to store or keep Kinect movement tracking data?如何存储或保留 Kinect 运动跟踪数据?
【发布时间】:2015-10-11 07:41:31
【问题描述】:
我们小组现在面临一个问题,我们的目标是通过 Kinect 设备实现一个使用身体动作的登录系统。也就是说,我们用肢体动作作为所谓的“密码”。为了登录,用户必须通过执行某些只有用户知道的动作来输入“密码”。所以我们只是
第 1 步:检测和跟踪身体运动。
第二步:分析。
第 3 步:与默认密码比较。如果匹配,则登录成功。
第二步我们就不糊涂了。问题是如何存储运动数据。我们知道,Kinect 可以为我们提供头部、颈部等身体的关节。我们如何保留或存储这些相关数据,以某种算法对其进行解析以进行比较,以便我们知道登录是否成功。
提前感谢您的建议。
【问题讨论】:
标签:
gesture-recognition
openni
3d-modelling
simple-openni
kinect-interaction
【解决方案1】:
例如,您可以将每个关节的位置数据写入任意文件,例如每一帧的 .txt。
像这样:
void WriteSkeletonToFile(const nite::UserData& user, std::string filename) {
std::ofstream skeletonFile;
skeletonFile.open(filename + ".txt", std::fstream::out | std::fstream::app);
auto writeJointCoordinates = [&skeletonFile](const nite::SkeletonJoint& joint) {
skeletonFile << joint.getPosition().x << ",";
skeletonFile << joint.getPosition().y << ",";
skeletonFile << joint.getPosition().z << ",";
};
//Center body parts
writeJointCoordinates(user.getSkeleton().getJoint(nite::JOINT_HEAD));
writeJointCoordinates(user.getSkeleton().getJoint(nite::JOINT_NECK));
... continue for each joint
skeletonFile << "\n";
skeletonFile.close();
之后您可以再次阅读并随意使用它。但是在将其与存储的位置进行比较时,请记住将其与您的活动骨架位置相匹配。
你当然可以保存额外的关节数据,比如旋转(这些都是用位置计算的,所以不是真的必要)、ID 等,但我会推荐一个更光滑的文件格式;)