0

我们小组现在面临一个问题,我们的目标是通过 Kinect 设备实现一个使用身体动作的登录系统。也就是说,我们用肢体动作作为所谓的“密码”。为了登录,用户必须通过执行某些只有用户知道的动作来输入“密码”。所以我们只需第一步:检测和跟踪身体运动。第二步:分析。第 3 步:与默认密码比较。如果匹配,则登录成功。

我们在第二步并不感到困惑。问题是如何存储运动数据。我们知道,Kinect 可以为我们提供头部、颈部等身体的关节。我们如何保留或存储这些相关数据,以某种算法对其进行解析以进行比较,以便我们知道登录是否成功。

提前感谢您的建议。

4

1 回答 1

0

例如,您可以将每个关节位置数据写入任意文件,例如每个帧的 .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等,但我会推荐一个更光滑的文件格式;)

于 2015-10-14T09:10:35.813 回答