Android용 이전

Gradle 가져오기 업데이트

새 SDK에는 ML Kit API마다 하나의 종속 항목만 필요합니다. Kubernetes에서 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-

모듈 (app- 수준)를 사용하여 Gradle 파일 (일반적으로 app/build.gradle)을 구성합니다.

번들 모델

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.3.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.7
이미지 라벨 지정 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.9
객체 감지 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.2

얇은 모델

API오래된 아티팩트새로운 아티팩트
바코드 스캔 com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
얼굴 인식 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.1

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.3
다운로드가 가능한 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.3
com.google.mlkit:linkfirebase:17.0.0

Natural Language API

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

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

모듈 (app- 수준)를 사용하여 Gradle 파일 (일반적으로 app/build.gradle)을 구성합니다.

번들 모델

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.6
스마트 답장 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.4

얇은 모델

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 Console에서 Firebase 앱을 삭제합니다. Firebase 지원 사이트의 안내를 참조하세요.

도움말 보기

문제가 발생하면 YouTube에서 설명하는 커뮤니티 페이지를 확인하세요. 문의하실 수 있는 채널을 확인하세요.