天天看點

騰訊優測優分享 | 高品質産品、高品質照片

騰訊優測優分享 | 高品質産品、高品質照片

騰訊優測 總監 雷彬

【引言】

如果你不想随時扛着單反和三腳架去抓拍生活的點滴故事,卻仍然希望能拍到品質很高效果很好的照片。如果你不想因為拍照的失誤而錯過重要的瞬間。如果你手上有一部安卓手機,并且安裝了一款非常不錯的相機app,你的願望就能實作。

用手機記錄生活和身邊的風景,已經漸漸成為了一種生活方式。随着手機使用者對拍照品質的要求日益提高,各個手機廠商在相機系統上更是大做文章,競争激烈。是以相機系統的各種機型适配問題,可以說是奇葩不斷,匪夷所思,攻城獅們都驚呆了!

本文就讨論一下如何提升android相機産品品質,為使用者拍出高品質的照片。

【Camera系統原理及Android相機成像】

1.Android camera系統介紹

對于做相機産品的攻城獅來說,距離我們最近的相機相關的部分就是Android Camera系統了。我們就先介紹一下我們又愛又恨的Android Camera系統。

(1)Camera系統結構

Andriod 照相機的基本層次結構

騰訊優測優分享 | 高品質産品、高品質照片

Andriod Camera 系統結構

騰訊優測優分享 | 高品質産品、高品質照片

自下而上,Camera系統分成了以下幾個部分:

(1)攝像頭驅動程式

(2)Camera硬體抽象層

(3)Camera服務部分

(4)Camera的本地架構代碼

(5)Camera的JNI代碼

(6)Camera系統的java類

(2)Camera系統調用流程

Camera系統的幾個常用功能:

(1)預覽preview

(2)視訊擷取recording

(3)拍照takePicture

(4)參數設定

而圖像處理的重點在于預覽,拍照和參數設定,下圖是調用流程。

騰訊優測優分享 | 高品質産品、高品質照片
騰訊優測優分享 | 高品質産品、高品質照片

(3)Camera系統資料流

當圖像資料出現問題的時候,我們需要知道資料流的來龍去脈,找到關鍵子產品,查出問題的根源。

騰訊優測優分享 | 高品質産品、高品質照片

圖檔預覽的資料流

騰訊優測優分享 | 高品質産品、高品質照片

拍照的資料流

2.Android相機成像原理:

接下來我們讨論一下硬體的成像原理,這一部分是決定拍照品質的基礎。

騰訊優測優分享 | 高品質産品、高品質照片

景物通過鏡頭生成的光學圖像投射到圖像傳感器表面上,然後轉為電信号,經過ADC(模數轉換)轉換後變為數字圖像信号,再送到數字信号處理晶片(DSP)中加工處理,再通過IO接口傳輸到CPU中處理,通過DISPLAY就可以看到圖像了。

在這部分,我們常用的能夠提高照片品質的功能包括:對焦,曝光,感光,測光,白平衡,對比度,實時濾鏡,全景照片,方向矯正等。要想解決好機型适配問題,提高産品品質,進而提高照片品質,需要在以上幾個方面要做好功課。

【相機系統的适配問題】

通過對相機适配問題的搜集和整理總結,我們發現出現問題的原因大緻是來源于以下幾個方面。

1.camera系統

在android中Google實作了與硬體無關的所有代碼,但是與硬體密切相關的硬體抽象層卻沒有也無法提供,對于不同裝置底層硬體是千變萬化的,不可能提供統一的硬體驅動以及接口實作,隻能提供标準的接口,是以硬體提供商需要自己開發裝置驅動,并去實作android架構提供的接口。這樣就導緻同樣的相機産品,在不同機型上拍照效果卻不一樣。甚至某些特殊功能,硬體不支援。比如有些低端機型的攝像頭不支援自動對焦,不支援測光。進而這些硬體不支援的API無法調用,或者傳回值特殊。頭疼的是幾乎所有廠商都會根據自己的需要改變camera系統。

2.andriod版本

Andriod不同版本的camera類的API會有改變,同時開源庫也會不同。 最新的andriod4.3版本已經标配opengles3.0。和過去使用了很久的opengles2.0相比,3.0增加了更多的高端大氣上檔次的紋理。因而對機器的性能要求也更高。

3.機型的硬體配置

不同價位,不同廠商的機型,硬體配置大相徑庭。這裡說的硬體配置不是指攝像頭,而是指處理圖像要用到的CPU,GPU,傳感器等等。比如性能不好的GPU或者沒有GPU的機型處理資料時,速度達不到預設的幀率要求時,就會出現跳幀,資料覆寫等情況。全景拍照和人臉識别都會出現類似的問題。而傳感器則涉及到照片方向矯正問題。

【解決适配問題,提高照片品質】

以下是使用者在拍照時的操作過程已經容易出現的問題。

要提高照片品質,我們可以從實際的拍照過程中對焦,曝光,感光,測光,白平衡,場景模式,方向矯正等角度入手。解決相關的适配問題,提高産品品質。

大連騰訊優測項目組對相機系統相關的機型适配bug進行了搜集和整理。接下來舉幾個例子說明。

1.手機無閃光燈,但是調用API查詢閃光燈狀态時仍然傳回有閃光燈的狀态。

奇葩處處有,相機特别多。三星 i5508和天語T619使用Android官方API getSupportedFlashModes( )判斷是否有閃光燈時傳回結果不準确。

解決政策:

PackageManager pm=(PackageManager)getSystemService(Context.PackageManager);

FeatureInfo[] features=pm.getSystemAvailableFeatures();

for(FeatureInfo f : features)

{

logcat.d( f.name);

if(PackageManager.FEATURE_CAMERA_FLASH.equasl( f.name))

{

//代碼

}

}

2.HTC部分機型拍照方向預設為橫屏,豎屏拍照時,照片方向錯誤。

這個奇葩問題在多個機型中都會出現。具有一定的普遍性。

解決政策:

(1)對于能夠從圖像資料中找到旋轉角度的機型。利用ExifInterface取到圖檔資料中的拍攝方向,傳回的值為1,3,6,8 。1為與預設拍攝方向相符不需要旋轉,3為再預設拍攝方向向右旋轉90度,6為再預設拍攝方向向左旋轉90度,8為再預設拍攝方向旋轉180度,代碼如下:

ExifInterface ef = new ExifInterface(圖檔存儲位置);

String sModel=ef.getAttribute(ExifInterface.TAG_ORIENTATION);

int rotate = 0;

switch (Integer.valueOf(sModel)){

case 3:

rotate = 180;

break;

case 6:

rotate = 90;

break;

case 8:

rotate = -90;

break;

}

// 建立操作圖檔用的matrix對象

Matrix matrix = new Matrix();

matrix.postRotate(rotate);

Bitmap resizedBitmap = Bitmap.createBitmap(myBitmap, 0, 0, myBitmap.getWidth(), myBitmap.getHeight(), matrix, true);

這種方法弊端是比較消耗記憶體

(2)對于無法從圖像資料中找到旋轉角度的。去除設定路徑語句,onActivityResult(int requestCode, int resultCode, Intent data)回調方法中,對data做非空判斷,data不為空,通過對data取值可得到圖檔。圖檔方向正确。

(3)以上兩種方法都不奏效的。需要添加圖檔方向确認界面。并且記住使用者設定的旋轉角度。

3.部分手機設定夜間場景時不支援Camera.Parameters.SCENE_MODE_NIGHT參數

部分手機設定夜間場景時不支援Camera.Parameters.SCENE_MODE_NIGHT參數,如魅族M040就隻能用“night-shot”進行夜間場景的設定,如果調用Camera.Parameters.SCENE_MODE_NIGHT進行設定時會抛出異常導緻程式crash。

解決政策:

用Camera.Parameters.getSupportedSceneModes()方法獲得手機可以設定的全部場景參數,然後進行對比,如果“night”在該集合中再進行相關設定。

4.相機Parameter對象中感光度API: parameter.get(“iso-values”)傳回集合為null, 導緻無法通過該方法獲得的集合值進行ISO感光度的設定。

三星 9300手機在framework層中的android.hardware.Parameters中不提供iso支援值得獲得。

解決政策:

在調用這個集合值前會進行空值判斷,如if(parameter.get(“iso-values”).isEmpty())

9300不用調用該方法擷取,9300的可支援設定的值有:auto,100,200,400,800;

即可調用Parameters.set(“iso”,”auto”);

Parameters.set(“iso”,”100″);

Parameters.set(“iso”,”200″);

Parameters.set(“iso”,”400″);

Parameters.set(“iso”,”800″);

其中的任一方法進行感光度的設定。

【總結】

相機系統在機型适配時問題是比較多的。尤其是做相機app的時候,要考慮周全camera系統,andriod版本,機型硬體配置等方面會出現的問題。不過這些惱人的問題,現在有了更好的解決方案了。

_______________________________________________________________________________________

騰訊優測是專業的移動雲測試平台,為應用、遊戲、H5混合應用的研發團隊提供産品品質檢測與問題解決服務。不僅線上上平台提供自動化相容性測試、雲手機遠端租用與調試、漏洞分析、自動化測試工具Xtest等多種品質檢測工具,更為VIP客戶配備了專家團隊提供定制化綜合測試解決方案。

繼續閱讀