본문 바로가기
Visual Intelligence/Object Detection

[Object Detection] 안드로이드 TensorFlow Lite를 사용하여 커스텀 객체 탐지 모델 빌드 및 배포 (3)

by goatlab 2023. 6. 16.
728x90
반응형
SMALL

탐지 프로그램에 피드 이미지

 

다음 코드를 fun runObjectDetection(bitmap:Bitmap)에 추가한다. 이렇게 하면 이미지가 탐지 프로그램에 전달된다.

 

// Step 3: feed given image to the model and print the detection result
val results = detector.detect(image)

 

완료되면 탐지기는 Detection 목록을 반환하며, 각 목록에는 모델이 이미지에서 발견한 객체에 대한 정보가 포함된다. 각 객체에 대한 설명은 다음과 같다.

 

  • boundingBox : 이미지 내에서 객체의 존재와 위치를 선언하는 직사각형
  • categories : 객체의 종류 및 탐지 결과에 대한 모델의 신뢰도이다. 이 모델은 여러 카테고리를 반환하고 가장 신뢰도 높은 카테고리를 먼저 반환한다.
  • label : 객체 카테고리의 이름
  • classificationConfidence : 0.0~1.0 범위의 부동 소수점 수, 1.0: 100%

 

탐지 결과 출력

 

다음 코드를 fun runObjectDetection(bitmap:Bitmap)에 추가한다. 이 메서드는 객체 탐지 결과를 Logcat에 출력하는 메서드를 호출한다.

 

// Step 4: Parse the detection result and show it
debugPrint(results)

 

그런 다음 이 debugPrint() 메서드를 MainActivity 클래스에 추가한다.

 

private fun debugPrint(results : List<Detection>) {
    for ((i, obj) in results.withIndex()) {
        val box = obj.boundingBox

        Log.d(TAG, "Detected object: ${i} ")
        Log.d(TAG, "  boundingBox: (${box.left}, ${box.top}) - (${box.right},${box.bottom})")

        for ((j, category) in obj.categories.withIndex()) {
            Log.d(TAG, "    Label $j: ${category.label}")
            val confidence: Int = category.score.times(100).toInt()
            Log.d(TAG, "    Confidence: ${confidence}%")
        }
    }
}

 

Android 스튜디오 툴바에서 Run을 클릭하여 앱을 컴파일하고 실행한다. 앱이 기기에 표시되면 미리 설정된 이미지 중 하나를 탭하여 객체 탐지기를 시작한다. 그런 다음 IDE 내의 Logcat 창을 보면 다음과 유사한 것을 볼 수 있다.

 

 

탐지 결과 그리기

 

구현된 유틸리티 메서드를 사용하여 다음을 수행한다.

 

  • 이미지에 경계 상자 그리기
  • 경계 상자 내에 카테고리 이름과 신뢰도 백분율을 그리기
val resultToDisplay = results.map {
    // Get the top-1 category and craft the display text
    val category = it.categories.first()
    val text = "${category.label}, ${category.score.times(100).toInt()}%"

    // Create a data object to display the detection result
    DetectionResult(it.boundingBox, text)
}
// Draw the detection result on the bitmap and show it.
val imgWithResult = drawDetectionResult(bitmap, resultToDisplay)
runOnUiThread {
    inputImageView.setImageBitmap(imgWithResult)
}

 

앱에 모델 통합

 

TFLite 모델을 assets 폴더에 복사한다. 새 모델의 이름을 custom.tflite로 지정한다.

 

val detector = ObjectDetector.createFromFileAndOptions(
    this, // the application context
    "custom.tflite", // must be same as the filename in assets folder
    options
)

 

https://developers.google.cn/codelabs/tflite-object-detection-android?hl=ko#7 

 

TensorFlow Lite (Android)를 사용하여 커스텀 객체 감지 모델 빌드 및 배포  |  Google for Developers

이 Codelab에서는 이미지에서 객체를 감지할 수 있는 Android 앱을 빌드합니다. 먼저 TFLite Model Maker를 사용하여 커스텀 객체 감지 모델을 학습시킨 다음 TFLite 태스크 라이브러리를 사용하여 배포합

developers.google.cn

 

728x90
반응형
LIST