GPUImage框架_文档翻译

2023-03-23 19:25:59 浏览数 (1)

先来介绍一下,GPUImage吧!

GPUImage框架是一个获得BSD许可的iOS库,可让您将GPU加速滤镜和其他效果应用于图像,实时摄像机视频和电影。与Core Image(iOS 5.0的一部分)相比,GPUImage允许您编写自己的自定义过滤器,支持部署到iOS 4.0,并且具有更简单的界面。但是,它目前缺少核心图像的一些更高级的功能,例如面部检测。

(GPUImage框架是一个BSD(伯克利软件套件)许可iOS库,能让你的APP应用GPU加速的过滤器及其他图像处理效果,现场摄像机视频和电影。在核心图像对比(iOS 5的一部分),GPUImage允许你添加自己的自定义过滤器,支持部署到iOS 4,并有一个简单的接口。然而,它目前缺乏Core Image的一些更高级的特性,如人脸检测。)

对于像处理图像或实时视频帧这样的大规模并行操作,GPU比CPU具有一些显着的性能优势。在iPhone 4上,简单的图像过滤器在GPU上执行的速度比基于CPU的等效过滤器快100多倍。

(大规模用来处理图像或视频直播框架,GPUI图框架有显着的性能优势。在iPhone 4上,一个简单的图像过滤器在GPU上执行的速度比同等CPU的过滤器快100倍以上。)

但是,在GPU上运行自定义过滤器需要大量代码来设置和维护这些过滤器的OpenGL ES 2.0渲染目标。我创建了一个示例项目来执行此操作:

(然而,在GPU上运行自定义过滤器需要大量的代码来设置和维护这些过滤器的OpenGL ES 2渲染目标。我创建了一个示例项目来做这件事:)

项目预览地址: https://github.com/BradLarson/GPUImage

并发现我必须在其创建中编写很多样板代码。因此,我整理了这个框架,它包含了处理图像和视频时遇到的许多常见任务,并且使得您无需关心OpenGL ES 2.0基础。

(你会发现有大量的样板代码我已经写在其创作中。因此,我将这个框架封装起来,封装了处理图像和视频时遇到的许多常见任务,使您不必关心OpenGL ES 2基础。)

在处理视频时,此框架与Core Image相比,在iPhone 4上只需2.5 ms即可从相机上传帧,应用伽玛滤波器和显示,而使用Core Image的相同操作则为106 ms。基于CPU的处理需要460毫秒,这使得GPUI在此硬件上的运行速度比Core Image快40倍,比CPU绑定处理速度快184倍。在iPhone 4S上,对于这种情况,GPUImage仅比Core Image快4倍,比CPU绑定处理快102倍。然而,对于更复杂的操作,如更大半径的高斯模糊,Core Image目前超过GPUImage。

(GPUImage框架在处理视频时与Core Image相比是有利的,在iPhone 4上只需2.5毫秒就可以从照相机上传帧,应用gamma滤波器,并使用Core Image对同一操作显示106毫秒。基于CPU的处理需要460毫秒,使GPUImage 40x核心图像比这个操作在该硬件更快,和184x速度比CPU绑定的处理。在iPhone 4S,GPUImage只有快4倍比核心的形象,这种情况下,和102x速度比CPU绑定的处理。然而,对于更复杂的操作,如高斯模糊半径较大,目前超过GPUImage核心形象。)

技术要求(技术支持)

OpenGL ES 2.0:使用它的应用程序不能在原始的iPhone,iPhone 3G以及第一代和第二代iPod touch上运行

(OpenGL ES 2:应用程序将不会运行在最初的iPhone,例如iPhone 3G和第一代和第二代iPod触摸)

iOS 4.1作为部署目标(4.0没有电影阅读所需的扩展)。如果您希望在拍摄静态照片时显示实时视频预览,则需要使用iOS 4.3作为部署目标。

(iOS 4.1作为部署目标的(4.0比没有电影阅读所需的扩展)。如果您希望在拍摄静止照片时显示实时视频预览,则需要iOS 4.3作为部署目标。

iOS 5.0 SDK构建

设备必须配备相机才能使用与相机相关的功能(显然)

(显然需要必须有一个摄像机来应用与相机相关的功能)

该框架使用自动引用计数(ARC),但如果添加为子项目,则应支持使用ARC和手动引用计数的项目,如下所述。对于面向iOS 4.x的手动引用计数应用程序,您需要将-fobjc-arc添加到应用程序项目的Other Linker Flags中。

(GPUImage框架使用自动引用计数(ARC),但要支持的项目,如果添加一个子项目解释如下使用手动引用计数。手动引用计数的应用针对iOS 4.X系统,你需要添加-fobjc-arc的其他连接标记到你的应用程序项目。)

General architecture(普遍结构)

GPUImage使用OpenGL ES 2.0着色器以比在CPU绑定例程中更快的速度执行图像和视频操作。但是,它隐藏了在简化的Objective-C界面中与OpenGL ES API交互的复杂性。此界面允许您定义图像和视频的输入源,在链中附加过滤器,并将生成的处理过的图像或视频发送到屏幕,UIImage或磁盘上的电影。

GPUImage使用OpenGL ES 2着色器进行图像和视频处理速度远远超过可以在CPU绑定的程序做的。然而,它隐藏在OpenGLES API简化Objective-C接口OpenGL交互的复杂性。这个接口允许您定义的图像和视频输入源,链连接的过滤器,并发送处理结果的图像或视频的画面到屏幕,一个UIImage的,或磁盘上的一个电影。

从源对象上载图像或视频帧,源对象是GPUImageOutput的子类。其中包括GPUImageVideoCamera(适用于iOS相机的实时视频),GPUImageStillCamera(用于使用相机拍摄照片),GPUImagePicture(适用于静态图像)和GPUImageMovie(适用于电影)。源对象将静态图像帧作为纹理上传到OpenGL ES,然后将这些纹理移交给处理链中的下一个对象。

(视频图像或帧从源对象的上传,这是GPUImageOutput。这些包括GPUImageVideoCamera(从iOS的相机录制视频),GPUImageStillCamera(带相机的照片),GPUImagePicture(静态图片),和GPUImageMovie(电影)。源对象将图像帧上传到OpenGL ES作为纹理,然后将这些纹理传递给处理链中的下一个对象。)

链中的过滤器和其他后续元素符合GPUImageInput协议,该协议允许它们从链中的前一个链接接收提供或处理的纹理并对其执行某些操作。将链向下一步的对象视为目标,并且可以通过将多个目标添加到单个输出或过滤器来分支处理。

(链中的过滤器和其他随后的元素符合GPUImageInput协议,这让他们以提供或加工纹理从链中的上一个链接,用它做什么。在链上一步一步的对象被认为是目标,并且处理可以通过将多个目标添加到单个输出或过滤器来进行分支)

例如,从相机接收实时视频,将该视频转换为棕褐色调,然后在屏幕上显示视频的应用程序将设置如下所示的链:

(例如,一个应用程序,需要在摄像头获取视频,再转换视频到深褐色调,然后显示视频屏幕将建立一个链,看起来过程有点像下面:)

GPUImageVideoCamera - > GPUImageSepiaFilter - > GPUImageView

0 人点赞