1

メイン 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 スレッドで顔追跡を実行することはできませんか? 教えてください。

ありがとう

4

0 に答える 0