2015-03-25 3 views
1

Я просто занимаюсь программированием Kinect 2 здесь, и сейчас у меня возникают некоторые проблемы с материалом HighDefinitionFace. У меня есть очень простой C# программу, которая только предполагается запустить камеру Kinect, скажи мне, что это началось, а затем выводить цвет волос субъекта, например, так:Пакеты для упаковки с .dll для Kinect 2.0

static class Program 
    { 
     static KinectSensor mySensor = null; 
     static HighDefinitionFaceFrame frames = null; 
     static HighDefinitionFaceFrameSource frameSource = null; 
     static HighDefinitionFaceFrameReader frameReader = null; 

    public static void Main() 
    { 
     mySensor = KinectSensor.GetDefault(); 
     mySensor.Open(); 

     System.Console.WriteLine(mySensor.IsAvailable); 

     frameSource = new HighDefinitionFaceFrameSource(mySensor); 
     frameReader = frameSource.OpenReader(); 
     frames = frameReader.AcquireLatestFrame(); 

     System.Console.WriteLine(frames.FaceModel.HairColor); 
    } 

} 

Все работает отлично, пока я не пытаюсь инициализировать frameSource, то он генерирует InvalidOperationException:

необработанное исключение типа «System.InvalidOperationException» произошло в Microsoft.Kinect.Face.dll

Дополнительная информация: Этот API возвратил исключение из HRESULT : 0x80070002

с двумя внутренними исключениями, ссылающимися на неуместные файлы, которые не могут быть найдены. Я думаю, что вопрос основан на следующей строке из Microsoft API reference:

Каждое приложение, которое использует Microsoft.Kinect.Face.dll должны быть упакованы с папкой NuiDatabase, который поставляется вместе с Microsoft.Kinect.Face.dll. Лицо dll гарантировано только для работы с конкретной папкой NuiDatabase, с которой она поставляется. API-интерфейсы Face предназначены для загрузки файлов базы данных из папки NuiDatabase при инициализации и будут искать папку в том же месте, что и Microsoft.Kinect.Face.dll.

Итак, мой вопрос: как я могу убедиться, что эта папка NuiDatabase доступна с .dll?

Материала Я пробовал:

-The Kinect SDK 2.0 содержит около пяти экземпляров Microsoft.Kinect.Face.dll в разных каталогах, каждый с NuiDatabase папки в том же каталоге. Все эти папки .dll и NuiDatabase выглядят одинаково. Я попытался установить каждый из этих .dll как ссылки, и все они дали тот же результат.

-Создание локального пакета NuGet, содержащего .dll и папку NuiDatabase, и добавление его в проект. Я пробовал это как с .dll, так и без него в своей собственной папке Lib. Он правильно ссылается на Microsoft.Kinect.Face и позволяет мне объявлять все необходимые типы, но он по-прежнему бросает ту же ошибку в той же строке.

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

ответ

1

Вы также можете попробовать добавить эту строку Командная строка события после построения:

xcopy "$(KINECTSDK20_DIR)Redist\Face\$(Platform)\NuiDatabase" "$(TargetDir)\NuiDatabase" /S /R /Y /I 

Для доступа редактора команд после сборки, сделайте следующее:

Щелкните правой кнопкой мыши по проекту -> Build Events - > Редактировать Post-build ...

+0

Это нормально для платформы построения x86 или x64, но не для «Any CPU». В таком случае $ (Platform) можно заменить x64 или x86 по мере необходимости .. –