ImageAnalysis 拍照

      在〈ImageAnalysis 拍照〉中尚無留言

ImageAnalysis 拍照

使用 ImageCapture 或 VideoCapture 只是單純的把照相機傳進來的資訊存成圖片檔或影像檔。但若要在存檔前對圖片進行處理再存檔,這二個方法是行不通的。唯一的方法就是把檔案再次讀入,然後進行修改,最後再儲存一次。這對照片還好,但影片呢,一錄就好幾分鐘或好幾小時,根本沒機會對圖片進行處理。

ImageAnalysic (影像分析)可以不斷的把相機取得的影像以 YUV 格式傳出,然後再對影像進行分析改造,最收再手動儲存成照片、錄影、直播傳送。最常看到的應用就是對圖片進行美肌或是在影片中加入浮水印。也就是說,要拍照不需使用 ImageCapture,要錄影也不需透過 VideoCapture,可以直接透過 ImageAnalysis 進行拍照跟錄影,只不過是手動的,比較麻煩。

當然,如果只是單純拍照錄影的話,ImageCapture/VideoCapture 就足夠了。

啟動方式

將 ImageAnalysis 加入 useCaseGroup 後,使用 imageAnalysis.setAnalyzer() 即可啟動影像分析。請將 MahalCameraX 裏的 previewCamera 改成如下藍色的部份。

class MahalCameraX(......){
    fun previewCamera(){
        .............
        cameraProviderFuture.addListener(
            Runnable {
                val cameraProvider=cameraProviderFuture.get()
                val cameraLens= CameraSelector.Builder()
                    .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                    .build()
                val useCaseGroup = UseCaseGroup.Builder()
                    .addUseCase(preview)
                    .addUseCase(imageCapture)
                    .addUseCase(imageAnalysis)
                    //.addUseCase(videoCapture)
                    .build()
                try{
                    cameraProvider.unbindAll()
                    camera=cameraProvider.bindToLifecycle(
                        context as MainActivity,cameraLens,useCaseGroup
                    )
                }
                catch(e:Exception){}
            },
            ContextCompat.getMainExecutor(context)
        )
    }
}

不可與 VideoCapture 並存

請注意, VideoCapture 跟 ImageAnalysis 不可以同時存在 UseCaseGroup中。因為這二個都會一直讀取相機的 YUV 影像,二者只能選擇其一。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *