iOS için taşıma

Ön koşullar

Kodunuzu taşımaya başlamadan önce aşağıdaki koşulları karşıladığınızdan emin olun:

  • ML Kit, Xcode 13.2.1 veya sonraki sürümleri destekler.
  • ML Kit, iOS 15.5 veya sonraki sürümleri destekler.
  • ML Kiti, 32 bit mimarileri (i386 ve armv7) desteklemez. ML Kit, 64 bit mimarileri (x86_64 ve arm64) destekler.
  • ML Kit kitaplığı yalnızca cocoapods olarak sağlanır. Framework'ları ve cocoapods'u birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanmak için önce cocoapods'u kullanmaya geçmeniz gerekir.

Cocoapods'u güncelleme

Uygulamanızın Podfile dosyasında ML Kit iOS cocoapods bağımlılıkları güncelleyin:

APIEski kapsül adlarıYeni kapsül adları
Barkod tarama Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Yüz algılama Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Resim etiketleme Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Nesne algılama ve izleme Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Metin tanıma Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
AutoML görüntü etiketleme (paketlenmiş model) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML görüntü etiketleme (Firebase'den model indirme) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
Dil kimliği Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Akıllı yanıt Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Çeviri Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Sınıf, enum ve tür adlarını güncelleme

Genel olarak sınıfların, enum'ların ve türlerin aşağıdaki şekilde yeniden adlandırılması gerekir:

  • Swift: Sınıf adlarından ve enum'lardan Vision ön ekini kaldırın
  • Objective-C: Hem FIRVision hem de FIR sınıf adını ve enum ön eklerini MLK ile değiştirin

Bazı sınıf adları ve türleri için bu genel kural geçerli değildir:

Swift

Eski sınıf veya türYeni sınıf veya tür
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (değişiklik yok)
VisionPoint VisionPoint (değişiklik yok)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Eski sınıf veya türYeni sınıf veya tür
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Yöntem adlarını güncelleme

Yöntem adlarını aşağıdaki kurallara göre güncelleyin:

  • Alan giriş noktası sınıfları (Vision, NaturalLanguage) artık mevcut değildir. Bunlar, göreve özel sınıflarla değiştirildi. Dedektör almak için çeşitli fabrika yöntemlerine yapılan çağrıları, her dedektörün fabrika yöntemine yapılan doğrudan çağrılarla değiştirin.

  • VisionImageMetadata sınıfı, VisionDetectorImageOrientation enum ile birlikte kaldırıldı. Bir resmin görüntüleme yönünü belirtmek için VisionImage öğesinin orientation özelliğini kullanın.

  • Yeni bir TextRecognizer örneği alan onDeviceTextRecognizer yöntemi, textRecognizer olarak yeniden adlandırıldı.

  • Güven özelliği, TextElement, TextLine ve TextBlock dahil olmak üzere metin tanıma sonucu sınıflarından kaldırıldı.

  • Yeni bir ImageLabeler örneği almak için kullanılan onDeviceImageLabeler ve onDeviceImageLabeler(options:) yöntemleri birleştirildi ve imageLabeler(options:) olarak yeniden adlandırıldı.

  • Yeni bir ObjectDetector örneği almak için kullanılan objectDetector yöntemi kaldırıldı. Bunun yerine objectDetector(options:) politikasını kullanın.

  • type özelliği ImageLabeler'ten, entityID özelliği ise resim etiketleme sonucu sınıfı ImageLabel'tan kaldırıldı.

  • Barkod tarama API'si detect(in _:, completion:), diğer görüntüleme API'leriyle tutarlı olması için process(_:, completion:) olarak yeniden adlandırıldı.

  • Natural Language API'ler artık "dil kodu" yerine "dil etiketi" (BCP-47 standardında tanımlandığı şekilde) terimini kullanıyor.

  • TranslateLanguage artık sabitleri için dil etiketleri (ör. .en) yerine okunabilir adlar ( ör. .english) kullanıyor.

Eski ve yeni Swift yöntemlerine dair bazı örnekleri aşağıda bulabilirsiniz:

Önceki

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()
    

Yeni

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())
    

Eski ve yeni Objective-C yöntemlerine dair bazı örnekleri aşağıda bulabilirsiniz:

Önceki

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];
    

Yeni

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'ye özgü değişiklikler

Nesne algılama ve izleme

Uygulamanız nesne sınıflandırması kullanıyorsa yeni SDK'nın, algılanan nesneler için sınıflandırma kategorisini döndürme şeklini değiştirdiğini unutmayın.

VisionObject içindeki VisionObjectCategory, tam sayı yerine ObjectLabel nesnesinde text olarak döndürülür. Olası tüm dize kategorileri DetectedObjectLabel enum'una dahildir.

.unknown kategorisinin kaldırıldığını unutmayın. Bir nesnenin sınıflandırılma güveni düşük olduğunda sınıflandırıcı hiç etiket döndürmez.

Eski ve yeni Swift kodunun bir örneğini aşağıda bulabilirsiniz:

Önceki

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

Yeni

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) {
    ...
  }
}

Aşağıda eski ve yeni Objective-C kodunun bir örneği verilmiştir:

Önceki

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

Yeni

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

Firebase bağımlılıkları kaldırma (İsteğe bağlı)

Bu adım yalnızca aşağıdaki koşullar karşılandığında geçerlidir:

  • Kullandığınız tek Firebase bileşeni Firebase ML Kit ise
  • Yalnızca cihaz üzerindeki API'leri kullanıyorsanız
  • Model yayınlamayı kullanmıyorsanız

Bu durumda, taşıma işleminden sonra Firebase bağımlılıkları kaldırabilirsiniz. Şu adımları uygulayın:

  • Uygulamanızın dizininden ve Xcode projenizden GoogleService-Info.plist dosyasını silerek Firebase yapılandırma dosyasını kaldırın.
  • Pod dosyanızdan pod 'Firebase/Analytics' gibi Firebase cocoapod'larını kaldırın.
  • FirebaseApp.configure() gibi FirebaseApp başlatma kodlarını kodunuzdan kaldırın.
  • Firebase destek sitesindeki talimatları uygulayarak Firebase konsolunda Firebase uygulamanızı silin.

Yardım Alma

Herhangi bir sorunla karşılaşırsanız lütfen bizimle iletişime geçebileceğiniz kanalları açıkladığımız Topluluk sayfamıza göz atın.