개발일지/코틀린(Kotlin)

코틀린 - 카메라 필터 앱 만들기 - 7 (CameraX + OpenCV)

이건나이스가아니야 2024. 4. 16. 17:17

CameraX를 오늘 좀 트라이 해보기로했다.

우선 깃허브에 올라와있는 얼굴 탐지 코드를 분석해보려한다. (링크)

 

집중적으로 볼 부분은 Analyzer 사용과 상속한 부분이다.

override fun analyze(imageProxy: ImageProxy) {
    // 제공되는 이미지 형식 ImageFormat.YUV_420_888
    val buffer = imageProxy.planes[0].buffer //Y값 List를 Buffer에 담음
    val yData = buffer.toByteArray() // ByteArray로 변환 
    val yMat = Mat(imageProxy.height, imageProxy.width, CvType.CV_8UC1)
    yMat.put(0, 0, yData) //y data 넣기
    val tyMat = yMat.t()  //행과 열 전치(바꿈)
    yMat.release() //y 데이터 제거 
    
    val facesRects = MatOfRect() 
    lbpCascadeClassifier?.detectMultiScale(tyMat, facesRects, 1.1, 3)
    listener(facesRects.toArray(), imageProxy.height.toFloat(), imageProxy.width.toFloat())

    tyMat.release()
    facesRects.release()
    imageProxy.close()
}

 

위 코드만 봐도 알 수 있듯 그냥 기존 이미지를 분석하여, 그위에 새로운 faceRect를 그려주려는 느낌의 코드로 밖에 보이지 않는다.

그래서 Surface쪽을 건드리는 방향으로 접근하는 것이 맞는 것 같다는 판단을 했다. 그러나 열심히 구글링해도 진전이 1도 없어서 여기까지만 하려한다. (사실 CameraX에 대한 의욕이 접어들었음.)

 

다음 진행할 것은 opencv Camera 기능으로 영상 촬영 및 저장 기능을 구현하고 필터 추가하는 방향으로 진행할 계획이다.

 

이상..

 

참고

1. SurfaceOutput(링크)

2. runOnUiThread(링크)

3. Camera Preview 캡쳐 구현 내용 관련 (링크)

4. 안드로이드 카메라 인터페이스 및 Bitmap 등등(링크)

5. 프리뷰 인터페이스 관련(링크)

6. OpenCV 함수 설명(링크)

7. 공식 OpenCV I(Android Development) (링크)

8.FullScreen 관련(링크1,링크2,링크3,맄으4

9. OpenCV Android 샘플 구현 (링크)

10. 회전변환(링크)

11. 안드로이드 회전/기기방향(링크, 링크2)

12. Preview 비율(링크)

13. opencv 카메라 연동 샘플( 링크)

14. CameraX Bitmap변경(링크)

15. YUV -> RGB 변환 (링크)

16. CameraX 설명 (링크)

17. 이미지뷰 사용하지 않고 비트맵 출력 (링크 )