คู่มือนี้จะอธิบายวิธีย้ายข้อมูลออกจาก ML Kit for 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 |
| การตรวจจับใบหน้า | x | x |
| การสแกนบาร์โค้ด | x | x |
| การติดป้ายกำกับรูปภาพ | x | x |
| การตรวจจับออบเจ็กต์และการติดตาม | x | - |
อัปเดตทรัพยากร Dependency สำหรับไลบรารี ML Kit สำหรับ Android ในไฟล์ 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 | รวมกลุ่ม | บาง |
|---|---|---|
| รหัสภาษา | x | x |
| ฟีเจอร์ช่วยตอบ | x | x (เบต้า) |
อัปเดตทรัพยากร Dependency สำหรับไลบรารี ML Kit สำหรับ Android ในไฟล์ 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... การเรียกใช้getInstance()ของบริการ Firebase จะถูกแทนที่ด้วยการเรียกใช้เมธอดgetClient()ของจุดเริ่มต้นของฟีเจอร์ - การสร้างอินสแตนซ์เริ่มต้นสำหรับ
TextRecognizerถูกนำออกแล้ว เนื่องจากเราได้เปิดตัวไลบรารีเพิ่มเติมสำหรับการจดจำสคริปต์อื่นๆ เช่น ภาษาจีนและภาษาเกาหลี หากต้องการใช้ตัวเลือกเริ่มต้นกับโมเดลการจดจำข้อความสคริปต์ละติน ให้ประกาศทรัพยากร Dependency ใน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) { ... }
หมวดหมู่ "ไม่ระบุ" ถูกนำออกแล้ว เมื่อความเชื่อมั่นในการแยกประเภทของวัตถุต่ำ เราจะไม่แสดงป้ายกำกับใดๆ
นำทรัพยากร Dependency ของ Firebase ออก
นำทรัพยากร Dependency ของ Firebase ออกหลังจากการย้ายข้อมูล โดยทำตามขั้นตอนต่อไปนี้
- นำไฟล์กำหนดค่า Firebase ออกโดยลบไฟล์กำหนดค่า
google-services.jsonในไดเรกทอรีโมดูล (ระดับแอป) ของแอป - แทนที่ปลั๊กอิน Google Services Gradle ในไฟล์ 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 { // … }
- แทนที่ classpath ของปลั๊กอิน Google Services Gradle ในไฟล์ Gradle ระดับโปรเจ็กต์ (
build.gradle.kts) ด้วย classpath ของปลั๊กอิน 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
ขอความช่วยเหลือ
หากพบปัญหา โปรดดูหน้าชุมชน ของเรา ซึ่งเราได้ระบุช่องทางต่างๆ ที่คุณสามารถติดต่อเราได้