iOS için taşıma

Ön koşullar

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

  • ML Kit, Xcode 13.2.1 veya sonraki sürümleri destekler.
  • ML Kiti, 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. Çerçeveleri ve Cocoapods'leri birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanmak için önce Cocoapods'e geçmeniz gerekir.

Cocoapods'u güncelleme

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

APIEski kapsül adlarıYeni pod adı
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ıfların, numaralandırılmış türlerin ve türlerin adlarını güncelleme

Genel olarak sınıfların, numaralandırılmış türlerin ve türlerin aşağıdaki şekilde 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ı ve enum öneklerini 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 özgü sınıflar kullanıma sunulmuştur. Çeşitli fabrika yöntemlerinin dedektörleri alma çağrılarını, her dedektörün fabrika yöntemine yapılan doğrudan çağrılarla değiştirin.

  • VisionImageMetadata sınıfı ve VisionDetectorImageOrientation enum'u 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ştirilerek 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'den, entityID özelliği ise resim etiketleme sonucu sınıfı ImageLabel'den kaldırıldı.

  • Barkod tarama API'si detect(in _:, completion:), diğer Vision 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ığı şekliyle) terimini kullanıyor.

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

Eski ve yeni Swift yöntemlerine ilişkin 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ı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, tam sayı yerine ObjectLabel nesnesinde text olarak döndürülür. Olası tüm dize kategorileri DetectedObjectLabel enum'una dahil edilir.

.unknown kategorisinin kaldırıldığını unutmayın. Bir nesneyi sınıflandırma güvenilirliği 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) {
    ...
  }
}

Eski ve yeni Objective-C kodunun bir örneğini aşağıda bulabilirsiniz:

Ö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ırma (isteğ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 cihazdaki API'leri kullanıyorsanız
  • Model sunma özelliğini kullanmıyorsanız

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.
  • Podfile'ınızdan pod 'Firebase/Analytics' gibi Firebase cocoapod'larını kaldırın.
  • Kodunuzdan FirebaseApp.configure() gibi FirebaseApp başlatma işlemlerini kaldırın.
  • Firebase destek sitesindeki talimatlara göre Firebase konsolunda Firebase uygulamanızı silin.

Yardım Alma

Herhangi bir sorunla karşılaşırsanız lütfen topluluk sayfamızı ziyaret edin. Bu sayfada, bizimle iletişime geçebileceğiniz kanallar açıklanmaktadır.