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

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

ข้อกำหนดเบื้องต้น

ก่อนเริ่มย้ายข้อมูลโค้ด โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • ML Kit รองรับ Xcode 13.2.1 ขึ้นไป
  • ML Kit รองรับ iOS เวอร์ชัน 15.5 ขึ้นไป
  • ML Kit ไม่รองรับสถาปัตยกรรม 32 บิต (i386 และ armv7) ML Kit รองรับสถาปัตยกรรม 64 บิต (x86_64 และ arm64)
  • ไลบรารี ML Kit มีให้บริการเป็น cocoapods เท่านั้น คุณไม่สามารถผสมเฟรมเวิร์กและ CocoaPods ได้ ดังนั้นหากต้องการใช้ไลบรารีนี้ คุณต้องย้ายข้อมูลเพื่อใช้ CocoaPods ก่อน

อัปเดต Cocoapods

อัปเดตทรัพยากร Dependency สำหรับ Cocoapods ของ ML Kit iOS ใน Podfile ของแอป โดยทำดังนี้

APIชื่อพ็อดเดิมชื่อพ็อดใหม่
การสแกนบาร์โค้ด Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
การตรวจจับใบหน้า Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
การติดป้ายกำกับรูปภาพ Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
การตรวจจับออบเจ็กต์และการติดตาม Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
การจดจำข้อความ Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
การติดป้ายกำกับรูปภาพ AutoML (โมเดลที่รวมมาให้) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
การติดป้ายกำกับรูปภาพ AutoML (ดาวน์โหลดโมเดลแล้ว) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

หากต้องการโฮสต์และดาวน์โหลดโมเดลที่กำหนดเอง ให้ย้ายโมเดลไปยัง Cloud Storage และเพิ่มตรรกะการดาวน์โหลดในแอปเพื่อโหลดเป็นโมเดลในเครื่อง ดูรายละเอียดได้ที่ คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage
รหัสภาษา Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
ฟีเจอร์ช่วยตอบ Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
แปลภาษา Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

อัปเดตชื่อคลาส, enum และประเภท

โดยทั่วไปแล้ว คุณต้องเปลี่ยนชื่อคลาส, enum และประเภทดังนี้

  • Swift: นำคำนำหน้า Vision ออกจากชื่อคลาสและ Enum
  • Objective-C: แทนที่ทั้งชื่อคลาส FIRVision และ FIR และคำนำหน้า enum ด้วย MLK

ชื่อและประเภทคลาสบางรายการจะไม่เป็นไปตามกฎทั่วไปนี้

Swift

ชั้นเรียนหรือประเภทเก่าคลาสหรือประเภทใหม่
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

ต้องดาวน์โหลดด้วยตนเอง โมเดลระยะไกลที่โฮสต์ใน Firebase เลิกใช้งานแล้ว ดูรายละเอียดได้ที่ คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (ไม่มีการเปลี่ยนแปลง)
VisionPoint VisionPoint (ไม่มีการเปลี่ยนแปลง)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

ชั้นเรียนหรือประเภทเก่าคลาสหรือประเภทใหม่
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

ต้องดาวน์โหลดด้วยตนเอง โมเดลระยะไกลที่โฮสต์ใน Firebase เลิกใช้งานแล้ว ดูรายละเอียดได้ที่ คำแนะนำในการย้ายข้อมูลจาก Firebase ML ไปยัง Cloud Storage
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

อัปเดตชื่อเมธอด

อัปเดตชื่อเมธอดตามกฎต่อไปนี้

  • ไม่มีคลาสจุดแรกเข้าของโดเมน (Vision, NaturalLanguage) อีกต่อไป โดยคลาสที่เจาะจงงานจะเข้ามาแทนที่คลาสเหล่านี้ แทนที่การเรียกใช้เมธอด Factory ต่างๆ เพื่อรับตัวตรวจจับด้วยการเรียกใช้เมธอด Factory ของตัวตรวจจับแต่ละรายการโดยตรง

  • ระบบนำคลาส VisionImageMetadata ออกแล้ว พร้อมกับ enum VisionDetectorImageOrientation ใช้พร็อพเพอร์ตี้ orientation ของ VisionImage เพื่อระบุการวางแนวการแสดงผลของรูปภาพ

  • เมธอด onDeviceTextRecognizer ที่รับอินสแตนซ์ TextRecognizer ใหม่ได้รับการเปลี่ยนชื่อเป็น textRecognizer

  • ระบบได้นำพร็อพเพอร์ตี้ความเชื่อมั่นออกจากคลาสผลลัพธ์การจดจำข้อความ ซึ่งรวมถึง TextElement, TextLine และ TextBlock

  • เรารวมเมธอด onDeviceImageLabeler และ onDeviceImageLabeler(options:) เพื่อรับอินสแตนซ์ ImageLabeler ใหม่ และเปลี่ยนชื่อเป็น imageLabeler(options:)

  • ระบบได้นำเมธอด objectDetector เพื่อรับอินสแตนซ์ ObjectDetector ใหม่แล้ว โปรดใช้ objectDetector(options:) แทน

  • เราได้นำพร็อพเพอร์ตี้ type ออกจาก ImageLabeler และนำพร็อพเพอร์ตี้ entityID ออกจากคลาสผลลัพธ์การติดป้ายกำกับรูปภาพ ImageLabel แล้ว

  • API การสแกนบาร์โค้ด detect(in _:, completion:) ได้เปลี่ยนชื่อเป็น process(_:, completion:) เพื่อให้สอดคล้องกับ Vision API อื่นๆ

  • ตอนนี้ Natural Language API ใช้คำว่า "แท็กภาษา" (ตามที่กำหนดโดยมาตรฐาน BCP-47) แทน "รหัสภาษา"

  • ตอนนี้ TranslateLanguage ใช้ชื่อที่อ่านได้ (เช่น .english) สำหรับค่าคงที่แทนแท็กภาษา (เช่น .en)

ตัวอย่างเมธอด Swift แบบเก่าและแบบใหม่มีดังนี้

เก่า

let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)

let detector = Vision.vision().faceDetector(options: options)

let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)

let detector = Vision.vision().objectDetector()
    

ใหม่

let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = FaceDetector.faceDetector(options: options)

let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    

ตัวอย่างเมธอด Objective-C แบบเก่าและแบบใหม่มีดังนี้

เก่า

FIRVisionOnDeviceImageLabelerOptions *options =
    [[FIRVisionOnDeviceImageLabelerOptions alloc] init];
options.confidenceThreshold = 0.75;
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceImageLabelerWithOptions:options];

FIRVisionFaceDetector *detector =
    [[FIRVision vision] faceDetectorWithOptions: options];

FIRAutoMLLocalModel *localModel =
    [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"];
FIRVisionOnDeviceAutoMLImageLabelerOptions *options =
    [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc]
        initWithLocalModel: localModel];
options.confidenceThreshold = 0.75
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options];

FIRVisionObjectDetector *detector =
    [[FIRVision vision] objectDetector];
    

ใหม่

MLKImageLabelerOptions *options =
    [[MLKImageLabelerOptions alloc] init];
options.confidenceThreshold = @(0.75);
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKFaceDetector *detector =
    [MLKFaceDetector faceDetectorWithOptions:options];

MLKLocalModel *localModel =
    [[MLKLocalModel alloc]
        initWithManifestPath:@"automl/manifest.json"];
MLKCustomImageLabelerOptions *options =
    [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel];
options.confidenceThreshold = @(0.75)
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init];
MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
    

การเปลี่ยนแปลงเฉพาะ API

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

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

VisionObjectCategory ใน VisionObject จะแสดงผลเป็น text ในออบเจ็กต์ ObjectLabel แทนที่จะเป็นจำนวนเต็ม หมวดหมู่สตริงที่เป็นไปได้ทั้งหมดจะรวมอยู่ใน enum DetectedObjectLabel

โปรดทราบว่าเราได้นำหมวดหมู่ .unknown ออกแล้ว เมื่อความมั่นใจในการแยกประเภทวัตถุต่ำ ตัวแยกประเภทจะไม่แสดงป้ายกำกับเลย

ตัวอย่างรหัส Swift แบบเก่าและแบบใหม่มีดังนี้

เก่า

if (object.classificationCategory == .food) {
    ...
}

ใหม่

if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}

ตัวอย่างโค้ด Objective-C แบบเก่าและแบบใหม่มีดังนี้

เก่า

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

ใหม่

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

นำทรัพยากร Dependency ของ Firebase ออก

นำทรัพยากร Dependency ของ Firebase ออกหลังจากการย้ายข้อมูล โปรดทำตามขั้นตอนต่อไปนี้

  • นำไฟล์การกำหนดค่า Firebase ออกโดยลบไฟล์ GoogleService-Info.plist ออกจากไดเรกทอรีของแอปและโปรเจ็กต์ Xcode
  • นำ Firebase Cocoapod เช่น pod 'Firebase/Analytics' ออกจาก Podfile
  • นำการเริ่มต้น FirebaseApp เช่น FirebaseApp.configure() ออกจากโค้ด
  • ลบแอป Firebase ในคอนโซล Firebase ตามวิธีการในเว็บไซต์สนับสนุนของ Firebase

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

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