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

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

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

API ของ Vision

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

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

อัปเดตทรัพยากร Dependency สำหรับไลบรารี Android ของ ML Kit ในไฟล์ 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.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

API ภาษาธรรมชาติ

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

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

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

โมเดลที่มาพร้อมกับอุปกรณ์

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.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อาร์ติแฟกต์เก่าอาร์ติแฟกต์ใหม่
รหัสภาษา 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 ออกแล้ว เนื่องจากเราได้เปิดตัวการรองรับโมเดลที่กำหนดเองสำหรับฟีเจอร์ 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 ออกแล้ว คุณสามารถส่งข้อมูลเมตาของรูปภาพ เช่น ความกว้าง ความสูง การหมุนเวียน Degrees รูปแบบ ไปยังวิธีการสร้างของ 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 ปัจจุบันการส่งโมเดลมี 2 วิธีดังนี้

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

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

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

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

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

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

คำแปล

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

  • หากแอปใช้ตัวเลือกเงื่อนไขการดาวน์โหลด "อุปกรณ์ไม่มีการใช้งาน" โปรดทราบว่าตัวเลือกนี้ถูกนำออกและไม่สามารถใช้ได้อีกต่อไป คุณยังคงใช้ตัวเลือก "การชาร์จอุปกรณ์" ได้ หากต้องการลักษณะการทำงานที่ซับซ้อนมากขึ้น ให้หน่วงเวลาการเรียกใช้ RemoteModelManager.download ตามตรรกะของคุณเอง

การติดป้ายกำกับอิมเมจ AutoML

หากแอปใช้ตัวเลือกเงื่อนไขการดาวน์โหลด "ไม่มีการใช้งานอุปกรณ์" โปรดทราบว่าตัวเลือกนี้ถูกนำออกและไม่สามารถใช้ได้อีกต่อไป คุณยังสามารถใช้ตัวเลือก “การชาร์จอุปกรณ์” ได้

หากต้องการลักษณะการทำงานที่ซับซ้อนมากขึ้น คุณอาจเลื่อนการเรียกใช้ RemoteModelManager.download ตามตรรกะของคุณเอง

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

หากแอปใช้การตรวจจับออบเจ็กต์ที่มีการจัดประเภทแบบคร่าวๆ โปรดทราบว่า 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) {
    ...
}

ระบบได้นําหมวดหมู่ "ไม่ทราบ" ออกแล้ว เมื่อความเชื่อมั่นในการจัดประเภทของออบเจ็กต์ต่ำ เราจะไม่แสดงผลป้ายกำกับใดๆ

นำทรัพยากร Dependency ของ Firebase ออก (ไม่บังคับ)

ขั้นตอนนี้จะมีผลเมื่อตรงกับเงื่อนไขเหล่านี้เท่านั้น

  • Firebase ML Kit เป็นคอมโพเนนต์ Firebase เดียวที่คุณใช้
  • แต่จะใช้ API ในอุปกรณ์เท่านั้น
  • คุณไม่ได้ใช้การแสดงโมเดล

ในกรณีนี้ คุณสามารถนำทรัพยากร Dependency ของ Firebase ออกหลังการย้ายข้อมูลได้ โปรดทำตามขั้นตอนต่อไปนี้

  • นำไฟล์การกำหนดค่า Firebase ออกโดยลบไฟล์การกำหนดค่า google-services.json ในไดเรกทอรีโมดูล (ระดับแอป) ของแอป
  • แทนที่ปลั๊กอิน Google Services Gradle ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยทั่วไปจะเป็น app/build.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 {
  // …
}
  • แทนที่คลาสเส้นทางของปลั๊กอิน Google Services Gradle ในไฟล์ Gradle ของโปรเจ็กต์ (ระดับรูท) (build.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 ที่คอนโซล Firebase ตามinstructionsในเว็บไซต์สนับสนุนของ Firebase

การรับความช่วยเหลือ

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