iOS için taşıma

Ön koşullar

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

  • ML Kit, Xcode 13.2.1 veya sonraki sürümlerini destekler.
  • ML Kit, iOS 10 veya sonraki sürümleri destekler.
  • ML Kit, 32 bit mimarileri (i386 ve armv7) desteklemez. ML Kit, 64 bit mimarileri (x86_64 ve arm64) destekler.
  • ML Kit kitaplığı yalnızca cocoapod olarak sunulur. Çerçeveleri ve cocoapod'ları karıştıramazsınız. Dolayısıyla bu kitaplığı kullanabilmek için öncelikle cocoapod'ları kullanmak üzere geçiş yapmanız gerekir.

CocoaPods güncelleme

Uygulamanızın Podfile dosyasında ML Kit iOS cocoapod'larının bağımlılıklarını 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
Görüntü etiketleme Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/Görüntü Etiketleme
Nesne algılama ve izleme Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Metin tanıma Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/Metin Tanıma
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/Dil Kimliği
Akıllı yanıt Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/Akıllı Yanıt
Çevir Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Çeviri

Sınıfların, numaralandırmaların ve türlerin adlarını güncelleme

Genel olarak sınıflar , numaralandırmalar ve türlerin aşağıdaki gibi yeniden adlandırılması gerekir:

  • Swift: Sınıf adlarından ve numaralandırmalardan Vision önekini kaldırın
  • Objective-C: Hem FIRVision hem de FIR sınıf adını ve numaralandırma ö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ğil. Bunların yerine göreve özgü sınıflar kullanıma sunuldu. Dedektörleri her bir algılayıcının fabrika yöntemine doğrudan çağrılarla almak için çeşitli fabrika yöntemlerine yapılan çağrıları değiştirin.

  • VisionImageMetadata sınıfı ve VisionDetectorImageOrientation sıralaması kaldırıldı. 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 öğesinden kaldırıldı ve entityID özelliği ImageLabel resim etiketleme sonucu sınıfından kaldırıldı.

  • Barkod tarama API'sinin detect(in _:, completion:) adı, diğer Vision API'leriyle tutarlı olacak şekilde process(_:, completion:) olarak değiştirildi.

  • Natural Language API'ler artık "dil kodu" yerine "dil etiketi" terimini (BCP-47 standardı tarafından tanımlandığı gibi) kullanmaktadır.

  • TranslateLanguage, sabit değerleri için artık dil etiketleri (.en gibi) yerine okunabilir adlar (.english gibi) kullanıyor.

Aşağıda eski ve yeni Swift yöntemlerine bazı örnekler verilmiştir:

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

Aşağıda eski ve yeni Objective-C yöntemlerine bazı örnekler verilmiştir:

Ö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 özel değişiklikler

Nesne algılama ve izleme

Uygulamanız nesne sınıflandırması kullanıyorsa yeni SDK'nın algılanan nesnelerin sınıflandırma kategorisini döndürme şeklinin değiştiğini unutmayın.

VisionObject öğesindeki VisionObjectCategory, bir ObjectLabel nesnesinde tam sayı yerine text olarak döndürülür. Olası tüm dize kategorileri DetectedObjectLabel sıralamasına dahil edilir.

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

Eski ve yeni Swift kodu ö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ını kaldırın (İsteğe bağlı)

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

  • Firebase ML Kit, kullandığınız tek Firebase bileşenidir
  • Yalnızca cihaz üzerindeki API'leri kullanıyorsunuz
  • Model sunma kullanmıyorsunuz

Bu durumda, taşıma işleminden sonra Firebase bağımlılıklarını 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.
  • Tüm Firebase cocoapod'larını (ör. pod 'Firebase/Analytics') Podfile dosyanızdan kaldırın.
  • Kodunuzdan FirebaseApp.configure() gibi FirebaseApp başlatma işlemlerini kaldırın.
  • Firebase destek sitesindeki instructions 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ı belirttiğimiz Topluluk sayfamıza göz atın.