簡體   English   中英

實時圖像處理Android camera2 api

[英]Real time image processing Android camera2 api

我對android很新。 我正在嘗試使用新的Android Camera2 api來構建實時圖像處理應用程序。 我的應用程序也需要保持良好的FPS率。 根據一些例子,我設法在ImageReader類提供的onImageAvailable(ImageReader reader)方法中進行圖像處理。 但是通過這樣做,我只能設法獲得5-7 FPS左右的幀速率。

我已經看到建議使用RenderScript與Android camera2 api進行YUV處理。 使用RenderScript會獲得更高的FPS費率嗎? 如果是這樣,請有人指導我如何實現它,因為我是android的新手我很難掌握Allocation和RenderScript的概念。 提前致謝。

我不知道你想要執行什么類型的圖像處理。 但是如果您只對圖像的強度感興趣(即灰度值信息),則不需要對YUV數據陣列進行任何轉換(例如轉換為jpeg)。 對於由n個像素組成的圖像,強度信息由YUV數據陣列的前n個字節給出。 所以,只需從YUV數據數組中刪除這些字節:

 byte[] intensity = new byte[width*height];
 intensity = Arrays.copyOfRange(data, 0, width*height);

理論上,您可以使用此調用獲取可用的fps范圍:

characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);

並在此處設置所需的fps范圍:

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);

因此原則上,您應該選擇具有相同下限和上限的范圍,並且應該保持幀速率不變。

但是,在具有LEGACY配置文件的設備上,我測試的設備中沒有一個能夠在1080p(S5,Z3 Compact,華為Mate S和HTC One M9)上實現30fps。 我能夠實現這一目標的唯一方法是使用一個設備(LG G4),結果是有一個完整的配置文件。

如果您打算在onImageAvailable回調中使用它,Renderscript將不會在這里購買任何東西。 看起來在這一點上獲取圖像是LEGACY設備的瓶頸,因為新的camera2 API只是包裝舊的,並且可能會產生如此大的開銷,以至於回調不再以30fps發生。 因此,如果要使用Renderscript,您需要創建一個Surface並找到另一種方法來抓取它的幀。

以下是踢球者...如果你回到已棄用的API,我幾乎可以保證你想要的任何分辨率30fps。 至少這是我在我測試的所有設備上找到的....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM