การย้ายข้อมูลสำหรับ Android

คู่มือนี้อธิบายวิธีย้ายข้อมูลออกจาก ML Kit สำหรับ Firebase สำหรับ Android

อัปเดตการนำเข้า Gradle

SDK ของ ML Kit ต้องการทรัพยากร Dependency เพียงรายการเดียวสำหรับ ML Kit API แต่ละรายการ คุณไม่จำเป็นต้อง ระบุไลบรารีที่ใช้กันทั่วไป เช่น firebase-ml-vision หรือ firebase-ml-natural-language ML Kit ใช้com.google.android.gms เนมสเปซสำหรับไลบรารีที่ขึ้นอยู่กับบริการ Google Play

Vision API

ระบบจะส่งโมเดลที่รวมไว้เป็นส่วนหนึ่งของแอปพลิเคชัน ต้องดาวน์โหลดโมเดลแบบบาง API บางรายการมีให้ใช้งานทั้งในรูปแบบรวมและรูปแบบบาง ส่วน API อื่นๆ มีให้ใช้งานในรูปแบบใดรูปแบบหนึ่งเท่านั้น

APIรวมกลุ่มบาง
การจดจำข้อความx (เบต้า)x
การตรวจจับใบหน้าxx
การสแกนบาร์โค้ดxx
การติดป้ายกำกับรูปภาพxx
การตรวจจับและการติดตามออบเจ็กต์x-

อัปเดตทรัพยากร Dependency สำหรับคลัง Android ของ ML Kit ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ app/build.gradle.kts) ตามตารางต่อไปนี้

โมเดลที่รวมกลุ่ม

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

หากต้องการโฮสต์และดาวน์โหลดโมเดลที่กำหนดเอง ให้ย้ายโมเดลไปยัง Cloud Storage แล้วเพิ่ม ตรรกะการดาวน์โหลดในแอปเพื่อโหลดโมเดลโดยใช้ LocalModel ดูรายละเอียดได้ที่ คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage

Natural Language API

ระบบจะส่งโมเดลที่รวมไว้เป็นส่วนหนึ่งของแอปพลิเคชัน ต้องดาวน์โหลดโมเดลแบบบาง

APIรวมกลุ่มบาง
รหัสภาษาxx
ฟีเจอร์ช่วยตอบxx (เบต้า)

อัปเดตทรัพยากร Dependency สำหรับคลัง Android ของ ML Kit ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ app/build.gradle.kts) ตามตารางต่อไปนี้

โมเดลที่รวมกลุ่ม

APIอาร์ติแฟกต์เก่าอาร์ติแฟกต์ใหม่
รหัสภาษา 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อาร์ติแฟกต์เก่าอาร์ติแฟกต์ใหม่
รหัสภาษา 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.LocalModel

ต้องดาวน์โหลดด้วยตนเอง ระบบเลิกใช้งานโมเดลระยะไกลที่โฮสต์ใน Firebase แล้ว ดูรายละเอียดได้ที่ คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage
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 ออกแล้ว เนื่องจากเราได้เปิดตัวการรองรับโมเดลที่กำหนดเองสำหรับฟีเจอร์ทั้ง 2 รายการนี้ เช่น หากต้องการใช้ตัวเลือกเริ่มต้นกับโมเดลพื้นฐานใน ImageLabeling ให้ประกาศทรัพยากร Dependency ใน com.google.mlkit:image-labeling และใช้ ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) ใน Java
  • แฮนเดิลทั้งหมด (ตรวจหา/สแกน/ติดป้ายกำกับ/แปล...) สามารถปิดได้ ตรวจสอบว่ามีการเรียกใช้เมธอด close() เมื่อจะไม่ใช้ออบเจ็กต์เหล่านั้นอีกต่อไป หากคุณใช้ใน Fragment หรือ AppCompatActivity วิธีหนึ่งในการดำเนินการดังกล่าวคือการเรียกใช้ LifecycleOwner.getLifecycle() ใน Fragment หรือ AppCompatActivity แล้วเรียกใช้ Lifecycle.addObserver
  • processImage() และ detectInImage() ใน Vision API ได้เปลี่ยนชื่อเป็น process() เพื่อให้สอดคล้องกัน
  • ตอนนี้ Natural Language API ใช้คำว่า "แท็กภาษา" (ตามที่กำหนดโดยมาตรฐาน BCP 47) แทน "รหัสภาษา" แล้ว
  • นำเมธอด Getter ในคลาส xxxOptions ออกแล้ว
  • ระบบไม่รองรับเมธอด getBitmap() ในคลาส InputImage (แทนที่ FirebaseVisionImage) อีกต่อไป ซึ่งเป็นส่วนหนึ่งของอินเทอร์เฟซสาธารณะ ดูBitmapUtils.javaในตัวอย่างการเริ่มต้นใช้งาน ML Kit อย่างรวดเร็วเพื่อแปลงบิตแมป จากอินพุตต่างๆ
  • FirebaseVisionImageMetadata ออกแล้ว คุณจึงส่งข้อมูลเมตาของรูปภาพ เช่น width, height, rotationDegrees, format ไปยังวิธีการสร้างของ InputImage ได้เลย

ตัวอย่างเมธอด 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 lifecycle 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 lifecycle 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 ตอนนี้มี 2 วิธีในการส่งโมเดล

  • ผ่านบริการ Google Play หรือที่เรียกว่า "บาง" (แนะนำ) - วิธีนี้จะช่วยลด ขนาดแอปและแชร์โมเดลระหว่างแอปพลิเคชัน อย่างไรก็ตาม นักพัฒนาแอปจะต้องตรวจสอบว่าได้ดาวน์โหลดโมเดลก่อนที่จะใช้ เป็นครั้งแรก
  • เมื่อใช้ APK ของแอปหรือที่เรียกว่า "รวม" - วิธีนี้จะเพิ่มขนาดแอป แต่ หมายความว่าโมเดลจะพร้อมใช้งานทันที

การติดตั้งใช้งานทั้ง 2 แบบจะแตกต่างกันเล็กน้อย โดยเวอร์ชัน "รวม" จะมีการปรับปรุงหลายอย่างมากกว่าเวอร์ชัน "บาง" ดูรายละเอียดเกี่ยวกับความแตกต่างเหล่านี้ได้ในหลักเกณฑ์ของ Barcode Scanning API

การตรวจจับใบหน้า

สำหรับ Face Detection API มี 2 วิธีในการส่งโมเดล ดังนี้

  • ผ่านบริการ Google Play หรือที่เรียกว่า "บาง" (แนะนำ) - วิธีนี้จะช่วยลด ขนาดแอปและแชร์โมเดลระหว่างแอปพลิเคชัน อย่างไรก็ตาม นักพัฒนาแอปจะต้องตรวจสอบว่าได้ดาวน์โหลดโมเดลก่อนที่จะใช้เป็นครั้งแรก
  • เมื่อใช้ APK ของแอป หรือที่เรียกว่า "รวม" - วิธีนี้จะเพิ่มขนาดการดาวน์โหลดแอป แต่หมายความว่าโมเดลจะพร้อมใช้งานทันที

ลักษณะการทำงานของการติดตั้งใช้งานจะเหมือนกัน

คำแปล

  • TranslateLanguage ตอนนี้ใช้ชื่อที่อ่านได้สำหรับค่าคงที่ (เช่น ENGLISH) แทนแท็กภาษา (EN) และตอนนี้ยังเป็น @StringDef แทน @IntDef ด้วย โดยค่าของค่าคงที่จะเป็นแท็กภาษา BCP 47 ที่ตรงกัน

การติดป้ายกำกับรูปภาพด้วย AutoML (เลิกใช้งานแล้ว)

เราเลิกใช้งานการดาวน์โหลดโมเดลที่กำหนดเองสำหรับการติดป้ายกำกับรูปภาพโดยใช้ AutoML แล้ว และ จะปิดให้บริการในวันที่ 15 มิถุนายน 2027 คุณควรใช้ Cloud Storage เพื่อโฮสต์โมเดลและเพิ่มตรรกะการดาวน์โหลดลงในแอปเพื่อดาวน์โหลดโมเดลแทน ดูรายละเอียดได้ที่คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage

การตรวจจับและการติดตามออบเจ็กต์

หากแอปใช้การตรวจจับออบเจ็กต์ที่มีการจัดประเภทแบบหยาบ โปรดทราบว่า SDK ใหม่ได้เปลี่ยนวิธีที่ใช้ในการแสดงหมวดหมู่การจัดประเภทสำหรับออบเจ็กต์ที่ตรวจพบ

ระบบจะแสดงหมวดหมู่การจัดประเภทเป็นอินสแตนซ์ของ DetectedObject.Label แทนที่จะเป็นจำนวนเต็ม หมวดหมู่ที่เป็นไปได้ทั้งหมดสำหรับ เครื่องมือคัดแยกแบบหยาบจะรวมอยู่ในคลาส PredefinedCategory

ตัวอย่างโค้ด 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 ออกหลังจากการย้ายข้อมูล โปรดทำตามขั้นตอนต่อไปนี้

  • นำไฟล์การกำหนดค่า Firebase ออกโดยลบ google-services.jsonไฟล์การกำหนดค่าในไดเรกทอรีโมดูล (ระดับแอป) ของ แอป
  • แทนที่ปลั๊กอิน Gradle ของบริการของ Google ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ app/build.gradle.kts) ด้วยปลั๊กอิน Strict Version Matcher

ก่อน

plugins {
  id("com.android.application")
  id("com.google.gms.google-services")
}

android {
  // …
}

หลัง

plugins {
  id("com.android.application")
  id("com.google.android.gms.strict-version-matcher-plugin")
}

android {
  // …
}
  • แทนที่คลาสพาธของปลั๊กอิน Gradle ของบริการของ Google ในไฟล์ Gradle ระดับโปรเจ็กต์ (ระดับรูท) (build.gradle.kts) ด้วยคลาสพาธของปลั๊กอิน Strict Version Matcher ดังนี้

ก่อน

buildscript {
  dependencies {
    // ...

    classpath("com.google.gms:google-services:4.3.3")
  }
}

หลัง

buildscript {
  dependencies {
    // ...
    classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1")
  }
}

ลบแอป Firebase ในคอนโซล Firebase ตามวิธีการในเว็บไซต์สนับสนุนของ Firebase

ขอความช่วยเหลือ

หากพบปัญหา โปรดไปที่หน้าชุมชน ซึ่งเราได้ระบุช่องทางที่ใช้ติดต่อเรา