【发布时间】:2016-12-30 17:03:20
【问题描述】:
我需要创建一个算法,该算法基本上以每秒 15 帧(总共 450 帧)从 iPhone 后置摄像头获取视频输入 30 秒。 30 秒时间结束后,不应再记录输入。最后,算法应该取 450 帧中每一帧的平均红色值或强度,留下 450 个红色值。显然,我正在使用 GPUImage 来完成所有这些工作。
现在,我有这样的事情:
GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
GPUImageAverageColor *averageColor = [[GPUImageAverageColor alloc] init];
[averageColor setColorAverageProcessingFinishedBlock:^(CGFloat redComponent, CGFloat greenComponent, CGFloat blueComponent, CGFloat alphaComponent, CMTime frameTime)
// retrieve the average color values
{
NSLog(@"%f", redComponent); // print the red values
// [redValues addObject:@(redComponent)]; <-- this is what I would use to put all of the red values in an array
}];
[videoCamera addTarget:averageColor];
[videoCamera startCameraCapture];
我遇到的问题是我不知道在哪里设置我想要的视频每秒帧数(每秒 15 帧),我也不确定在哪里指定我想要我的视频多长时间样本为(30 秒)。我最大的问题是控制台根本没有打印任何红色值,即使相机应该捕获视频。
如何解决所有这三个问题?示例代码将不胜感激。
【问题讨论】:
-
GitHub reposotory 中的介绍性文档告诉您一般如何使用过滤器,以及您特别感兴趣的过滤器(给它一个块以接收平均值);并且还提供了生成 API 文档的说明。如果您已阅读此文章,请编辑您的问题,以展示您尝试过的内容以及无效的内容/您不理解的内容。
-
我刚刚浏览了 GPUImage 文档。看起来直播视频的管道已经为您完成,因此您可以跳过那里的分解步骤。接受@CRD 的建议,从文档中描述的简单内容开始。关键是,复杂的事情不会完整地诞生。他们成长为更简单(经过测试)的部分。
-
@CRD 现在正在尝试。
-
@CRD 我找到了我必须使用here 的块,但我仍然不确定如何实现过滤器,因为介绍性文档不是很具体。
-
@CRD 已编辑,添加了更多详细信息。
标签: objective-c gpuimage