メイン UI スレッドですべてのストリーム (色、深度、スケルトン) を使用すると、顔を追跡できます。しかし、すべての kinect 処理を別のスレッドで実行したい場合は、次のようにします。
kinectThread = new Thread(getKinectSensorData);
public void getKinectSensorData()
{
sensor.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(sensor_AllFramesReady);
}
次の行でプログラムがクラッシュし、次のエラーが表示されます。
faceFrame = newfacetracker.Track(sensor.ColorStream.Format, colorPixelData,
sensor.DepthStream.Format, depthPixelData, currentSkeleton);
エラー:
Microsoft.Kinect.Toolkit.FaceTracking.dll で「System.InvalidCastException」タイプの未処理の例外が発生しました
追加情報: タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Kinect.Toolkit.FaceTracking.IFTImage' にキャストできません。IID '{1A00A7BC-C217-11E0-AC90-0024811441FD}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: サポートされているそのようなインターフェイスはありません (HRESULT からの例外: 0x80004002 (E_NOINTERFACE)) .
カラーストリーム、深度ストリーム、およびスケルトンストリームはすべて正常に動作しますが、プログラムはコードの newfacetracker.Track 行を渡すことができませんでした。非 UI スレッドで顔追跡を実行することはできませんか? 教えてください。
ありがとう