Сбой примера OpenNI UserTracker.java - PullRequest
15 голосов
/ 26 июля 2011

Я собрал OpenNI и Sensor из источника на Github и установил Nite. Я проверил это на Debian с ядром 2.6.39 и с разными версиями Java, а также на другом компьютере с Lubuntu 11.04, а также с нестабильной OpenNI и датчиком avin2 - тот же результат. Я также тестировал с готовыми двоичными файлами.

Пример UserTracker в C ++ и .NET работает, но UserTracker.java запускается, обнаруживает мой силуэт, а затем JVM падает, когда я выполняю калибровочную позу. Это вывод перед сбоем:

New user 1
Pose Psi detected for 1

Я пытался поиграться с кодом, но не могу найти кусок кода, который его вызывает - он не падает в PoseDetectedObserver.update.

Вот ссылка на рассматриваемый пример: https://github.com/OpenNI/OpenNI/blob/master/Samples/UserTracker.java/org/OpenNI/Samples/UserTracker/UserTracker.java

Кто-нибудь еще сталкивался с этой проблемой или, возможно, видит, что может быть не так?

edit: я включил вход в SamplesConfig.xml и примеры Java выводить эти предупреждения при запуске, а образцы C ++ и .NET просто есть последний - это единственное отличие, которое я нахожу в журналах.

  125 INFO       OpenNI version is 1.3.2 (Build 3)-Linux-x86 (Jul 28 2011 03:43:14)
  141 INFO       Filter Info - minimum severity: WARNING, masks: ALL
 2482 WARNING    Failed loading lib: /usr/lib/libXnVFeatures_1_3_0.so: undefined symbol: xnOSStrFormat

 2489 WARNING    Failed to load '/usr/lib/libXnVFeatures_1_3_0.so' - missing dependencies?
 4080 WARNING    Failed loading lib: /usr/lib/libXnVHandGenerator_1_3_0.so: undefined symbol: xnOSStrFormat

 4087 WARNING    Failed to load '/usr/lib/libXnVHandGenerator_1_3_0.so' - missing dependencies?
 7581 WARNING    Open named event: failed to open key file (2) - event might not exist...

edit2: я установил щедрость, вот подробный файл журнала и дамп из последних нестабильных версий OpenNI, NITE и avin2 SensorKinect на Lubuntu 11.04: http://pastebin.com/anG18agp http://pastebin.com/mAkf0G6M

1 Ответ

6 голосов
/ 11 августа 2011

в классах-оболочках Java OpenNI есть ошибка:

В org_OpenNI_NativeMethods.cpp читается:

void XN_CALLBACK_TYPE PoseDetectionHandler(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie)
{
    CallbackCookie* pCallback = (CallbackCookie*)pCookie;
    JNIEnvSupplier supplier;
    jstring jPose = supplier.GetEnv()->NewStringUTF(strPose);
    supplier.GetEnv()->CallVoidMethod(pCallback->obj, pCallback->mid, jPose, user);
    supplier.GetEnv()->ReleaseStringUTFChars(jPose, strPose);
}

Но вы не должны выпускать строку StringUTF, выделенную с помощью newStringUTF... поэтому происходит сбой .. См. здесь пример: http://www.velocityreviews.com/forums/t144581-crash-while-calling-releasestringutfchars-for-newstringutf-string.html

Получить исходный код ... Раскомментируйте строку выпуска .. Скомпилируйте OpenNI.jni.dll, и будет запущен файл usetracker.java!

С уважением, Дэвид

...