首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用阻塞队列来处理背景中的摄像机馈送?

如何使用阻塞队列来处理背景中的摄像机馈送?
EN

Stack Overflow用户
提问于 2012-08-31 12:48:08
回答 1查看 585关注 0票数 1

我在android应用程序中处理摄像头以进行“人脸检测”时遇到了一个问题。

我想做的事:

-I有一个在surfaceView(UI线程)中连续显示手机摄像头馈送的活动。

-To避免了性能问题,我在顶部放置了一个表面视图,以便使用OpenCv在检测到的人脸上绘制矩形(thread2说,这是在线程中运行的)。

-I正在尝试将直接提要图像的副本传递给Thread2,以便线程2可以进行检测并在覆盖面视图上绘制

我现在所处的位置:

-I正在考虑使用带有阻塞队列的线程,以便UIthread可以使用BlockingQueue.add(.)将图像放入blockingqueueThread2可以对BlockingQ中的图像进行处理,在背景中检测人脸。

条件:我想要UI线程,而不是等待,这样在display.It上就可以看到未迭代的提要,只需要放置图像,然后不等待任何东西,它就可以去获取下一个提要,然后重复处理。

目前,我正在使用一个实现Runnable接口的新类,它有两个方法:putImage(位图)和getImage() (使用blockingQueue.putImage() ),UIthread调用blockingQueue.putImage(),thread2调用getImage()

问题:当我继续将图像放到阻塞队列中时,Thread2无法访问blockingQ(Itsblocked),而且由于UI线程应该不间断地运行,所以我不能在主线程中调用wait()或wait()。

Thread2是否可以在不阻塞MainThread的情况下从队列中获取图像?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-31 13:10:23

这里有一个典型的生产者-消费者问题。你的制片人应该是主线。消费者是检测脸部的人。必须在另一个线程中运行的是使用者。不需要单独的线程来处理队列,它可以位于生产者和使用者可以访问的任何地方。

这样就不应该有任何阻塞,除非您的队列是有界的。默认的LinkedBlockingQueue实际上是无界的。

要在不阻塞的情况下访问就绪产品,可以执行以下操作:声明另一个队列,该队列将保存已完成任务的结果。脸处理器将是它的生产者和主线程将是消费者。让处理器一边填充,一边让主线程定期检查它是否有现成的产品。如果发现结果队列不是空的,则可以通知用户或做任何您想做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12215702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档