在处理“面部检测”的 android 应用程序中的相机馈送时,我遇到了一个问题。
我正在尝试做的事情:
-我有一个活动,它在 SurfaceView(UI 线程)中连续显示手机摄像头馈送
- 为了避免性能问题,我在顶部放置了一个表面视图,以使用 OpenCv 在检测到的面上绘制矩形(这是在线程中运行,比如线程 2)
- 我正在尝试将 Direct feed 图像的副本传递给 Thread2,以便线程 2 可以进行检测并在覆盖表面视图上绘图
我现在在哪里:
-我正在考虑使用带有阻塞队列的线程,以便 UIthread 可以使用 BlockingQueue.add(..) 将图像放入 BlockingQueue 中,并且 Thread2 可以在 BlockingQ 中获取图像,对其进行处理并在后台检测人脸
条件: 我希望UI线程,不要等待,以便在显示器上看到统一的提要。它只需要放置图像,然后无需等待其他任何东西,它就可以去获取下一个提要并重复该过程
目前我正在使用一个实现 Runnable 接口的新类,它有两个方法 putImage(bitmap) 和 getImage() 使用blockingQueue.putImage()放置和获取图像由UIthread调用,getImage()由thread2调用
问题: 当我继续将图像放入阻塞队列时,Thread2 无法访问blockingQ(Itsblocked)并且由于UI线程应该不间断地运行,我不能在主线程中调用wait()或sleep()。
Thread2 有什么方法可以在不阻塞 MainThread 的情况下从队列中获取这些图像???