我想过滤检测到的脸部的位置和大小,以便沿着时间平滑。
问题是视频大约是30 FPS但调用面部检测的方法: captureOutput:didOutputSampleBuffer:fromConnection 每秒调用一次,然后将矩形(一个CGRect)发送到要使用的主线程: dispatch_async(dispatch_get_main_queue() 因此,如果我在程序的那一部分应用低通滤波器或卡尔曼滤波器并不重要,因为它每秒更新矩形5次,这就是我看到矩形像振动或其位置有噪声的原因。
我该怎么办?
为了在那里应用过滤器,我应该以每秒30个滴答或类似的速度添加定时器(NSTimer)之类的东西吗? 你会使用什么程序架构?
提前致谢。
答案 0 :(得分:1)
我对avfoundation不是很熟悉,但是你可以使用它来探索API: addPeriodicTimeObserverForInterval:queue:usingBlock:on AVPlayer
你可以给它一个1/30 CMTime,它将被定时到视频而不是绝对时间。
然后是与输出捕获委托协调的问题。听起来它们可能由不同的线程(?)处理,因此您可能希望创建某种线程安全队列数据结构,以将事件从周期性时间观察器传递到输出捕获。这种东西似乎不是一个内置的库,所以你可能必须对这件作品有所启发。