การย้ายข้อมูลสำหรับ 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 สำหรับ ML Kit iOS Cocoapods ใน 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 และประเภท

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

  • 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 ออกแล้วพร้อมกับ VisionDetectorImageOrientation enum ใช้พร็อพเพอร์ตี้ orientation ของ VisionImage เพื่อระบุการวางแนวการแสดงผลของรูปภาพ

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

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

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

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

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

  • เราได้เปลี่ยนชื่อ Barcode Scanning 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]) {
  ...
}

นำการอ้างอิง Firebase ออก

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

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

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

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