李韋鵬 王小雪
摘要:隨著移動(dòng)終端設(shè)備的飛速發(fā)展,Android作為移動(dòng)終端的主流開(kāi)發(fā)平臺(tái),其多媒體應(yīng)用得到廣泛普及。相機(jī)作為多媒體應(yīng)用中的一種備受青睞,且拍照功能是Android智能機(jī)產(chǎn)品的主要賣(mài)點(diǎn)。該文結(jié)合作者自身研發(fā)經(jīng)驗(yàn),分析相機(jī)拍照功能的開(kāi)發(fā)模式,常見(jiàn)的拍照技術(shù),及針對(duì)相機(jī)開(kāi)發(fā)技術(shù)存在的問(wèn)題,對(duì)相機(jī)性能提升進(jìn)行探究。
關(guān)鍵詞:Android;拍照技術(shù);性能提升
近年來(lái)伴隨Android智能機(jī)的廣泛普及,各類(lèi)拍照功能深受消費(fèi)者喜愛(ài),成為智能機(jī)主要賣(mài)點(diǎn)。受制于硬件條件,開(kāi)發(fā)者少有機(jī)會(huì)接觸應(yīng)用層以下相機(jī)功能研發(fā),手機(jī)廠(chǎng)商也不愿分享相關(guān)技術(shù),導(dǎo)致部分開(kāi)發(fā)者的技術(shù)研究?jī)H停留在應(yīng)用層,缺乏系統(tǒng)的Android智能機(jī)相機(jī)開(kāi)發(fā)經(jīng)驗(yàn)。本文結(jié)合作者自身研發(fā)經(jīng)驗(yàn),較為全面地分析相機(jī)開(kāi)發(fā)技術(shù)中存在的問(wèn)題,并針對(duì)這些問(wèn)題展開(kāi)研究,給出了解決策略。
1.拍照功能開(kāi)發(fā)模式
業(yè)界常見(jiàn)拍照功能開(kāi)發(fā)模式有兩種:第一種模式是以手機(jī)廠(chǎng)商為代表的全棧開(kāi)發(fā),圍繞手機(jī)芯片平臺(tái)相機(jī)模組展開(kāi)的拍照功能研發(fā);第二種模式是以相機(jī)應(yīng)用開(kāi)發(fā)商為代表的純應(yīng)用開(kāi)發(fā),通過(guò)Android平臺(tái)Framework層calD,er~API接口獲取圖像數(shù)據(jù),借助JNI調(diào)用App自研算法庫(kù)完成圖像處理工作。
第一種拍照模式如圖1,手機(jī)廠(chǎng)商將核心工作放在平臺(tái)層(Framework)、硬件抽象層(Hardware-Abstraction-Layer,HAL)層和驅(qū)動(dòng)層去完成,結(jié)合算法和其他圖像處理方法最大程度挖掘芯片平臺(tái)的相機(jī)拍照能力。廠(chǎng)商自研相機(jī)App申請(qǐng)底層上報(bào)驅(qū)動(dòng)能力,UI顯示底層支持的拍照模式以供使用。
第二種拍照模式如圖2,相比手機(jī)廠(chǎng)商,純應(yīng)用開(kāi)發(fā)不依賴(lài)硬件設(shè)備,算法和圖像處理模塊上浮使其不受制于芯片平臺(tái),但也因此犧牲了相機(jī)性能,或因無(wú)法調(diào)用底層接口而不能向用戶(hù)提供某些需要硬件支持的拍照功能和拍照特效。
無(wú)論哪一種開(kāi)發(fā)模式,其初衷都是希望通過(guò)技術(shù)手段向用戶(hù)提供更加優(yōu)質(zhì)拍照技術(shù)。
2.常見(jiàn)拍照技術(shù)
2.1美顏拍照
市場(chǎng)上備受女性用戶(hù)追捧的美膚、美顏、美妝等美化功能都是基于人臉檢測(cè)技術(shù)(facial-detection)實(shí)現(xiàn)的。國(guó)內(nèi)相關(guān)應(yīng)用開(kāi)發(fā)商和手機(jī)廠(chǎng)商一般會(huì)采購(gòu)專(zhuān)精于人臉檢測(cè)技術(shù)的第三方提供的開(kāi)發(fā)包來(lái)做二次開(kāi)發(fā),例如日本歐姆龍(Omron)忪司便是該技術(shù)的優(yōu)秀供應(yīng)商。目前主流的人臉檢測(cè)方法有兩種:基于特征(feature-based)的人臉檢測(cè)和基于圖像(image-based)的人臉檢測(cè)。以基于特征的人臉檢測(cè)方法最為普遍,且將人眼作為首選識(shí)別特征。美顏等特效功能運(yùn)行大致流程如下:
人臉檢測(cè)算法首先作用于底層相機(jī)上報(bào)的預(yù)覽幀或圖像幀,識(shí)別出人眼后定位眉、眼鼻T型區(qū)、嘴、下巴,并將識(shí)別數(shù)據(jù)放人人臉信息結(jié)構(gòu)體中,結(jié)構(gòu)體作為人參傳人美顏函數(shù);接著美顏函數(shù)僅對(duì)原始幀中人臉框區(qū)域作美化處理,如:平滑祛皺、增白、大眼、濃眉、隆鼻、豐唇、白牙等;最后輸出數(shù)據(jù)并顯示。
實(shí)際產(chǎn)品中為保證相機(jī)預(yù)覽界面流暢性,避免處理圖像卡頓,會(huì)根據(jù)需要挑選部分美化操作;開(kāi)發(fā)過(guò)程中往往需要解決遇內(nèi)存耗費(fèi)優(yōu)化、圖像縮放、人臉坐標(biāo)轉(zhuǎn)換、美化模板套用、光線(xiàn)和色彩調(diào)節(jié)等一系列問(wèn)題。
2.2偽光場(chǎng)相機(jī)
光場(chǎng)相機(jī)(Lytro)是近年來(lái)較受關(guān)注的拍照技術(shù),該技術(shù)運(yùn)用微透鏡陣列等硬件設(shè)備采集拍攝圖像的光場(chǎng)參數(shù)(光線(xiàn)的方向、強(qiáng)度等);在后續(xù)圖像處理時(shí)通過(guò)還原光場(chǎng)信息來(lái)實(shí)現(xiàn)例如“先拍照后對(duì)焦”等特有功能(也稱(chēng)為重對(duì)焦/全焦)。智能手機(jī)是一種高度集成化的消費(fèi)電子產(chǎn)品,受硬件研發(fā)難度和生產(chǎn)成本難以控制所限,單依靠在手機(jī)相機(jī)模組中集成微透鏡陣列來(lái)實(shí)現(xiàn)“先拍照后對(duì)焦功能”的設(shè)想并不現(xiàn)實(shí),因此借助軟件技術(shù)來(lái)實(shí)現(xiàn)便成為一種有效的解決方案。
2013年Nokia發(fā)布的Lumia920手機(jī)率先實(shí)現(xiàn)“先拍照后對(duì)焦”功能,稱(chēng)為Refocus,即重對(duì)焦;2013年華為在Android J版本實(shí)現(xiàn)此功能,稱(chēng)為All-focus,即全焦;2014年Google在Android K版本也實(shí)現(xiàn)該功能并公布原理:在相機(jī)取景時(shí)通過(guò)運(yùn)動(dòng)求取結(jié)構(gòu)算法(Sructure-from-Motion,SfM)及光束法平差來(lái)計(jì)算相機(jī)的3D定位、定向及幀序列中圖像特征的3D位置,再利用多視角立體算法(Muhi-View-Stereo,MVS)算參照?qǐng)D上每一個(gè)像素的景深,最后根據(jù)景深按比例模糊用戶(hù)選取的焦點(diǎn)以外的場(chǎng)景,以達(dá)到視覺(jué)上的重對(duì)焦效果。需注意的是Google偽光場(chǎng)拍照原理不同于華為等國(guó)內(nèi)廠(chǎng)商,國(guó)內(nèi)廠(chǎng)商的基本原理是:在不同焦距拍攝多張照片上報(bào)應(yīng)用,待用戶(hù)在圖庫(kù)中使用重對(duì)焦功能時(shí),利用算法解析出用戶(hù)點(diǎn)擊處最清晰照片并顯示出來(lái)。全流程細(xì)節(jié)如下:
1)用戶(hù)按下快門(mén)拍攝照片,底層驅(qū)動(dòng)控制相機(jī)模組馬達(dá)步進(jìn),間隔對(duì)焦拍攝多張照片;相機(jī)馬達(dá)步進(jìn)幅度在研發(fā)階段逐步調(diào)試到位,與相機(jī)模組參數(shù)相關(guān)。如圖3,F(xiàn)x表示不同的步進(jìn)焦距,Picx是在對(duì)應(yīng)焦距下采集的圖像幀。
2)HAL層和Framework層圖像處理函數(shù)將采集到的圖像按特定規(guī)則合成一張圖片文件:多張圖像數(shù)據(jù)追加到圖片文件尾部,在圖片文件頭標(biāo)記當(dāng)前照片為特殊的光場(chǎng)相片,并記錄每張圖片數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)起始標(biāo)志位(如圖4)。
3)用戶(hù)打開(kāi)偽光場(chǎng)照片,圖庫(kù)App將所有照片解析出來(lái)并緩存,使用算法挑選用戶(hù)點(diǎn)擊區(qū)域最清晰的照片,并呈現(xiàn)給用戶(hù),從而完成整個(gè)先拍照后對(duì)焦過(guò)程(如圖5)。可用的簡(jiǎn)單算法有Sobel或Canny算子的邊緣檢測(cè)算法,或者更優(yōu)秀的邊緣檢測(cè)算法。
實(shí)際開(kāi)發(fā)時(shí)還需做兩點(diǎn)改進(jìn):一是增加拍攝圖片數(shù)量提升重對(duì)焦準(zhǔn)確性;二是在圖片切換時(shí)使用插幀法和邊緣裁剪法提升重對(duì)焦時(shí)圖片切換流暢感,形成圖片推進(jìn)啦伸的景深效果。
此外還可通過(guò)算法預(yù)處理和圖片映射手段來(lái)改善性能:將相機(jī)取景現(xiàn)場(chǎng)劃分為多個(gè)編號(hào)區(qū)域,待所有圖片拍攝完畢后立即對(duì)每個(gè)區(qū)域使用算法挑選最清晰照片,并將對(duì)應(yīng)圖片編號(hào)同取景區(qū)域編號(hào)關(guān)聯(lián),隨后將映射關(guān)系放入圖片文件頭結(jié)構(gòu)中,重對(duì)焦操作時(shí)應(yīng)用程序不用再使用算法解析所有圖片,通過(guò)映射關(guān)系直接解析目標(biāo)圖片,即僅在拍攝過(guò)程中對(duì)所有圖片使用一次挑選算法,從而大幅提升整體性能。如圖6,假設(shè)經(jīng)算法挑選后AI區(qū)域最清晰圖片是第7張圖片,那么當(dāng)用戶(hù)點(diǎn)擊AI區(qū)域時(shí),顯示第7張圖片就能令用戶(hù)感受重對(duì)焦效果。
2.3暗光場(chǎng)景拍照
環(huán)境光不足場(chǎng)景下可以采用:器件補(bǔ)光、模組自適應(yīng)以及多幀合成等三種途徑解決拍照問(wèn)題,前兩者倚重硬件能力,最后一種是軟件方法。
1)在器件補(bǔ)光方面,靈活運(yùn)用閃光燈加柔光燈組合能有效調(diào)節(jié)物體形態(tài)、輪廓和色彩,暗光自拍時(shí)在拍照瞬間調(diào)節(jié)LED屏幕亮度和顏色也能為前置攝像頭補(bǔ)光。
2)在模組自適應(yīng)方面,調(diào)整大小光圈控制進(jìn)光能提高取景細(xì)節(jié)效果和景深效果,通過(guò)調(diào)低感光度IOS、優(yōu)化鮒算法調(diào)節(jié)白平衡(AWB)和延長(zhǎng)曝光時(shí)間(AE)也可提高拍照質(zhì)量。
3)在多幀合成方面,典型實(shí)例有HDR拍照和多幀降噪,HDR的核心原理可概述為:對(duì)同一個(gè)景物短時(shí)間內(nèi),拍攝多張不同的曝光值的照片,利用不同曝光值對(duì)應(yīng)的最佳細(xì)節(jié)合成為同一張照片,從而達(dá)到提到拍攝質(zhì)量的目的。
在流程上,HDR模式拍攝時(shí)會(huì)發(fā)先設(shè)置3-5個(gè)曝光值,然后按所設(shè)的曝光值依次拍照,最后挑選出曝光不足、曝光正常及曝光過(guò)度3張照片合成1張HDR照片。在實(shí)際應(yīng)用中,手機(jī)廠(chǎng)商往往綜合運(yùn)用以上三種方法不斷優(yōu)化拍照效果,任何單一方法改進(jìn)效果有限。
3.性能提升的探究
相機(jī)性能是手機(jī)測(cè)評(píng)的重要標(biāo)桿,手機(jī)相機(jī)研發(fā)時(shí)需要關(guān)注的性能指標(biāo)包括:拍立得時(shí)間(shoot-and-see)、相機(jī)啟動(dòng)時(shí)間、預(yù)覽跟隨流暢性、快速對(duì)焦能力等。通過(guò)梳理全流程代碼,簡(jiǎn)化或后置非必要加載流程能有效減少相機(jī)啟動(dòng)時(shí)間。三星獨(dú)辟蹊徑,在手機(jī)啟動(dòng)流程中加入應(yīng)用層以下相機(jī)相關(guān)進(jìn)程的啟動(dòng),從而在用戶(hù)啟動(dòng)三星自研相機(jī)應(yīng)用時(shí)無(wú)需再啟動(dòng)此類(lèi)進(jìn)程,讓用戶(hù)感覺(jué)相機(jī)啟動(dòng)很快。
第一,相機(jī)APP設(shè)計(jì)時(shí)應(yīng)遵循UI扁平化原則,降低界面渲染對(duì)內(nèi)存消耗。第二,考慮將操作控件和預(yù)覽Slurface控件分層設(shè)計(jì),確保預(yù)覽顯示同操作界面切換互不影響。第三,還應(yīng)參考Android,J版本后Framework層Camera代碼,采用流模式(Stream)優(yōu)化App整體架構(gòu)。拍立得時(shí)間也可類(lèi)比相機(jī)啟動(dòng)優(yōu)化方法縮短耗時(shí),但對(duì)某些難以改進(jìn)的拍照模式,可提前在界面上顯示所得照片縮略圖,待后臺(tái)處理圖像完畢再存人數(shù)據(jù)庫(kù),在不影響易用性前提下,試圖在視覺(jué)上給用戶(hù)拍照快的錯(cuò)覺(jué)。
流暢性則需要減少預(yù)覽時(shí)底層對(duì)預(yù)覽幀持有時(shí)間以提升用戶(hù)體驗(yàn),對(duì)耗時(shí)的預(yù)覽算法應(yīng)裁剪非必要特效,僅保留主要效果,但要對(duì)拍照幀需作全特效處理。如此設(shè)計(jì)的結(jié)果是,由于實(shí)際拍照效果優(yōu)于預(yù)覽效果,反而會(huì)給用戶(hù)帶來(lái)驚喜,提升用戶(hù)對(duì)智能機(jī)照性能的評(píng)價(jià)。一般來(lái)講,將激光對(duì)焦、相位對(duì)焦和反差對(duì)焦三者組合使用的合成對(duì)焦效果最佳,因?yàn)橄辔粚?duì)焦和激光對(duì)焦分針對(duì)遠(yuǎn)景/近景切換和暗光取景兩種場(chǎng)景表現(xiàn)優(yōu)異,在高通驍龍芯片將激光對(duì)焦技術(shù)普及的背景下,合成對(duì)焦效是未來(lái)相機(jī)對(duì)焦技術(shù)的發(fā)展趨勢(shì)。
4.總結(jié)
本文從介紹Android智能機(jī)相機(jī)開(kāi)發(fā)模式出發(fā),解析了當(dāng)前流行的美顏拍照、偽光場(chǎng)拍照、暗光拍照等多種拍照技術(shù),研究了提升Android相機(jī)性能的基本策略,總結(jié)了相關(guān)開(kāi)發(fā)經(jīng)驗(yàn),對(duì)從事Android智能機(jī)相機(jī)開(kāi)發(fā)人員的研發(fā)工作具有指導(dǎo)意義。