1

これはおそらく一般的なことだと思いますが、ご容赦ください。

Web カメラを使用し、カメラが見ているものに基づいて特定の機能を実行するプログラムがあります。このプログラムは MacOS と Linux で問題なく動作し、Windows でもコンパイルして実行できますが、いくつかの関数 (ピクセルごとに反復するもの、640x480 を含む) では FPS が 1 以下に低下します。時折、数秒間フリーズするためにドロップします。

私が言ったように、私はこれが非常に一般的であることを知っています... 私はただ(必死に)可能な説明について他の誰かの意見を望んでいましたか?これらの同じ機能は、他のプラットフォームでも正常に機能します。カメラが独自のスレッドで実行されている可能性があるかどうか、興味があります。最適化するのに適切な場所を探していないだけではないでしょうか? また、コードを Windows に移植するときに何を最適化するかについてのリソースはありますか?

どうもありがとうございました。ご意見をお待ちしております。

<<< 編集 >>>

ビデオのソース コードについては、ewclib を使用しており、

const char * m_buffer;

EWC_Open(MEDIASUBTYPE_RGB24, 640, 480, FPS, true);

    m_buffer = new unsigned char[EWC_GetBufferSize(0)];

EWC_GetImage(0, m_buffer);
4

3 に答える 3

2

Windows でプログラムをコンパイルするには、何を使用しますか? ビジュアルスタジオ? シグウィン?デバッグ バージョンをコンパイルしていませんか? コンパイラの最適化をオンにしましたか? データ型を確認することもできます。int が 64 ビットであると想定しているのに、32 ビットの Windows を使用している可能性があります。

于 2009-01-21T21:25:44.093 に答える
1

Windowsが遅いためだというrmeadorの仮説はばかげています。画像を取得する以外は、すべてのアクションがユーザースペースにあり、システムコールは必要ありません。したがって、すべての認識/機能コードを削除して、問題が解決するかどうかを確認することをお勧めします。

この場合は、画像取得メカニズムを確認してください。写真を撮るたびに、カメラのハンドルを取得して解放しているのかもしれません。

それ以外の場合は、通常のプロファイラーを使用して弱点を見つけます。ピクセル操作に問題があると思われる場合は、ユーザースペースでそれを行うようにしてください。私はWindowsプログラミングに精通していませんが、問題は、すべてのピクセルの操作/読み取りおよび呼び出しのためにWindowsリソースを操作していることである可能性があると想像できます。

于 2009-01-21T21:49:09.180 に答える
0

フレームごとに EWC_Open を呼び出しますか、それとも開始時に 1 回だけ呼び出しますか? ライブラリが DirectShow に実装されていて、EWC_Open がグラフを開始する場合、かなり遅くなります。

于 2009-01-21T22:45:11.563 に答える