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