Этот фрагмент кода был взят из примера OpenNI под названием NiUserTracker
//... some codes...
#define XN_CALIBRATION_FILE_NAME "UserCalibration.bin"
// Save calibration to file
void SaveCalibration()
{
XnUserID aUserIDs[20] = {0};
XnUInt16 nUsers = 20;
g_UserGenerator.GetUsers(aUserIDs, nUsers);
for (int i = 0; i < nUsers; ++i)
{
// Find a user who is already calibrated
if (g_UserGenerator.GetSkeletonCap().IsCalibrated(aUserIDs[i]))
{
// Save user's calibration to file
g_UserGenerator.GetSkeletonCap().SaveCalibrationDataToFile(aUserIDs[i], XN_CALIBRATION_FILE_NAME);
break;
}
}
}
//... some codes ...
//... some codes ...
void glutKeyboard (unsigned char key, int x, int y)
{
switch (key)
{
case 27:
CleanupExit();
//... some codes...
case 'S':
SaveCalibration();
break;
case 'L':
LoadCalibration();
break;
}
}
Когда я нажимаю Shift + s или S (с включенной заглавной буквой), он не генерирует «UserCalibration.bin». Я полностью искал свой жесткий диск, и такой файл не был найден. После этого я отключаю свойство «только для чтения» из папки OpenNI.
Консоль, когда я запускаю NiUserTracker.exe, не сообщает об ошибке.
Я очень доволен его онлайн-калибровкой, для калибровки которой требуется время, я думал, что этот процесс можно ускорить, загрузив файл, откалиброванный пользователем.
Может ли кто-нибудь указать мне правильное направление, почему я не могу сгенерировать этот файл «UserCalibration.bin»? Я использую 64-битную Win7 с 64-битным OpenNI и Visual Studio 2010 Ultimate (предоставлены нашим университетом для исследовательских целей).
Высоко ценится.
С Уважением,
Икел
Я только что сделал быстрый тест с двумя различными конфигурациями:
Это не похоже на разрешение. Я немного изменил функцию SaveCalibration:
// Save calibration to file
void SaveCalibration()
{
XnUserID aUserIDs[20] = {0};
XnUInt16 nUsers = 20;
g_UserGenerator.GetUsers(aUserIDs, nUsers);
for (int i = 0; i < nUsers; ++i)
{
// Find a user who is already calibrated
if (g_UserGenerator.GetSkeletonCap().IsCalibrated(aUserIDs[i]))
{
// Save user's calibration to file
XnStatus saveStatus = g_UserGenerator.GetSkeletonCap().SaveCalibrationDataToFile(aUserIDs[i], XN_CALIBRATION_FILE_NAME);
std::cout << "saveStatus: " << saveStatus << std::endl;
if(saveStatus == XN_STATUS_OK) std::cout << "calibration saved to file" << std::endl;
if(saveStatus == XN_STATUS_NOT_IMPLEMENTED) std::cout << "not implemented, calibration wasn't saved" << std::endl;
break;
}
}
}
У меня есть STATUS_OK на OSX, но XN_STATUS_NOT_IMPLEMENTED (значение 65550) на Windows. Я нашел интересный пост по группе OpenNI. Я не уверен на 100%, но это звучит как
SaveCalibrationDataToFile может быть устаревшим в более новых версиях. Это имело бы смысл, так как поза пси (s) больше не требуется для калибровки.
Попробуйте вернуться к более старой версии. Конфигурация OpenNI, которую я использую на osx, работает (сохраняет файл калибровки, но эта версия также может отслеживать скелет, не требуя позы psi (Ψ)).
НТН
Других решений пока нет …