题 iOS 5.0中的核心图像过滤器是否足够快以进行实时视频处理?


既然Apple已将Core Image框架移植到iOS 5.0,我想知道:Core Image是否足够快,可以对摄像机视频应用实时滤镜和效果?

另外,学习iOS 5.0的Core Image框架会是一个很好的起点吗?


37
2017-07-08 14:26


起源




答案:


既然Core Image已经在iOS上运行了一段时间,我们可以谈谈一些硬性能数据。我创建了一个基准测试应用程序作为我的测试的一部分 GPUImage 框架,并通过实时视频源分析原始基于CPU的过滤器,核心图像过滤器和GPUImage过滤器的性能。以下是从iPhone的摄像头在640x480视频帧上应用单个伽马滤波器所花费的时间(以毫秒为单位)(对于运行两个不同OS版本的两种不同硬件型号):

             iPhone 4 (iOS 5)   | iPhone 4S (iOS 6)
------------------------------------------------
CPU          458 ms (2.2 FPS)     183 ms (5.5 FPS)
Core Image   106 ms (6.7 FPS)     8.2 ms (122 FPS)
GPUImage     2.5 ms (400 FPS)     1.8 ms (555 FPS)

对于Core Image,对于iPhone 4上的简单伽玛滤波器,最高可达9.4 FPS,但在iPhone 4S上则相同,超过60 FPS。这是关于您可以设置的最简单的Core Image过滤器案例,因此性能肯定会随着更复杂的操作而变化。这似乎表明Core Image无法以足够快的速度进行实时处理以匹配运行iOS 5的iPhone 4上的iPhone相机速率,但是从iOS 6开始,它处理的视频速度超过iPhone 4S及以上版本的实时过滤速度。 。

这些基准的来源可以在 我的GitHub存储库),如果你想看看我从哪里获得这些数字。

我已经从原版中更新了这个答案,这对Core Image的性能过于挑剔。我用作比较基础的棕褐色调过滤器没有执行与我自己相同的操作,所以它是一个糟糕的基准。在iOS 6中,核心图像过滤器的性能也得到了显着提升,这使得它们的速度足以在iPhone 4S及更高版本上处理实时视频。此外,我发现了几个案例, 像大半径模糊,Core Image明显优于我的GPUImage框架。

以前的答案,为子孙后代:

与任何与性能相关的问题一样,答案取决于过滤器的复杂程度,过滤的图像大小以及您运行的设备的性能特征。

由于Core Image已经在Mac上推出了一段时间,我可以指向你 核心图像编程指南 作为学习框架的资源。鉴于NDA,我无法对iOS特定元素发表评论,但我强烈建议您观看视频 WWDC 2011 会议422 - 在iOS和Mac OS X上使用核心映像。

Core Image(主要是)使用GPU进行图像处理,因此您可以了解OpenGL ES 2.0着色器在现有设备上处理图像处理的速度。一世 最近在这方面做了一些工作,并发现iPhone 4可以使用简单着色器对480 x 320进行实时视频进行60 FPS处理。您可以在那里下载我的示例应用程序并尝试自定义着色器和/或视频输入大小以确定是否您的特定设备可以以合适的帧速率处理此处理。核心映像可能会增加一些开销,但它也可以对组织过滤器链的方式进行一些巧妙的优化。

最慢的兼容设备将是iPhone 3G S和第三代iPod touch,但它们并不比iPhone 4慢得多.iPad 2以其巨大的碎片处理能力将它们全部吹走。


55
2017-07-08 17:36



你在上面的比较表中使用了什么样的CIContext?基于CPU还是GPU?顺便说一句:我刚看到你的GPUImage框架,它看起来很神奇! GJ! - Błażej
@Błażej - 基于GPU,据我所知。我不得不验证这些数字,但看起来Core Image在iPhone 4上进行处理时看起来确实超载GPU。看起来Core Image主要针对的是基于A5的新设备,而不是iPhone 3G S,iPhone 4,或原装iPad。 - Brad Larson♦
嘿Brad,由于Core Image和GPUImage(基于名称)都是基于GPU的计算,乳清GPUImage要快得多吗? - tom
@tom - Core Image和GPUImage在图像和视频源上应用过滤器有着根本不同的方法。我选择将各个片段着色器手动调整到硬件,这可以显着提高性能。但是,我需要根据Core Image团队的一些评论更新上述基准。我仍然比Core Image更快,但它在5.0上并不像我最初的基准测试那样慢。 iOS 6.0也带来了一些改进。 - Brad Larson♦
谢谢布拉德,这真的很有帮助! - tom


恕我直言,Core Image始终是iOS6.0以来的首选。 你会喜欢一些很好的功能,例如:

  1. 核心图像输入参数支持glTexture2d;
  2. 核心图像输出参数支持glTexture2d;
  3. 您可以选择仅使用带有GPU的CI;初始化CIContext例如。 _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts];
  4. 许多过滤器现在可用于iOS平台,93个过滤器左右?
  5. 当应用程序在后台暂时运行时,您可以选择仅使用CPU处理缓冲区,但不建议这样做。

这些都在WWDC2012会话视频Core Image部分中提到。看看,也许你会在那里找到你的解决方案。


6
2017-10-17 08:56





它几乎可以在iPhone 4中实时转发。 iPhone 3GS会有点不稳定。不建议使用iPhone 3及之前的版本。


3
2017-07-08 16:24