挨拶、開発:Kinectの問題「エラー:NuiImageStreamOpen -2097086449」
私は、カメラを初期化しませんKinectGrabberと、実行時に問題が生じていますKinectの360を使用してC++でアプリケーションを開発しています私は実行時に望みました。それをデバッグすると、 "hr"の値をテストするときに "MSFTKinectGrabber :: Init"にエラーが発生することがわかりました。このテストはプログラムを忠実に中断しますが、私はその理由を知りません。
マイセットアップ:
- 私はKinectのV1.8 SDKののをインストールしている、そして開発キットをV1.8、最終的にランタイムをV1.8。
- コンパイラはVStudio 2010です。
- このアプリは、私の同僚によって開発され、前に別のコンピュータ(Laptop - windows 8)で実行されていました。
- 私は新しいデスクトップ(Windows 10)を使用しています。
- Kinectは、「Developer Toolkit Browser v1.8.0(kinect for Windows)」のデモで作業しています;
- デバイスマネージャのKinectのドライバをチェックして更新しました、Kinectのランタイム)は、余分なドライバの機能を追加し、それらも更新します。
これは、プログラムが()「MSFTKinectGrabber ::初期化」@ IF文を入力したとき、すべてが間違っに行くように見える場所です。
hr = m_NuiSensor->NuiImageStreamOpen(NUI_IMAGE_TYPE_DEPTH, NUI_IMAGE_RESOLUTION_640x480,
depthFlags, 2, m_NextDepthFrameEvent, &m_pDepthStreamHandle);
if(FAILED(hr))
{
std::cout << "Error: NuiImageStreamOpen " << hr << std::endl;
return false;
}
私はに関する全体のコード持って下:私のメイン、ないと思い、問題の核心は、私はプログラムを起動する方法を示すためにjsut
- を。
- My機能 "initializeKinect"、どこif文 "MSFTKinectGrabber :: initは" 何の問題を意味していないこれ、真を返した場合はfalseでなければなりません(grabberMSFT.Init(&プロセッサ)!)。
- 関数 "MSFTKinectGrabber :: Init"。初期化とKinectのテストが行われます。
機能:メイン
int main(int argc, char** argv){
processor = new KinectDataProcessor();
MSFTKinectGrabber grabberMSFT;
int kinect_state = initializeKinect(*processor, grabberMSFT, argc, argv);
if(kinect_state==0){
cloudProcessor = new CloudProcessor();
int v=0;
while (run){
v++;
HandleKeyboardEvents();
processor->Update();
if (startClassify && !continueClassify){
continueClassify = true;
boost::thread classificationThread(&threadClassify);
}
}
grabberMSFT.DeInit();
processor->DeInit();
}else{
system("PAUSE");
return -1;
}
return 0;
}
機能:initializeKinect
int initializeKinect(KinectDataProcessor & processor, MSFTKinectGrabber & grabberMSFT, int argc,char** argv){
int nRetCode = 0;
if (hModule != NULL)
{
// initialize MFC and print and error on failure
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
std::cout << "Kinect Parameters: " << std::endl;
std::cout << "1 - MinDepth (float) - minimum allowed is '0.0f'" << std::endl;
std::cout << "2 - MaxDepth (float) - maximum allowed is '4.0f'" << std::endl;
std::cout << "3 - NearMode (int) - '0' for true, '1' for false" << std::endl;
float minDepth = MIN_DEPTH;//float (atof(argv[1]));
float maxDepth = MAX_DEPTH;//float (atof(argv[2]));
std::cout << "[MinDepth, MaxDepth] = [" << minDepth << ", " << maxDepth << "]" << std::endl;
bool nearModeActive = true;
std::cout << "Near mode selected\n";
//KinectDataProcessor processor;
if(!processor.Init(KinectProcessor::GrabberType::MSFT))
{
processor.DeInit();
run = false;
return -1;
}
processor.SetDepthParameters(minDepth, maxDepth, nearModeActive);
//MSFTKinectGrabber grabberMSFT;
if (!grabberMSFT.Init(&processor)){
grabberMSFT.DeInit();
processor.DeInit();
run = false;
return -1;
}
cout<<"Ready to run"<<endl;
}
}
else
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}
return nRetCode;
}
機能:MSFTKinectGrabber ::初期
bool MSFTKinectGrabber::Init(KinectProcessor * kinectProcessor)
{
m_KinectProcessor = kinectProcessor;
//get NuiSensor obj
HRESULT hr = NuiCreateSensorByIndex(0, &m_NuiSensor);
if (FAILED(hr))
{
std::cout << "Error: NuiCreateSensorByIndex " << hr << std::endl;
return false;
}
m_DeviceID = m_NuiSensor->NuiDeviceConnectionId();
hr = m_NuiSensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR | NUI_INITIALIZE_FLAG_USES_DEPTH);
if(FAILED(hr))
{
std::cout << "Error: NuiInitialize " << hr << std::endl;
return false;
}
//Create color and depth events
m_NextColorFrameEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
m_NextDepthFrameEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
//open video streams
hr = m_NuiSensor->NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, 0, 2, m_NextColorFrameEvent, &m_pColorStreamHandle);
if(FAILED(hr))
{
std::cout << "Error: NuiImageStreamOpen " << hr << std::endl;
return false;
}
DWORD depthFlags = NULL;
if(kinectProcessor->IsMSFTNearMode())
depthFlags = NUI_IMAGE_STREAM_FLAG_ENABLE_NEAR_MODE;
hr = m_NuiSensor->NuiImageStreamOpen(NUI_IMAGE_TYPE_DEPTH, NUI_IMAGE_RESOLUTION_640x480, depthFlags, 2, m_NextDepthFrameEvent, &m_pDepthStreamHandle);
if(FAILED(hr))
{
std::cout << "Error: NuiImageStreamOpen " << hr << std::endl;
return false;
}
// Start the NUI processing thread
m_ProcessThreadStopEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
m_ProcessThread = CreateThread(NULL, 0, ProcessThread, this, 0, NULL);
return true;
}
ありがとうございました!