오늘 현지 TensorFlow Everywhere 이벤트에 참석하세요!
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

물체 감지기 통합

객체 감지기는 알려진 객체 세트 중 어떤 것이 존재할 수 있는지 식별하고 주어진 이미지 또는 비디오 스트림 내 위치에 대한 정보를 제공 할 수 있습니다. 물체 감지기는 여러 등급의 물체의 존재와 위치를 감지하도록 훈련되었습니다. 예를 들어, 다양한 과일 조각이 포함 된 이미지, 과일이 나타내는 과일의 종류 (예 : 사과, 바나나 또는 딸기)를 지정하는 레이블 및 각 개체가 나타나는 위치를 지정하는 데이터로 모델을 학습시킬 수 있습니다. 이미지. 객체 감지기에 대한 자세한 내용은 객체 감지 소개를 참조하세요.

Task Library ObjectDetector API를 사용하여 커스텀 객체 감지기 또는 사전 학습 된 감지기를 모델 앱에 배포합니다.

ObjectDetector API의 주요 기능

  • 회전, 크기 조정 및 색 공간 변환을 포함한 입력 이미지 처리.

  • 라벨 맵 로케일.

  • 결과를 필터링하기위한 점수 임계 값.

  • Top-k 탐지 결과.

  • 허용 목록 및 거부 목록에 레이블을 지정합니다.

지원되는 물체 감지기 모델

다음 모델은 ObjectDetector API와의 호환성이 보장됩니다.

자바에서 추론 실행

Android 앱에서 ObjectDetector 를 사용하는 방법의 예는 Object Detection 참조 앱참조 하세요.

1 단계 : Gradle 종속성 및 기타 설정 가져 오기

.tflite 모델 파일을 모델이 실행될 Android 모듈의 assets 디렉터리에 복사하십시오. 파일이 압축되지 않도록 지정하고 TensorFlow Lite 라이브러리를 모듈의 build.gradle 파일에 build.gradle 합니다.

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.1.0'
}

2 단계 : 모델 사용

// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder().setMaxResults(1).build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

ObjectDetector 를 구성하는 더 많은 옵션은 소스 코드와 javadoc 을 참조하십시오.

C ++에서 추론 실행

// Initialization
ObjectDetectorOptions options;
options.mutable_model_file_with_metadata()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

ObjectDetector 를 구성하는 추가 옵션은 소스 코드 를 참조하십시오.

예제 결과

다음은 TensorFlow Hub의 ssd mobilenet v1 감지 결과의 예입니다.

개

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

경계 상자를 입력 이미지에 렌더링합니다.

감지 출력

자체 모델 및 테스트 데이터 로 ObjectDetector 용 간단한 CLI 데모 도구를 사용해보십시오.

모델 호환성 요구 사항

ObjectDetector API는 필수 TFLite 모델 메타 데이터가 있는 TFLite 모델을 예상합니다.

호환되는 물체 감지기 모델은 다음 요구 사항을 충족해야합니다.

  • 입력 이미지 텐서 : (kTfLiteUInt8 / kTfLiteFloat32)

    • 크기의 이미지 입력 [batch x height x width x channels] .
    • 배치 추론은 지원되지 않습니다 ( batch 가 1이어야 함).
    • RGB 입력 만 지원됩니다 ( channels 은 3이어야 함).
    • 유형이 kTfLiteFloat32 인 경우 입력 정규화를 위해 NormalizationOptions를 메타 데이터에 연결해야합니다.
  • 출력 텐서는 DetectionPostProcess 연산의 4 개 출력이어야합니다. 즉,

    • 위치 텐서 (kTfLiteFloat32)

      • 텐서 크기 [1 x num_results x 4] , [top, left, right, bottom] 형식의 경계 상자를 나타내는 내부 배열.

      • BoundingBoxProperties는 메타 데이터에 첨부되어야하며 type=BOUNDARIES 및`coordinate_type = RATIO를 지정해야합니다.

    • 클래스 텐서 (kTfLiteFloat32)

      • 텐서 크기 [1 x num_results] , 각 값은 클래스의 정수 인덱스를 나타냅니다.

      • 선택 사항 (권장) 레이블 맵은 TENSOR_VALUE_LABELS 유형의 AssociatedFile-s로 첨부 될 수 있으며 한 줄에 하나의 레이블이 포함됩니다. 첫 번째 AssociatedFile (있는 경우)은 결과의 class_name 필드를 채우는 데 사용됩니다. display_name 필드는 로케일이 생성시 사용 된 ObjectDetectorOptionsdisplay_names_locale 필드 (기본적으로 "en", 즉 영어)와 일치하는 AssociatedFile (있는 경우)에서 채워집니다. 이들 중 어느 것도 사용할 수없는 경우 결과의 index 필드 만 채워집니다.

    • 점수 텐서 (kTfLiteFloat32)

      • 텐서 크기 [1 x num_results] , 각 값은 감지 된 개체의 점수를 나타냅니다.
    • 감지 텐서 수 (kTfLiteFloat32)

      • 정수 num_results (크기 [1] 텐서 [1] .