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)前場景重新計(jì)算收斂际乘,實(shí)際問題就是對 ae, awb 收斂速度的要求漂佩,計(jì)算能在幾幀內(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)計(jì)出的 ae,awb 的值飘蚯,在驅(qū)動中配置成ae馍迄、awb的預(yù)設(shè)值。
啟流做初始化時局骤,直接寫到相應(yīng)的 sensor攀圈、isp 寄存器中,這樣用初始化參數(shù)輸出的圖像給到算法時峦甩,因?yàn)楸旧砭褪瞧毓庹W咐矗灼胶鉁?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)計(jì)的 ae, awb 的參數(shù)拾积,
即使回到默認(rèn)值,效果也不一定就是好的丰涉,用上一次保存的歷史參數(shù)拓巧,有可能效果還更好,因?yàn)樗歉鶕?jù)場景在變化的昔搂。