void SensorDataReader::createFirstConnected() { releaseData(); std::string filename = GlobalAppState::get().s_binaryDumpSensorFile; std::cout << "Start loading binary dump... "; m_sensorData = new SensorData; m_sensorData->loadFromFile(filename); std::cout << "DONE!" << std::endl; std::cout << *m_sensorData << std::endl; //std::cout << "depth intrinsics:" << std::endl; //std::cout << m_sensorData->m_calibrationDepth.m_intrinsic << std::endl; //std::cout << "color intrinsics:" << std::endl; //std::cout << m_sensorData->m_calibrationColor.m_intrinsic << std::endl; RGBDSensor::init(m_sensorData->m_depthWidth, m_sensorData->m_depthHeight, std::max(m_sensorData->m_colorWidth, 1u), std::max(m_sensorData->m_colorHeight, 1u), 1); initializeDepthIntrinsics(m_sensorData->m_calibrationDepth.m_intrinsic(0, 0), m_sensorData->m_calibrationDepth.m_intrinsic(1, 1), m_sensorData->m_calibrationDepth.m_intrinsic(0, 2), m_sensorData->m_calibrationDepth.m_intrinsic(1, 2)); initializeColorIntrinsics(m_sensorData->m_calibrationColor.m_intrinsic(0, 0), m_sensorData->m_calibrationColor.m_intrinsic(1, 1), m_sensorData->m_calibrationColor.m_intrinsic(0, 2), m_sensorData->m_calibrationColor.m_intrinsic(1, 2)); initializeDepthExtrinsics(m_sensorData->m_calibrationDepth.m_extrinsic); initializeColorExtrinsics(m_sensorData->m_calibrationColor.m_extrinsic); m_numFrames = (unsigned int)m_sensorData->m_frames.size(); if (m_numFrames > GlobalBundlingState::get().s_maxNumImages * GlobalBundlingState::get().s_submapSize) { throw MLIB_EXCEPTION("sens file #frames = " + std::to_string(m_numFrames) + ", please change param file to accommodate"); //std::cout << "WARNING: sens file #frames = " << m_numFrames << ", please change param file to accommodate" << std::endl; //std::cout << "(press key to continue)" << std::endl; //getchar(); } if (m_numFrames > 0 && m_sensorData->m_frames[0].getColorCompressed()) { m_bHasColorData = true; } else { m_bHasColorData = false; } const unsigned int cacheSize = 10; m_sensorDataCache = new ml::SensorData::RGBDFrameCacheRead(m_sensorData, cacheSize); }
KinectSensor::KinectSensor() { // get resolution as DWORDS, but store as LONGs to avoid casts later DWORD width = 0; DWORD height = 0; NuiImageResolutionToSize(cDepthResolution, width, height); unsigned int depthWidth = static_cast<unsigned int>(width); unsigned int depthHeight = static_cast<unsigned int>(height); NuiImageResolutionToSize(cColorResolution, width, height); unsigned int colorWidth = static_cast<unsigned int>(width); unsigned int colorHeight = static_cast<unsigned int>(height); RGBDSensor::init(depthWidth, depthHeight, colorWidth, colorHeight); m_colorToDepthDivisor = colorWidth/depthWidth; m_hNextDepthFrameEvent = INVALID_HANDLE_VALUE; m_pDepthStreamHandle = INVALID_HANDLE_VALUE; m_hNextColorFrameEvent = INVALID_HANDLE_VALUE; m_pColorStreamHandle = INVALID_HANDLE_VALUE; m_colorCoordinates = new LONG[depthWidth*depthHeight*2]; m_bDepthImageIsUpdated = false; m_bDepthImageCameraIsUpdated = false; m_bNormalImageCameraIsUpdated = false; initializeDepthIntrinsics(2.0f*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240, 2.0f*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240, 320.0f, 240.0f); initializeDepthExtrinsics(mat4f::identity()); //MLIB_WARNING("TODO initialize color intrs/extr"); initializeColorIntrinsics(2.0f*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240, 2.0f*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240, 320.0f, 240.0f); initializeColorExtrinsics(mat4f::identity()); }
HRESULT BinaryDumpReader::createFirstConnected() { releaseData(); if (GlobalAppState::get().s_binaryDumpSensorFile.size() == 0) throw MLIB_EXCEPTION("need to specific s_binaryDumpSensorFile[0]"); std::string filename = GlobalAppState::get().s_binaryDumpSensorFile[0]; std::cout << "Start loading binary dump" << std::endl; //BinaryDataStreamZLibFile inputStream(filename, false); BinaryDataStreamFile inputStream(filename, false); inputStream >> m_data; std::cout << "Loading finished" << std::endl; std::cout << m_data << std::endl; std::cout << "intrinsics:" << std::endl; std::cout << m_data.m_CalibrationDepth.m_Intrinsic << std::endl; RGBDSensor::init(m_data.m_DepthImageWidth, m_data.m_DepthImageHeight, std::max(m_data.m_ColorImageWidth,1u), std::max(m_data.m_ColorImageHeight,1u), 1); initializeDepthIntrinsics(m_data.m_CalibrationDepth.m_Intrinsic(0,0), m_data.m_CalibrationDepth.m_Intrinsic(1,1), m_data.m_CalibrationDepth.m_Intrinsic(0,2), m_data.m_CalibrationDepth.m_Intrinsic(1,2)); initializeColorIntrinsics(m_data.m_CalibrationColor.m_Intrinsic(0,0), m_data.m_CalibrationColor.m_Intrinsic(1,1), m_data.m_CalibrationColor.m_Intrinsic(0,2), m_data.m_CalibrationColor.m_Intrinsic(1,2)); initializeDepthExtrinsics(m_data.m_CalibrationDepth.m_Extrinsic); initializeColorExtrinsics(m_data.m_CalibrationColor.m_Extrinsic); m_NumFrames = m_data.m_DepthNumFrames; assert(m_data.m_ColorNumFrames == m_data.m_DepthNumFrames || m_data.m_ColorNumFrames == 0); if (m_data.m_ColorImages.size() > 0) { m_bHasColorData = true; } else { m_bHasColorData = false; } return S_OK; }