1

私の Windows 8 ストア アプリケーションでは、ライブ ビデオ ストリーム処理 (顔検出など) を実行する傾向があります。


テクニック 1

以前の Windows 7 アプリケーションでは、次の手法 ( Emgu CV (.NET の OpenCV) と WPF を使用した C# での Camera Face Detection ) を使用して、ライブ ビデオ処理を実行できました。この手法は、一定期間のタイマー コールバックを使用して、カメラ オブジェクトから画像バッファを積極的にクエリすることでした。

void timer_Tick(object sender, EventArgs e)
{
    Image<Bgr,Byte> currentFrame = capture.QueryFrame();
    // Perform image processing based on currentFrame

テクニック 2

以前Androidで使用したもう 1 つの手法は、カメラ自体にカメラ バッファー プレビュー コールバックをインストールするというものです。カメラは、キャプチャしたカメラ バッファを渡すことによって、定期的にコールバックをトリガーします。そこから、画像処理を行うことができます。

public abstract void onPreviewFrame (byte[] data, Camera camera)
{
    // Perform image processing based on data

ただし、 Windows 8 ストア アプリケーションのビデオ処理に関する記事では、ほとんどが組み込みの処理関数を使用しています。

それらのどれも、生のカメラでキャプチャされたバッファにアクセスする方法、バッファをピクセルごとに反復する方法を示していません。

CaptureElement & MediaCaptureに従って利用する必要があると思います

http://blog.xyzzer.me/2012/01/22/displaying-webcam-preview-in-a-metro-app-using-winrt-and-xaml/

この方法は、手間をかけずに Web カメラの入力を確認したり、ファイルにキャプチャしたりしたい場合に最適です。動画をリアルタイムで処理したり、他の UI コンポーネントをオーバーレイしたりしたい場合は、次のように入力してください。</p>

CaptureElement と MediaCapture の方法

しかし、著者はその後について詳しく説明していません。(私は彼がそうすることを願っています:)

CaptureElement & MediaCapture からライブ ビデオ ストリーム処理を実行する方法のヒントはありますか?

4

1 に答える 1

3

最初に試すことができるのは MediaCapture.CapturePhotoToStreamAsync です。これは、その写真が圧縮されるシナリオのみだと思いますが、おそらくかなり迅速にデコードして WriteableBitmap に戻し、そのピクセルに対して何らかの処理を行うことができます。ただし、そのように 1 秒あたりに処理するフレーム数が多すぎることはないでしょう。

それを行うより良い方法は、おそらく MediaCapture.AddEffectAsync() を使用し、C++ でメディア ファンデーション トランスフォーム (MFT) を記述してビデオを処理し、何らかの方法で結果をアプリに返すことです。

于 2012-10-11T10:02:58.287 に答える