Bu kılavuzda, iOS için Firebase için ML Kiti'nden nasıl geçiş yapılacağı açıklanmaktadır.
Ön koşullar
Kodunuzu taşımaya başlamadan önce aşağıdaki koşulları karşıladığınızdan emin olun:
- ML Kiti, 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 Kiti, 64 bit mimarileri (x86_64 ve arm64) destekler.
- ML Kit kitaplığı yalnızca cocoapods olarak sağlanır. Framework'leri ve CocoaPods'u birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanmak için önce CocoaPods'a geçmeniz gerekir.
Cocoapods'u güncelleme
Uygulamanızın Podfile dosyasında ML Kit iOS CocoaPods bağımlılıklarını güncelleyin:
| API | Eski 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 resim etiketleme (paketlenmiş model) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| AutoML resim etiketleme (model indirildi) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Özel modelleri barındırmak ve indirmek için modellerinizi Cloud Storage'a taşıyın ve uygulamanıza indirme mantığı ekleyerek bunları yerel model olarak yükleyin. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin. |
| 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, enum'lar ve türler aşağıdaki gibi yeniden adlandırılmalıdır:
- Swift: Sınıf adlarından ve enum'lardan
Visionön ekini kaldırın. - Objective-C: Hem
FIRVisionhem deFIRsınıf adını ve enum ön ekleriniMLKile değiştirin.
Bu genel kural, bazı sınıf adları ve türleri için geçerli değildir:
Swift
| Eski sınıf veya tür | Yeni sınıf veya tür |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Manuel olarak indirilmesi gerekir. Firebase tarafından barındırılan uzak modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin. |
| 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ür | Yeni sınıf veya tür |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzak modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
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 yerini göreve özel sınıflar aldı. Dedektörleri 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.VisionImageMetadatasınıfı,VisionDetectorImageOrientationenum ile birlikte kaldırıldı. Bir resmin görüntüleme yönünü belirtmek içinVisionImageöğesininorientationözelliğini kullanın.Yeni bir
TextRecognizerörneği alanonDeviceTextRecognizeryöntemi,textRecognizerolarak yeniden adlandırıldı.Güven özelliği,
TextElement,TextLineveTextBlockdahil olmak üzere metin tanıma sonucu sınıflarından kaldırıldı.Yeni bir
ImageLabelerörneği almak için kullanılanonDeviceImageLabelerveonDeviceImageLabeler(options:)yöntemleri birleştirildi veimageLabeler(options:)olarak yeniden adlandırıldı.Yeni bir
ObjectDetectorörneği almak için kullanılanobjectDetectoryöntemi kaldırıldı. Bunun yerineobjectDetector(options:)politikasını kullanın.typeözelliğiImageLabeleröğesinden,entityIDözelliği ise resim etiketleme sonucu sınıfından (ImageLabel) kaldırıldı.Barkod tarama API'si
detect(in _:, completion:), diğer görüntü API'leriyle tutarlı olması içinprocess(_:, completion:)olarak yeniden adlandırıldı.Natural Language API'leri artık "dil kodu" yerine "dil etiketi" terimini (BCP-47 standardı tarafından tanımlandığı şekilde) kullanıyor.
TranslateLanguageartık sabitleri için dil etiketleri (ör..en) yerine okunabilir adlar (ör..english) kullanıyor.
Eski ve yeni Swift yöntemlerine dair bazı örnekler:
Ö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 nesnelerin 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üveni düşük olduğunda sınıflandırıcı hiçbir 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) {
...
}
}Eski ve yeni Objective-C koduna bir örnek:
Ö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
Taşıma işleminden sonra Firebase bağımlılıklarını kaldırın. Şu adımları uygulayın:
- Uygulamanızın dizininden ve Xcode projenizden
GoogleService-Info.plistdosyasını silerek Firebase yapılandırma dosyasını kaldırın. - Podfile'ınızdan
pod 'Firebase/Analytics'gibi Firebase CocoaPod'larını kaldırın. FirebaseApp.configure()gibi FirebaseApp başlatma işlemlerini kodunuzdan 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 bizimle iletişime geçebileceğiniz kanalları listelediğimiz Topluluk sayfamıza göz atın.