iOS için taşıma

Ön koşullar

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

  • ML Kit, Xcode 13.2.1 veya sonraki sürümleri destekler.
  • ML Kit, iOS 10 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 cocoapod olarak sağlanır. Çerçevelerle cocoapod'ları birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanabilmek için öncelikle cocoapod'ları kullanmaya başlamanız gerekir.

Cocoapods'u güncelle

Uygulamanızın Podfile dosyasında ML Kit iOS cocoapod'ları için 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/Resim Etiketleme
Nesne algılama ve izleme Firebase/MLVisionObjectDetection GoogleMLKit/Nesne Algılama
Metin tanıma Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
AutoML görüntüleri etiketleme (paketlenmiş model) Firebase/MLVisionAutoML GoogleMLKit/Resim EtiketlemeÖzel
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
Çeviri Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Çeviri

Sınıfların, sıralamaların ve türlerin adlarını güncelleme

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

  • Swift: Sınıf adlarından ve numaralandırmalardan Vision önekini kaldırın
  • Hedef-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ı şu kurallara göre güncelleyin:

  • Alan giriş noktası sınıfları (Vision, NaturalLanguage) artık mevcut değil. Bunların yerine göreve özel sınıflar geldi. Dedektörlerin her bir algılayıcının fabrika yöntemine doğrudan çağrılması için çeşitli fabrika yöntemlerine yapılan çağrıların yerine kullanılır.

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

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

  • Natural Language API'lerinde artık "dil kodu" yerine "dil etiketi" (BCP-47 standardı tarafından tanımlandığı şekilde) kullanılıyor.

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

Aşağıda eski ve yeni Swift yöntemlerine ilişkin 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 ilişkin 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ızda nesne sınıflandırması kullanılı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, ObjectLabel nesnesinde tam sayı yerine text olarak döndürülür. Olası tüm dize kategorileri DetectedObjectLabel sıralamasına dahildir.

.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.

Aşağıda eski ve yeni Swift koduna bir örnek verilmiştir:

Ö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 koduna bir örnek 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 sunmayı kullanmıyorsunuz

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

  • GoogleService-Info.plist dosyasını uygulamanızın dizininden ve Xcode projenizden silerek Firebase yapılandırma dosyasını kaldırın.
  • pod 'Firebase/Analytics' gibi Firebase cocoapod'larını Podfile'ınızdan kaldırın.
  • Kodunuzdan FirebaseApp.configure() gibi FirebaseApp başlatma işlemlerini kaldırın.
  • Firebase destek sitesindeki instructions uygun şekilde Firebase uygulamanızı Firebase konsolundan silin.

Yardım Alma

Herhangi bir sorunla karşılaşırsanız bizimle iletişime geçmek için uygun kanalları özetlediğimiz Topluluk sayfamıza göz atın.