1

我正在开发一个在 Mac 上进行面部识别的应用程序,并且我正在使用带有 QTCaptureDecompressedVideoOutput 的 QTCaptureSession。我将视频分辨率限制为 640x360,使用 32ARGB 像素格式,并将最小视频帧间隔设置为 0 以提高帧速率,但这并没有真正帮助。

QTCaptureDecompressedVideoOutput *output = [[QTCaptureDecompressedVideoOutput alloc] init];
[output setPixelBufferAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                  [NSNumber numberWithDouble:640], (id)kCVPixelBufferWidthKey,
                                  [NSNumber numberWithDouble:360], (id)kCVPixelBufferHeightKey,
                                  [NSNumber numberWithInt:kCVPixelFormatType_32ARGB], (id)kCVPixelBufferPixelFormatTypeKey,                                      
                                  nil]];    

output.minimumVideoFrameInterval = 0;

无论我做什么,帧率似乎都在 15-15.5 FPS 左右达到峰值。这是在运行 10.7.3 的最新 MacBook Pro 15" / 2.3GHz Core i7 上使用内置摄像头。

4

1 回答 1

1

通常内置 iSight 摄像头会产生巨大的帧。您指定的缓冲区格式不会真正影响捕获输入,而只会影响特定的捕获输出。此外,由于原始捕获的图像不是指定的像素格式,因此会进行格式转换。所以,我的猜测是,通过指定另一种像素缓冲区格式,您只会减慢处理速度。

minimumVideoFrameInterval默认为 0,如果您寻求最大帧率,则无需更改它。您拥有的帧速率是此时可能的最大值。

尽量避免指定像素缓冲区,看看 FPS 是否有任何差异。另外,我会使用另一个分辨率较低的外部摄像头,这将大大减少系统的负载。

于 2012-05-15T04:44:08.057 回答