我正在开发一款在Mac上进行面部识别的应用程序,我正在使用带有QTCaptureDecompressedVideoOutput的QTCaptureSession。我使用32ARGB像素格式将视频分辨率限制为640x360,并将最小视频帧间隔设置为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左右。这是在最新的MacBook Pro 15“/ 2.3GHz Core i7上使用内置摄像头,运行10.7.3。
答案 0 :(得分:1)
通常内置的iSight摄像头会产生巨大的帧。您指定的缓冲区格式不会真正影响捕获输入,只会影响特定的捕获输出。此外,由于原始捕获图像不是指定的像素格式,因此将执行格式转换。所以,我的猜测是,通过指定另一个像素缓冲区格式,你只能减慢处理速度。
minimumVideoFrameInterval
默认为0,如果您寻求最大帧速率,则无需更改它。您拥有的帧速率是此时的最大值。
尽量避免指定像素缓冲区并查看FPS是否有任何差异。 另外,我会使用另一台分辨率较低的外置摄像头,这样可以大大减轻系统负荷。