Aktuelle Nachrichten & Meldungen

Die mobile Denkfabrik: Kinect 2: HRESULT: 0x80070002 beim Erstellen einer HighDefinitionFaceFrameSource

Gepostet am Okt 30, 2014

Die Gesichtserkennung des Kinect 1 ist mit Sicherheit nicht der Weisheit letzter Schluss: Das manuelle Anliefern von Frame-Informationen ist in Zeiten größer werdender Rechenleistung unzeitgemäß. Die zweite Version des Sensors räumt hier auf, bringt aber ihre eigenen Problemstellungen mit sich.

Wer die Gesichtserkenungs-Engine nach folgendem Schema in einem Projekt initialisiert, wird mit einer Fehlermeldung nach dem Schema „In System.InvalidOperationException ist eine Ausnahme vom Typ ‚Microsoft.Kinect.Face.dll‘ aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.
Zusätzliche Informationen: This API has returned an exception from an HRESULT: 0x80070002″ belohnt:

 void setupStreams()
{
myBodyReader = mySensor.BodyFrameSource.OpenReader();
myBodyReader.FrameArrived += myBodyReader_FrameArrived;
myColReader=mySensor.ColorFrameSource.OpenReader();
myColorArray = new byte[1920 * 1080 * 4];
myColReader.FrameArrived += myColReader_FrameArrived;
FrameDescription colorFrameDescription =
mySensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra);
myBitmap= new WriteableBitmap(colorFrameDescription.Width,
colorFrameDescription.Height, 96.0, 96.0, PixelFormats.Pbgra32, null);
myFFSource = new HighDefinitionFaceFrameSource(mySensor);
myFFReader = myFFSource.OpenReader();
myFace = new FaceAlignment();
myHasFaceFlag = false;
myFFReader.FrameArrived += myFFReader_FrameArrived;
}

Win32-erfahrene Entwickler erkennen den Fehlercode mitunter als Hinweis auf eine fehlende Datei. Das ist der Schlüssel zur Lösung des Problems: Die Gesichtserkennung arbeitet auf Basis einer Wissensdatenbank. Diese muss im Rahmen der Kompilation ins Ausgabeverzeichnis kopiert werden, um den Fehler zum Verschwinden zu bringen.

Obwohl man das theoretisch von Hand erledigen könnten, ist die Nutzung einer Post-Build-Aktion wesentlich eleganter. Dabei handelt es sich um eine Serie von Kommandos, die Visual Studio nach der Abarbeitung eines Kompilierprozesses automatisch ausführt.

Dafür muss man das Projekt im Solution Explorer rechts anklicken, und die Eigenschaften -> Buildaktionen wählen. Danach hat man das Feld Post-Buildaktionen um folgendes Kommando zu ergänzen:

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

Ab diesem Zeitpunkt sollte die Initialisierung der HighDefinitionFaceFrameSource ohne HRESULT: 0x80070002 vonstatten gehen.

gehen klicken Sie hier.

passend zum Thema