برای فراخوانی Google Cloud API از برنامهتان، باید یک REST API واسطه ایجاد کنید که مجوزدهی را مدیریت کند و از مقادیر محرمانه مانند کلیدهای API محافظت کند. سپس باید در برنامه تلفن همراهتان کدی بنویسید تا با این سرویس واسطه اصالتسنجی و ارتباط برقرار کند.
یکی از راههای ایجاد این REST API استفاده از Firebase Authentication و Functions است که به شما یک درگاه مدیریتشده و بدون سرور به Google Cloud APIs میدهد که اصالتسنجی را مدیریت میکند و میتواند از برنامه تلفن همراه شما با کیتهای توسعه نرمافزار ازپیشساختهشده فراخوانی شود.
این راهنما نشان میدهد که چگونه از این تکنیک برای فراخوانی Cloud Vision API از برنامهتان استفاده کنید. این روش به همه کاربران اصالتسنجیشده اجازه میدهد تا ازطریق پروژه Cloud شما به سرویسهای صورتحساب Cloud Vision دسترسی داشته باشند، بنابراین قبلاز ادامه، درنظر بگیرید که آیا این سازوکار اصالتسنجی برای مورد استفاده شما کافی است یا نه.
قبل از شروع
پیکربندی پروژه
اگر Firebase را به برنامهتان اضافه نکردهاید، با دنبال کردن مراحل موجود در راهنمای شروع به کار این کار را انجام دهید.از Swift Package Manager برای نصب و مدیریت وابستگیهای Firebase استفاده کنید.
- در Xcode، درحالیکه پروژه برنامهتان باز است، به File (فایل) > Add Packages (افزودن بستهها) بروید.
- وقتی خواسته شد، مخزن کیت توسعه نرمافزار Firebase برای پلاتفرمهای Apple را اضافه کنید:
- کتابخانه Firebase ML را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags (سایر پرچمهای پیونددهنده) در تنظیمات ساخت هدف اضافه کنید. - پساز اتمام، Xcode بهطور خودکار شروع به حل و بارگیری وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
سپس، برخیاز راهاندازیهای درونبرنامه را انجام دهید:
- در برنامهتان، Firebase را وارد کنید:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
چند مرحله پیکربندی دیگر باقی مانده است و سپس آماده شروع هستیم:
-
اگر قبلاً میاناهای برنامهسازی کاربردی ابری را برای پروژهتان فعال نکردهاید، اکنون این کار را انجام دهید:
- Firebase ML صفحه API را در Firebase کنسول باز کنید.
-
اگر قبلاً پروژهتان را به طرح قیمتگذاری Blaze پرداخت به اندازه استفاده ارتقا ندادهاید، روی ارتقا دادن کلیک کنید تا این کار را انجام دهید. (فقط درصورتی از شما خواسته میشود ارتقا دهید که پروژهتان در طرح قیمتگذاری Blaze نباشد.)
فقط پروژههایی که در طرح قیمتگذاری Blaze هستند میتوانند از میاناهای برنامهسازی کاربردی مبتنی بر Cloud استفاده کنند.
- اگر میاناهای برنامهسازی کاربردی مبتنی بر Cloud ازقبل فعال نشدهاند، روی فعال کردن میاناهای برنامهسازی کاربردی مبتنی بر Cloud کلیک کنید.
- کلیدهای Firebase API موجودتان را پیکربندی کنید تا دسترسی به Cloud Vision API را غیرمجاز کنید:
- صفحه اعتبارنامهها را در کنسول Cloud باز کنید.
- برای هر کلید میانای برنامهسازی کاربردی در فهرست، نمای ویرایش را باز کنید و در بخش «محدودیتهای کلید»، همه میاناهای برنامهسازی کاربردی دردسترس را بهجز میانای برنامهسازی کاربردی Cloud Vision به فهرست اضافه کنید.
استقرار تابع قابلفراخوانی
سپس، Cloud Function را که برای پل زدن بین برنامه و Cloud Vision API استفاده خواهید کرد مستقر کنید. مخزن functions-samples حاوی نمونهای است که میتوانید از آن استفاده کنید.
بهطور پیشفرض، دسترسی به Cloud Vision API ازطریق این تابع فقط به کاربران اصالتسنجیشده برنامهتان اجازه میدهد به Cloud Vision API دسترسی داشته باشند. میتوانید تابع را برای الزامات مختلف اصلاح کنید.
برای استقرار تابع:
- مخزن functions-samples را شبیهسازی یا بارگیری کنید
و به دایرکتوری
Node-1st-gen/vision-annotate-imageبروید:git clone https://github.com/firebase/functions-samplescd Node-1st-gen/vision-annotate-image - نصب وابستگیها:
cd functionsnpm installcd .. - اگر Firebase CLI را ندارید، آن را نصب کنید.
- پروژه Firebase را در فهرست راهنمای
vision-annotate-imageمقداردهی اولیه کنید. وقتی درخواست شد، پروژهتان را در فهرست انتخاب کنید.firebase init
- تابع را مستقر کنید:
firebase deploy --only functions:annotateImage
افزودن Firebase Auth به برنامه
تابع قابلفراخوانی که در بالا مستقر شده است، هر درخواستی را از کاربران غیرمعتبر برنامهتان رد خواهد کرد. اگر قبلاً این کار را نکردهاید، باید Firebase Auth را به برنامهتان اضافه کنید.
افزودن وابستگیهای لازم به برنامه
از Swift Package Manager برای نصب کتابخانه Cloud Functions for Firebase استفاده کنید.
اکنون آماده برچسبگذاری تصاویر هستید.
۱. آماده کردن تصویر ورودی
برای فراخوانی Cloud Vision، تصویر باید بهصورت رشته کدبندیشده base64 قالببندی شود. برای پردازشUIImage:
Swift
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
Objective-C
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
۲. فراخوانی تابع قابلفراخوانی برای برچسبگذاری تصویر
برای برچسبگذاری اشیاء در تصویر، تابع قابلفراخوانی را با ارسال درخواست JSON Cloud Vision فراخوانی کنید.ابتدا، نمونهای از Cloud Functions را مقداردهی اولیه کنید:
Swift
lazy var functions = Functions.functions()Objective-C
@property(strong, nonatomic) FIRFunctions *functions;درخواستی ایجاد کنید که نوع آن روی
LABEL_DETECTIONتنظیم شده باشد:Swift
let requestData = [ "image": ["content": base64encodedImage], "features": ["maxResults": 5, "type": "LABEL_DETECTION"] ]Objective-C
NSDictionary *requestData = @{ @"image": @{@"content": base64encodedImage}, @"features": @{@"maxResults": @5, @"type": @"LABEL_DETECTION"} };درنهایت، تابع را فراخوانی کنید:
Swift
do { let result = try await functions.httpsCallable("annotateImage").call(requestData) print(result) } catch { if let error = error as NSError? { if error.domain == FunctionsErrorDomain { let code = FunctionsErrorCode(rawValue: error.code) let message = error.localizedDescription let details = error.userInfo[FunctionsErrorDetailsKey] } // ... } }Objective-C
[[_functions HTTPSCallableWithName:@"annotateImage"] callWithObject:requestData completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) { if (error) { if ([error.domain isEqualToString:@"com.firebase.functions"]) { FIRFunctionsErrorCode code = error.code; NSString *message = error.localizedDescription; NSObject *details = error.userInfo[@"details"]; } // ... } // Function completed succesfully // Get information about labeled objects }];
۳. دریافت اطلاعات درباره اشیای برچسبگذاریشده
اگر عملیات برچسبگذاری تصویر موفقیتآمیز باشد، پاسخ JSON BatchAnnotateImagesResponse در نتیجه تکلیف برگردانده خواهد شد. هر شیء در آرایهlabelAnnotations
نشاندهنده چیزی است که در تصویر برچسبگذاری شده است. برای هر برچسب، میتوانید
توضیحات نوشتاری برچسب،
شناسه نهاد Knowledge Graph آن
(درصورت وجود)، و امتیاز اطمینان مطابقت را دریافت کنید. برای مثال:
Swift
if let labelArray = (result?.data as? [String: Any])?["labelAnnotations"] as? [[String:Any]] {
for labelObj in labelArray {
let text = labelObj["description"]
let entityId = labelObj["mid"]
let confidence = labelObj["score"]
}
}
Objective-C
NSArray *labelArray = result.data[@"labelAnnotations"];
for (NSDictionary *labelObj in labelArray) {
NSString *text = labelObj[@"description"];
NSString *entityId = labelObj[@"mid"];
NSNumber *confidence = labelObj[@"score"];
}