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

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

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

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

อัปเดต CocoaPods

อัปเดตทรัพยากร Dependency สำหรับ CocoaPods ของ ML Kit ใน Podfile ของแอปคุณดังนี้

APIชื่อพ็อดเก่าชื่อพ็อดใหม่
การสแกนบาร์โค้ด Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/การสแกนบาร์โค้ด
การตรวจจับใบหน้า 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/MLNLSmartAnswer
GoogleMLKit/SmartAnswer
แปลภาษา Firebase/MLNaturalLanguage
Firebase/MLNLTranslation
GoogleMLKit/แปลภาษา

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

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

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

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

Swift

คลาสหรือประเภทเดิมชั้นเรียนหรือประเภทใหม่
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
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 การมองเห็นอื่นๆ

  • ตอนนี้ 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 ออก (ไม่บังคับ)

ขั้นตอนนี้จะมีผลเมื่อตรงกับเงื่อนไขเหล่านี้เท่านั้น

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

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

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

การรับความช่วยเหลือ

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