在预先录制的 ONI 文件上使用 openNI 进行骨架跟踪时出现异常

Posted

技术标签:

【中文标题】在预先录制的 ONI 文件上使用 openNI 进行骨架跟踪时出现异常【英文标题】:Exception while Skeleton Tracking using openNI on pre-recorded ONI file 【发布时间】:2012-10-27 08:33:33 【问题描述】:

我正在尝试在预先录制的 .oni 文件上运行示例 openNI Skeleton Tracking 应用程序(UserTracker.java 应用程序)。我编辑了 SamplesConfig.xml 文件以引导来自 ONI 文件的输入,而不是 Kinect(我实际上没有)。但是,我得到以下异常。有人可以帮我吗?

org.OpenNI.StatusException: Function was not implemented!

at org.OpenNI.WrapperUtils.throwOnError(WrapperUtils.java:30)

at org.OpenNI.Context.initFromXmlEx(Context.java:371)

at org.OpenNI.Context.createFromXmlFile(Context.java:36)

at UserTracker.<init>(UserTracker.java:149)

at UserTrackerApplication.main(UserTrackerApplication.java:67)

任何帮助将不胜感激。谢谢!

编辑:我找到了一个解决方案 here,这消除了我之前遇到的异常,但现在我得到了以下内容!

org.OpenNI.StatusException:此操作无效!

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,我想从我生成的 .oni 文件中读取数据,但遇到了同样的问题。现在问题已经解决了,也许你也解决了,但我认为与可能来到这篇文章的其他人分享信息很重要。顺便在别人的帖子里发现了一些线索。

所以这是解决方案。 NiUserTracker 示例可以与 .oni 文件一起使用,因此我检查了代码,他们执行以下操作:

xn::Player g_Player; //Global variable

// 这在主函数或其他函数中

if (argc > 1)

    nRetVal = g_Context.Init();
    CHECK_RC(nRetVal, "Init");
    nRetVal = g_Context.OpenFileRecording(argv[1], g_Player);
    if (nRetVal != XN_STATUS_OK)
    
        printf("Can't open recording %s: %s\n", argv[1], xnGetStatusString(nRetVal));
        return 1;
    

这是 C++ 代码,我使用 C++。所以你可以看到,如果他们想打开一个录制的 .oni 文件,他们不会通过 XML 文件初始化 kinect,他们只是通过 Init() 方法初始化它,然后用 openFileRecording 方法打开一个文件。

如果你想打开一个 .oni 文件不需要修改你的 XML,这样你就可以做一个应用程序,让你选择是使用 .oni 还是 kinect .

我希望这对某人有所帮助。

干杯。

【讨论】:

以上是关于在预先录制的 ONI 文件上使用 openNI 进行骨架跟踪时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

在多线程应用程序中使用 opencv waitKey()

使用 python 和 OpenNI2 录制 Orbbec Astra 流

将预先录制的音频播放到语音通话中

求PS高手进、我有一个PSD文件、想把里面的一组动作录制成ant、我录制了几次颜色都不对、高手加Q说

OpenNI2无法初始化库 - 在项目文件夹中查找驱动程序.dll?

ONI无法启动: Uh oh! Unable to launch Neovim...