Anda dapat menggunakan Firebase ML untuk memberi label pada objek yang dikenali dalam sebuah gambar. Lihat ikhtisar untuk informasi tentang fitur API ini.
Sebelum kamu memulai
- Jika Anda belum menambahkan Firebase ke aplikasi Anda, lakukan dengan mengikuti langkah-langkah di panduan memulai .
- Di Xcode, dengan proyek aplikasi Anda terbuka, navigasikan ke File > Add Packages .
- Saat diminta, tambahkan repositori SDK platform Apple Firebase:
- Pilih pustaka Firebase ML.
- Setelah selesai, Xcode akan secara otomatis mulai menyelesaikan dan mengunduh dependensi Anda di latar belakang.
- Di aplikasi Anda, impor Firebase:
Cepat
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
Jika Anda belum mengaktifkan API berbasis Cloud untuk proyek Anda, lakukan sekarang:
- Buka halaman Firebase ML API dari Firebase console.
Jika Anda belum meningkatkan proyek Anda ke paket harga Blaze, klik Tingkatkan untuk melakukannya. (Anda akan diminta untuk memutakhirkan hanya jika proyek Anda tidak ada dalam paket Blaze.)
Hanya project level Blaze yang dapat menggunakan API berbasis Cloud.
- Jika Cloud-based APIs belum diaktifkan, klik Enable Cloud-based APIs .
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
https://github.com/firebase/firebase-ios-sdk
Selanjutnya, lakukan beberapa pengaturan dalam aplikasi:
Sekarang Anda siap untuk memberi label pada gambar.
1. Siapkan gambar input
Buat objek VisionImage
menggunakan UIImage
atau CMSampleBufferRef
.
Untuk menggunakan UIImage
:
- Jika perlu, putar gambar sehingga properti
imageOrientation
-nya menjadi.up
. - Buat objek
VisionImage
menggunakanUIImage
yang diputar dengan benar. Jangan tentukan metadata rotasi apa pun—nilai default,.topLeft
, harus digunakan.Cepat
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
Untuk menggunakan CMSampleBufferRef
:
Buat objek
VisionImageMetadata
yang menentukan orientasi data gambar yang terdapat dalam bufferCMSampleBufferRef
.Untuk mendapatkan orientasi gambar:
Cepat
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } }
Objective-C
- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } }
Kemudian, buat objek metadata:
Cepat
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
Objective-C
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
- Buat objek
VisionImage
menggunakan objekCMSampleBufferRef
dan metadata rotasi:Cepat
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. Konfigurasikan dan jalankan pelabel gambar
Untuk memberi label objek dalam gambar, teruskan objekVisionImage
ke metode VisionImageLabeler
processImage()
VisionImageLabeler.Pertama, dapatkan instance
VisionImageLabeler
:Cepat
let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)
Objective-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];
Kemudian, teruskan gambar ke metode
processImage()
:Cepat
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
Objective-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. Dapatkan informasi tentang objek berlabel
Jika pelabelan gambar berhasil, larik objekVisionImageLabel
akan diteruskan ke penangan penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang fitur yang dikenali dalam gambar.Sebagai contoh:
Cepat
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
Objective-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
Langkah selanjutnya
- Sebelum menerapkan ke produksi aplikasi yang menggunakan Cloud API, Anda harus mengambil beberapa langkah tambahan untuk mencegah dan mengurangi efek akses API yang tidak sah .