「顔検出」のためにAndroidアプリケーションでカメラフィードを処理しているときに問題が発生しました。
私がやろうとしていること:
-surfaceView(UIスレッド)で電話のカメラフィードを継続的に表示するアクティビティがあります
-パフォーマンスの問題を回避するために、OpenCvを使用して検出された面に長方形を描画するためにサーフェスビューを上に配置しました(これはスレッドで実行されています、たとえばthread2)
-直接フィード画像のコピーをThread2に渡して、スレッド2が検出を実行し、オーバーレイサーフェスビューに描画できるようにしようとしています。
私が今いる場所:
-UIthreadがBlockingQueue.add(..)を使用して画像をBlockingQueueに入れ、Thread2がBlockingQで画像を取得して処理し、バックグラウンドで顔を検出できるように、blockingqueueでスレッドを使用することを考えていました
条件: UIスレッドを待たずに、中断されたフィードがディスプレイに表示されるようにします。画像を配置するだけで、他に何も待たずに次のフィードを取得してプロセスを繰り返すことができます。
現在、私はRunnableインターフェイスを実装する新しいクラスを使用しています。このクラスには、blockingQueue.putImage()を使用して画像を配置および取得する2つのメソッドputImage(bitmap)とgetImage()があり、UIthreadによって呼び出され、getImage()はthread2によって呼び出されます。
問題: 画像をブロッキングキューに入れ続けると、Thread2はblockingQ(Itsblocked)にアクセスできず、UIスレッドは中断されずに実行されるはずなので、メインスレッドでwait()またはsleep()を呼び出すことができません。
Thread2がMainThreadをブロックせずにキューからこの画像を取得する方法はありますか?