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 影像,二者只能選擇其一。
