pythonとOpencvによる顔検出のマルチプロセッシングまたはマルチスレッド化
最近、ラズベリーパイ3(OSはラズビアン)でOPENCVとPYTHONを使ってライブカメラで顔を検出する作業をしています。そして、私はラズベリーパイ3でopencvを使用して検出された顔は非常に遅く、約4〜5FPS / sを参照してください。そこで、マルチスレッドやマルチプロセシングを使用して、FPSを高速化することができるのでしょうか?
どのようなアイデアでも構いませんので、私を助けてください。ありがとうございます。
0
2
を更新しました。カメラからの画像をキャプチャするために別のスレッドを使用していますが、シリアルと比較してFPSのスピードアップが見られません...。私のコードをご覧ください。
はい、マルチスレッドで処理することができます。 Python 2 では threading ライブラリを、Python 3 では thread ライブラリを使用してください。
以下は簡単な例です。
メインスレッドの他に
カメラを操作し、最新のフレームを常に更新するスレッド(この場合はグローバル)を1つだけ用意します。
2番目のスレッドは最新フレームを使用してモデルから推論を実行することができます。
オプションの第3のスレッドは、おそらく顔の上にバウンディングボックスを描画したり、他の操作を実行したりすることができます。
この場合、モデルからの出力を得てからでないとボックスの描画を開始できないため、2番目と3番目のスレッドの間でミューテックスロックが必要になることがあります。これにより、2番目のスレッドは他のスレッドを待たずに次のフレームの推論を開始することができます。
上記の例では、推論が少し遅れてスムーズなビデオ出力になります。マルチスレッドの仕組みがよく分からない場合は、まず基本的なことを読んでおくことをお勧めします。