Android용 이전

Gradle 가져오기 업데이트

새 SDK에는 ML Kit API마다 하나의 종속 항목만 필요합니다. firebase-ml-vision 또는 firebase-ml-natural-language와 같은 공통 라이브러리를 지정할 필요가 없습니다. ML Kit는 Google Play 서비스에 종속된 라이브러리에 com.google.android.gms 네임스페이스를 사용합니다.

Vision API

번들 모델은 애플리케이션의 일부로 제공됩니다. 얇은 모델을 다운로드해야 합니다. 일부 API는 번들과 씬 형식으로 모두 제공되지만, 다른 API는 둘 중 하나의 형식으로만 제공됩니다.

API번들
텍스트 인식x (베타)x
얼굴 인식xx
바코드 스캔xx
이미지 라벨 지정xx
객체 감지 및 추적x-

다음 표에 따라 모듈 (앱 수준) Gradle 파일 (일반적으로 app/build.gradle)에서 ML Kit Android 라이브러리의 종속 항목을 업데이트합니다.

번들 모델

API오래된 아티팩트새로운 아티팩트
바코드 스캔 com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:barcode-scanning:17.2.0
얼굴 윤곽 com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:face-detection:16.1.6
이미지 라벨 지정 com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:image-labeling:17.0.8
객체 감지 com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:object-detection:17.0.1

얇은 모델

API오래된 아티팩트새로운 아티팩트
바코드 스캔 com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
얼굴 인식 com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-face-detection:17.1.0
텍스트 인식 com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-text-recognition:19.0.0

AutoMLVision Edge

API이전 아티팩트새로운 아티팩트
다운로드하지 않는 AutoML com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.2
다운로드가 가능한 AutoML com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.2
com.google.mlkit:linkfirebase:17.0.0

Natural Language API

번들 모델은 애플리케이션의 일부로 제공됩니다. 씬 모델을 다운로드해야 합니다.

API번들
언어 IDxx
스마트 답장xx (베타)

다음 표에 따라 모듈 (앱 수준) Gradle 파일 (일반적으로 app/build.gradle)에서 ML Kit Android 라이브러리의 종속 항목을 업데이트합니다.

번들 모델

API오래된 아티팩트새로운 아티팩트
언어 ID com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.5
스마트 답장 com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.3

얇은 모델

API오래된 아티팩트새로운 아티팩트
언어 ID com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
스마트 답장 com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

클래스 이름 업데이트

수업이 이 표에 나타나면 다음과 같이 변경하세요.

이전 클래스새 수업
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.CustomRemoteModel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

다른 클래스의 경우 다음 규칙을 따르세요.

  • 클래스 이름에서 FirebaseVision 접두사를 삭제합니다.
  • 클래스 이름에서 Firebase 접두사로 시작하는 다른 접두사를 삭제합니다.

또한 패키지 이름에서 com.google.firebase.ml 접두사를 com.google.mlkit로 바꿉니다.

메서드 이름 업데이트

최소한의 코드 변경사항이 있습니다.

  • 감지기/스캐너/라벨러/번역기... 인스턴스화가 변경되었습니다. 이제 각 기능에 자체 진입점이 있습니다. 예: BarcodeScanning, TextRecognition, ImageLabeling, Translation... Firebase 서비스 getInstance()에 대한 호출이 기능 진입점의 getClient() 메서드 호출로 대체됩니다.
  • 중국어 및 한국어와 같은 다른 스크립트를 인식하기 위한 추가 라이브러리가 도입되었으므로 TextRecognizer의 기본 인스턴스화가 삭제되었습니다. 라틴어 스크립트 텍스트 인식 모델과 함께 기본 옵션을 사용하려면 com.google.android.gms:play-services-mlkit-text-recognition의 종속 항목을 선언하고 TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)를 사용하세요.
  • ImageLabeler 및 ObjectDetector의 기본 인스턴스화는 이 두 기능에 대한 커스텀 모델 지원이 도입되었으므로 삭제되었습니다. 예를 들어 ImageLabeling에서 기본 모델과 함께 기본 옵션을 사용하려면 com.google.mlkit:image-labeling의 종속 항목을 선언하고 Java에서 ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)를 사용하세요.
  • 모든 핸들 (감지기/스캐너/라벨러/번역기 등)을 닫을 수 있습니다. 이러한 객체를 더 이상 사용하지 않을 때는 close() 메서드가 호출되어야 합니다. Fragment 또는 AppCompatActivity에서 이를 사용 중인 경우 한 가지 간단한 방법은 Fragment 또는 AppCompatActivity에서 LifecycleOwner.getLifecycle()을 호출한 다음 Lifecycle.addObserver를 호출하는 것입니다.
  • Vision API의 processImage()detectInImage()는 일관성을 위해 process()로 이름이 변경되었습니다.
  • 이제 Natural Language API는 '언어 코드' 대신 '언어 태그'(BCP 47 표준의 정의에 따름)라는 용어를 사용합니다.
  • xxxOptions 클래스의 getter 메서드는 제거되었습니다.
  • InputImage 클래스(FirebaseVisionImage 대체)의 getBitmap() 메서드는 더 이상 공개 인터페이스의 일부로 지원되지 않습니다. 다양한 입력에서 비트맵을 변환하려면 ML Kit 빠른 시작 샘플BitmapUtils.java를 참조하세요.
  • firebaseImageMetadata가 삭제되었습니다. width, 높이, splitDegrees, 형식과 같은 이미지 메타데이터를 InputImages의 구성 메서드에 전달하면 됩니다.

다음은 기존 및 새 Kotlin 메서드의 몇 가지 예입니다.

변경 전

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

신규

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add life cycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

다음은 기존 및 신규 Java 메서드의 몇 가지 예입니다.

변경 전

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

신규

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
// Optional: add life cycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

API별 변경사항

바코드 스캔

Barcode Scanning API의 경우, 다음 두 가지 방법으로 모델을 전송할 수 있습니다.

  • '얇은' Google Play 서비스를 통해(권장) - 이렇게 하면 앱 크기가 줄어들고 모델이 애플리케이션 간에 공유됩니다. 하지만 개발자는 모델을 처음 사용하기 전에 다운로드했는지 확인해야 합니다.
  • 앱의 APK(일명 '번들') - 이렇게 하면 앱 크기가 커지지만 모델을 즉시 사용할 수 있게 됩니다.

두 구현은 약간 다르며, '번들' 버전은 '씬' 버전에 비해 여러 가지 부분이 개선되었습니다. 이러한 차이점에 대한 자세한 내용은 Barcode Scanning API 가이드라인을 참조하세요.

얼굴 인식

Face Detection API의 경우 다음 두 가지 방법으로 모델을 제공할 수 있습니다.

  • '얇은' Google Play 서비스를 통해(권장) - 이렇게 하면 앱 크기가 줄어들고 모델이 애플리케이션 간에 공유됩니다. 하지만 개발자는 모델을 처음 사용하기 전에 다운로드했는지 확인해야 합니다.
  • 앱의 APK(일명 '번들') - 이렇게 하면 앱 다운로드 크기가 커지지만 모델을 즉시 사용할 수 있게 됩니다.

구현 동작은 동일합니다.

번역과

  • 이제 TranslateLanguage에서 상수에 언어 태그 (EN) 대신 읽을 수 있는 이름 (예: ENGLISH)을 사용합니다. 또한 이제 @IntDef가 아닌 @StringDef이며 상수의 값은 일치하는 BCP 47 언어 태그입니다.

  • 앱에서 '기기 유휴 상태' 다운로드 조건 옵션을 사용하는 경우 이 옵션이 삭제되었으며 더 이상 사용할 수 없다는 점에 유의하세요. '기기 충전' 옵션은 계속 사용할 수 있습니다. 더 복잡한 동작을 원하는 경우 자체 로직 뒤에서 RemoteModelManager.download 호출을 지연하면 됩니다.

AutoML 이미지 라벨 지정

앱에서 '기기 유휴 상태' 다운로드 조건 옵션을 사용하는 경우 이 옵션이 삭제되었으며 더 이상 사용할 수 없다는 점에 유의하세요. '기기 충전' 옵션은 계속 사용할 수 있습니다.

더 복잡한 동작을 원하는 경우 자체 로직 뒤에서 RemoteModelManager.download 호출을 지연하면 됩니다.

객체 감지 및 추적

앱에서 대략적인 분류가 적용된 객체 감지를 사용하는 경우 새 SDK에서 감지된 객체의 분류 카테고리를 반환하는 방식이 변경되었다는 점에 유의하세요.

분류 카테고리는 정수 대신 DetectedObject.Label의 인스턴스로 반환됩니다. 대략적인 분류기에 사용할 수 있는 모든 카테고리는 PredefinedCategory 클래스에 포함됩니다.

다음은 이전 Kotlin 코드와 새 Kotlin 코드의 예입니다.

변경 전

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

신규

if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

다음은 이전 및 새 Java 코드의 예입니다.

변경 전

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

신규

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

'알 수 없음' 카테고리가 삭제되었습니다. 객체 분류 신뢰도가 낮으면 어떠한 라벨도 반환하지 않습니다.

Firebase 종속 항목 삭제 (선택사항)

이 단계는 다음 조건이 충족되는 경우에만 적용됩니다.

  • Firebase ML Kit는 Firebase 구성요소 중 유일하게 사용하는 구성요소입니다.
  • 온디바이스 API만 사용합니다.
  • 모델 서빙을 사용하지 않는 경우

이 경우 마이그레이션 후 Firebase 종속 항목을 삭제할 수 있습니다. 다음 단계를 따르세요.

  • 앱의 모듈 (앱 수준) 디렉터리에서 google-services.json 구성 파일을 삭제하여 Firebase 구성 파일을 삭제합니다.
  • 모듈 (앱 수준) Gradle 파일 (일반적으로 app/build.gradle)의 Google 서비스 Gradle 플러그인을 Strict Version Matcher 플러그인으로 바꿉니다.

변경 전

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

변경 후

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • 프로젝트 (루트 수준) Gradle 파일 (build.gradle)의 Google 서비스 Gradle 플러그인 클래스 경로를 Strict Version Matcher 플러그인 클래스 경로로 바꿉니다.

변경 전

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

변경 후

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

Firebase 지원 사이트의 instructions에 따라 Firebase Console에서 Firebase 앱을 삭제합니다.

도움말 보기

문제가 발생하면 YouTube에 연락할 수 있는 채널을 간략히 설명하는 커뮤니티 페이지를 확인하세요.