APP下载

基于Android平台相机开发技术的研究

2017-06-06李韦鹏王小雪

电脑知识与技术 2017年9期

李韦鹏 王小雪

摘要:随着移动终端设备的飞速发展,Android作为移动终端的主流开发平台,其多媒体应用得到广泛普及。相机作为多媒体应用中的一种备受青睐,且拍照功能是Android智能机产品的主要卖点。该文结合作者自身研发经验,分析相机拍照功能的开发模式,常见的拍照技术,及针对相机开发技术存在的问题,对相机性能提升进行探究。

关键词:Android;拍照技术;性能提升

近年来伴随Android智能机的广泛普及,各类拍照功能深受消费者喜爱,成为智能机主要卖点。受制于硬件条件,开发者少有机会接触应用层以下相机功能研发,手机厂商也不愿分享相关技术,导致部分开发者的技术研究仅停留在应用层,缺乏系统的Android智能机相机开发经验。本文结合作者自身研发经验,较为全面地分析相机开发技术中存在的问题,并针对这些问题展开研究,给出了解决策略。

1.拍照功能开发模式

业界常见拍照功能开发模式有两种:第一种模式是以手机厂商为代表的全栈开发,围绕手机芯片平台相机模组展开的拍照功能研发;第二种模式是以相机应用开发商为代表的纯应用开发,通过Android平台Framework层calD,er~API接口获取图像数据,借助JNI调用App自研算法库完成图像处理工作。

第一种拍照模式如图1,手机厂商将核心工作放在平台层(Framework)、硬件抽象层(Hardware-Abstraction-Layer,HAL)层和驱动层去完成,结合算法和其他图像处理方法最大程度挖掘芯片平台的相机拍照能力。厂商自研相机App申请底层上报驱动能力,UI显示底层支持的拍照模式以供使用。

第二种拍照模式如图2,相比手机厂商,纯应用开发不依赖硬件设备,算法和图像处理模块上浮使其不受制于芯片平台,但也因此牺牲了相机性能,或因无法调用底层接口而不能向用户提供某些需要硬件支持的拍照功能和拍照特效。

无论哪一种开发模式,其初衷都是希望通过技术手段向用户提供更加优质拍照技术。

2.常见拍照技术

2.1美颜拍照

市场上备受女性用户追捧的美肤、美颜、美妆等美化功能都是基于人脸检测技术(facial-detection)实现的。国内相关应用开发商和手机厂商一般会采购专精于人脸检测技术的第三方提供的开发包来做二次开发,例如日本欧姆龙(Omron)忪司便是該技术的优秀供应商。目前主流的人脸检测方法有两种:基于特征(feature-based)的人脸检测和基于图像(image-based)的人脸检测。以基于特征的人脸检测方法最为普遍,且将人眼作为首选识别特征。美颜等特效功能运行大致流程如下:

人脸检测算法首先作用于底层相机上报的预览帧或图像帧,识别出人眼后定位眉、眼鼻T型区、嘴、下巴,并将识别数据放人人脸信息结构体中,结构体作为人参传人美颜函数;接着美颜函数仅对原始帧中人脸框区域作美化处理,如:平滑祛皱、增白、大眼、浓眉、隆鼻、丰唇、白牙等;最后输出数据并显示。

实际产品中为保证相机预览界面流畅性,避免处理图像卡顿,会根据需要挑选部分美化操作;开发过程中往往需要解决遇内存耗费优化、图像缩放、人脸坐标转换、美化模板套用、光线和色彩调节等一系列问题。

2.2伪光场相机

光场相机(Lytro)是近年来较受关注的拍照技术,该技术运用微透镜阵列等硬件设备采集拍摄图像的光场参数(光线的方向、强度等);在后续图像处理时通过还原光场信息来实现例如“先拍照后对焦”等特有功能(也称为重对焦/全焦)。智能手机是一种高度集成化的消费电子产品,受硬件研发难度和生产成本难以控制所限,单依靠在手机相机模组中集成微透镜阵列来实现“先拍照后对焦功能”的设想并不现实,因此借助软件技术来实现便成为一种有效的解决方案。

2013年Nokia发布的Lumia920手机率先实现“先拍照后对焦”功能,称为Refocus,即重对焦;2013年华为在Android J版本实现此功能,称为All-focus,即全焦;2014年Google在Android K版本也实现该功能并公布原理:在相机取景时通过运动求取结构算法(Sructure-from-Motion,SfM)及光束法平差来计算相机的3D定位、定向及帧序列中图像特征的3D位置,再利用多视角立体算法(Muhi-View-Stereo,MVS)算参照图上每一个像素的景深,最后根据景深按比例模糊用户选取的焦点以外的场景,以达到视觉上的重对焦效果。需注意的是Google伪光场拍照原理不同于华为等国内厂商,国内厂商的基本原理是:在不同焦距拍摄多张照片上报应用,待用户在图库中使用重对焦功能时,利用算法解析出用户点击处最清晰照片并显示出来。全流程细节如下:

1)用户按下快门拍摄照片,底层驱动控制相机模组马达步进,间隔对焦拍摄多张照片;相机马达步进幅度在研发阶段逐步调试到位,与相机模组参数相关。如图3,Fx表示不同的步进焦距,Picx是在对应焦距下采集的图像帧。

2)HAL层和Framework层图像处理函数将采集到的图像按特定规则合成一张图片文件:多张图像数据追加到图片文件尾部,在图片文件头标记当前照片为特殊的光场相片,并记录每张图片数据长度和数据起始标志位(如图4)。

3)用户打开伪光场照片,图库App将所有照片解析出来并缓存,使用算法挑选用户点击区域最清晰的照片,并呈现给用户,从而完成整个先拍照后对焦过程(如图5)。可用的简单算法有Sobel或Canny算子的边缘检测算法,或者更优秀的边缘检测算法。

实际开发时还需做两点改进:一是增加拍摄图片数量提升重对焦准确性;二是在图片切换时使用插帧法和边缘裁剪法提升重对焦时图片切换流畅感,形成图片推进啦伸的景深效果。

此外还可通过算法预处理和图片映射手段来改善性能:将相机取景现场划分为多个编号区域,待所有图片拍摄完毕后立即对每个区域使用算法挑选最清晰照片,并将对应图片编号同取景区域编号关联,随后将映射关系放入图片文件头结构中,重对焦操作时应用程序不用再使用算法解析所有图片,通过映射关系直接解析目标图片,即仅在拍摄过程中对所有图片使用一次挑选算法,从而大幅提升整体性能。如图6,假设经算法挑选后AI区域最清晰图片是第7张图片,那么当用户点击AI区域时,显示第7张图片就能令用户感受重对焦效果。

2.3暗光场景拍照

环境光不足場景下可以采用:器件补光、模组自适应以及多帧合成等三种途径解决拍照问题,前两者倚重硬件能力,最后一种是软件方法。

1)在器件补光方面,灵活运用闪光灯加柔光灯组合能有效调节物体形态、轮廓和色彩,暗光自拍时在拍照瞬间调节LED屏幕亮度和颜色也能为前置摄像头补光。

2)在模组自适应方面,调整大小光圈控制进光能提高取景细节效果和景深效果,通过调低感光度IOS、优化鲋算法调节白平衡(AWB)和延长曝光时间(AE)也可提高拍照质量。

3)在多帧合成方面,典型实例有HDR拍照和多帧降噪,HDR的核心原理可概述为:对同一个景物短时间内,拍摄多张不同的曝光值的照片,利用不同曝光值对应的最佳细节合成为同一张照片,从而达到提到拍摄质量的目的。

在流程上,HDR模式拍摄时会发先设置3-5个曝光值,然后按所设的曝光值依次拍照,最后挑选出曝光不足、曝光正常及曝光过度3张照片合成1张HDR照片。在实际应用中,手机厂商往往综合运用以上三种方法不断优化拍照效果,任何单一方法改进效果有限。

3.性能提升的探究

相机性能是手机测评的重要标杆,手机相机研发时需要关注的性能指标包括:拍立得时间(shoot-and-see)、相机启动时间、预览跟随流畅性、快速对焦能力等。通过梳理全流程代码,简化或后置非必要加载流程能有效减少相机启动时间。三星独辟蹊径,在手机启动流程中加入应用层以下相机相关进程的启动,从而在用户启动三星自研相机应用时无需再启动此类进程,让用户感觉相机启动很快。

第一,相机APP设计时应遵循UI扁平化原则,降低界面渲染对内存消耗。第二,考虑将操作控件和预览Slurface控件分层设计,确保预览显示同操作界面切换互不影响。第三,还应参考Android,J版本后Framework层Camera代码,采用流模式(Stream)优化App整体架构。拍立得时间也可类比相机启动优化方法缩短耗时,但对某些难以改进的拍照模式,可提前在界面上显示所得照片缩略图,待后台处理图像完毕再存人数据库,在不影响易用性前提下,试图在视觉上给用户拍照快的错觉。

流畅性则需要减少预览时底层对预览帧持有时间以提升用户体验,对耗时的预览算法应裁剪非必要特效,仅保留主要效果,但要对拍照帧需作全特效处理。如此设计的结果是,由于实际拍照效果优于预览效果,反而会给用户带来惊喜,提升用户对智能机照性能的评价。一般来讲,将激光对焦、相位对焦和反差对焦三者组合使用的合成对焦效果最佳,因为相位对焦和激光对焦分针对远景/近景切换和暗光取景两种场景表现优异,在高通骁龙芯片将激光对焦技术普及的背景下,合成对焦效是未来相机对焦技术的发展趋势。

4.总结

本文从介绍Android智能机相机开发模式出发,解析了当前流行的美颜拍照、伪光场拍照、暗光拍照等多种拍照技术,研究了提升Android相机性能的基本策略,总结了相关开发经验,对从事Android智能机相机开发人员的研发工作具有指导意义。