3. 카메라 필터(OpenCV) 추가
1,2번 과정을 거치면서 CameraX와 OpenCV라이브러리를 추가하는 방법을 알아봤다.
두 사례를 모두 적용한다. 아. 참고로 안드로이드 스튜디오 22.01 버젼에서 CameraX적용은 쉬우니까 지금까지 잘 해왔다면 문제없이 적용할 것임.
이제 실시간 필터기능을 추가하기 위해 우리는 실시간 촬영데이터의 근원이 어디서 일어나는지 알아야한다.
코드를 한번살펴보자.
아마 이 부분에서 카메라를 송출을 세팅해주는 부분이 있을 것인데.
일단 나는 전면 카메라 사용을 위해 DEFAULT_FRONT_CAMERA로 변경했다.
최종적인 카메라 어플을 만들기 위해서는 버튼으로 만들어야할 것임 ㅇㅇ
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
// Used to bind the lifecycle of cameras to the lifecycle owner
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewBinding.viewFinder.surfaceProvider)
}
// Select back camera as a default
//val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
val cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA
try {
// Unbind use cases before rebinding
cameraProvider.unbindAll()
// Bind use cases to camera
cameraProvider.bindToLifecycle(
this, cameraSelector, preview)
} catch(exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(this))
}
우리가 주목해야할 곳은 bindToLifecycle이다. 왜?
링크(https://developer.android.com/media/camera/camerax/analyze?hl=ko)
CameraX가이드라인에 이미지분석 예제를 읽어보니
ImageAnalysis와 preview 사용 사례를 lifeCycle 소유자에 결합한다고 나와있다.
val imageAnalysis = ImageAnalysis.Builder()
// enable the following line if RGBA output is needed.
// .setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.setTargetResolution(Size(1280, 720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
imageAnalysis.setAnalyzer(executor, ImageAnalysis.Analyzer { imageProxy ->
val rotationDegrees = imageProxy.imageInfo.rotationDegrees
// insert your code here.
...
// after done, release the ImageProxy object
imageProxy.close()
})
cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)
우리는 imageAnalysis를 구현하고 lifecycle에 추가해주면 될 것 같다.
다른 사람 코드 참고하기(https://github.com/hkdong0694/Kotlin_CameraX)
일단 Kotlin으로 openCV 사용을 한번 진행하고 다시 도전해야겠다.
'개발일지 > 코틀린(Kotlin)' 카테고리의 다른 글
코틀린 - 카메라 필터 앱 만들기 - 5 (CameraX + OpenCV) (0) | 2024.04.15 |
---|---|
코틀린 - 카메라 필터 앱 만들기 - 4 (IntelliJ + OpenCV) (0) | 2024.04.15 |
코틀린 - 카메라 필터 앱 만들기 - 2 (OpenCV 세팅) (0) | 2024.04.15 |
코틀린 - 카메라 필터 앱 만들기 - 1(CameraX) (0) | 2024.04.15 |
코틀린(Kotlin) - 2 (0) | 2024.04.03 |