1、問題背景
使用的安卓平臺,客戶的應(yīng)用是要盡可能快的獲取到1幀圖像效果正常的圖片。
但當(dāng)打開 camera 啟動出流后,前3-5幀圖像是偏暗、偏色的,如下圖所示,是抓取出流的前25幀圖像,
前3幀顏色是偏藍(lán)的,前10幀亮度是從暗到亮在收斂的。此現(xiàn)象是正常的嘛?該如何去解決呢?
2、問題分析
我們這里的應(yīng)用是,打開 camera app 出圖, 就是 sensor 重新上電啟動的過程,退出 app 就是 sensor stream off 的過程。
ae,awb 要根據(jù)當(dāng)前場景重新計算收斂,實(shí)際問題就是對 ae, awb 收斂速度的要求,計算能在幾幀內(nèi)收斂完成。
具體還是要去看產(chǎn)品的應(yīng)用,一般人眼去觀察的設(shè)備,對收斂速度要求不高,1s內(nèi)(25fps)能收斂完成,就沒太大問題,感受也不明顯。
但對一些機(jī)器識別的應(yīng)用,他是需要逐幀分析的,對穩(wěn)定出圖的速度是有要求的,如果是25fps內(nèi)才能收斂完成,那對于識別的性能就要差很多了,也是不可接受的。
目前知道的解決方式有如下幾種:
1)最直接的就是優(yōu)化 ae、awb 的算法性能,即使場景再突變,也可以在2-3幀內(nèi)就能收斂完成,而不帶來任何的副作用,比如震蕩,閃爍等等。
2)當(dāng)固定場景下使用時(場景的照度固定、色溫固定),將當(dāng)前場景下算法統(tǒng)計出的 ae,awb 的值,在驅(qū)動中配置成ae、awb的預(yù)設(shè)值。
啟流做初始化時,直接寫到相應(yīng)的 sensor、isp 寄存器中,這樣用初始化參數(shù)輸出的圖像給到算法時,因為本身就是曝光正常,白平衡準(zhǔn)確的,所以 ae, awb 幾乎不存在收斂的時間。
3)出流給到應(yīng)用時,采用丟幀的方法,將前幾幀沒收斂完成的幀給丟棄掉,避免影響后續(xù)應(yīng)用識別的準(zhǔn)確性。但這就相當(dāng)于出流慢了,對識別的速度肯定有影響。
4)退出 camera app 時,保存下當(dāng)前 ae、awb 的值,當(dāng)再次打開 camera app 時,將上次退出 camera app 保存下來的 ae、awb 的值,
在 sensor 出流以前,將 ae 的參數(shù)寫入到 sensor 寄存器,awb 的參數(shù)寫入到 isp 寄存器即可。
這樣也只能保證當(dāng)場景不變時,反復(fù)打開關(guān)閉 camera app 出圖,前幾幀是一致的;當(dāng)場景變化時,第一次打開時,出流會不一致。
驅(qū)動的同事在加上面(4)的策略,提出要加一個時間限制的判斷,比如當(dāng)?shù)诙未蜷_相機(jī)app 與上一次打開的時間間隔超過1個小時,就用默認(rèn)的預(yù)設(shè)值參數(shù)。
考慮到間隔時間長了,場景有可能會有變化,但其實(shí)默認(rèn)的預(yù)設(shè)值,定義的就是一個固定場景下統(tǒng)計的 ae, awb 的參數(shù),
即使回到默認(rèn)值,效果也不一定就是好的,用上一次保存的歷史參數(shù),有可能效果還更好,因為他是根據(jù)場景在變化的。