Anda dapat menggunakan Firebase ML untuk mengenali bangunan terkenal dalam sebuah gambar.
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, arahkan 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 API Firebase ML dari konsol Firebase.
Jika Anda belum mengupgrade proyek Anda ke paket harga Blaze, klik Upgrade untuk melakukannya. (Anda akan diminta untuk memutakhirkan hanya jika proyek Anda tidak termasuk dalam paket Blaze.)
Hanya project level Blaze yang dapat menggunakan API berbasis Cloud.
- Jika API berbasis Cloud belum diaktifkan, klik Aktifkan API berbasis Cloud .
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
https://github.com/firebase/firebase-ios-sdk
Selanjutnya, lakukan beberapa penyiapan dalam aplikasi:
Konfigurasikan detektor bangunan terkenal
Secara default, detektor Cloud menggunakan versi stabil model dan menampilkan hingga 10 hasil. Jika Anda ingin mengubah salah satu dari pengaturan ini, tentukan dengan objek VisionCloudDetectorOptions
seperti pada contoh berikut:
Cepat
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Objective-C
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
Pada langkah berikutnya, teruskan objek VisionCloudDetectorOptions
saat Anda membuat objek Cloud detector.
Jalankan detektor landmark
Untuk mengenali tengara dalam gambar, teruskan gambar sebagaiUIImage
atau CMSampleBufferRef
ke metode detect(in:)
VisionCloudLandmarkDetector
:- Dapatkan instance
VisionCloudLandmarkDetector
:Cepat
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
Objective-C
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
- Untuk memanggil Cloud Vision, gambar harus diformat sebagai string berenkode base64. Untuk memproses
UIImage
:Cepat
guard let imageData = uiImage.jpegData(compressionQuality: 1.0f) else { return } let base64encodedImage = imageData.base64EncodedString()
Objective-C
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- Kemudian, teruskan gambar ke metode
detect(in:)
:Cepat
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
Objective-C
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
Dapatkan informasi tentang landmark yang dikenali
Jika pengenalan bangunan terkenal berhasil, larik objekVisionCloudLandmark
akan diteruskan ke pengendali penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang tengara yang dikenali pada gambar.Sebagai contoh:
Cepat
for landmark in landmarks { let landmarkDesc = landmark.landmark let boundingPoly = landmark.frame let entityId = landmark.entityId // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for location in landmark.locations { let latitude = location.latitude let longitude = location.longitude } let confidence = landmark.confidence }
Objective-C
for (FIRVisionCloudLandmark *landmark in landmarks) { NSString *landmarkDesc = landmark.landmark; CGRect frame = landmark.frame; NSString *entityId = landmark.entityId; // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for (FIRVisionLatitudeLongitude *location in landmark.locations) { double latitude = [location.latitude doubleValue]; double longitude = [location.longitude doubleValue]; } float confidence = [landmark.confidence floatValue]; }
Langkah selanjutnya
- Sebelum Anda men-deploy ke produksi aplikasi yang menggunakan Cloud API, Anda harus melakukan beberapa langkah tambahan untuk mencegah dan mengurangi dampak akses API yang tidak sah .