การย้ายข้อมูลสำหรับ 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) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
รหัสภาษา Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
ฟีเจอร์ช่วยตอบ Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
แปล Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

อัปเดตชื่อคลาส อีنوم และประเภท

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

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

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

Swift

คลาสหรือประเภทเก่าคลาสหรือประเภทใหม่
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (ไม่มีการเปลี่ยนแปลง)
VisionPoint VisionPoint (ไม่มีการเปลี่ยนแปลง)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

คลาสหรือประเภทเก่าคลาสหรือประเภทใหม่
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

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

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

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

  • ระบบนำคลาส 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:) เพื่อให้สอดคล้องกับ API อื่นๆ ของ Vision

  • ตอนนี้ 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 แทนจำนวนเต็ม หมวดหมู่สตริงที่เป็นไปได้ทั้งหมดจะรวมอยู่ใน DetectedObjectLabel enum

โปรดทราบว่าเราได้นำหมวดหมู่ .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 Dependencies ออก (ไม่บังคับ)

ขั้นตอนนี้จะมีผลก็ต่อเมื่อเป็นไปตามเงื่อนไขต่อไปนี้

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

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

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

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

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