আপনার অ্যাপ থেকে Google Cloud API কল করার জন্য, আপনাকে একটি মধ্যবর্তী REST API তৈরি করতে হবে যা অনুমোদন ম্যানেজ করে এবং API কী-এর মতো গোপন মান সুরক্ষিত করে। তারপরে, এই মধ্যবর্তী পরিষেবার সাথে যাচাইকরণ ও যোগাযোগ করার জন্য আপনাকে মোবাইল অ্যাপে কোড লিখতে হবে।
Firebase যাচাইকরণ ও ফাংশন ব্যবহার করে এই REST API তৈরি করা যায়। এটি আপনাকে Google Cloud API-তে ম্যানেজ করা, সার্ভারলেস গেটওয়ে দেয় যা যাচাইকরণ ম্যানেজ করে এবং আগে থেকে তৈরি SDK-এর সাহায্যে আপনার মোবাইল অ্যাপ থেকে কল করা যায়।
এই গাইড থেকে আপনি জানতে পারবেন যে কীভাবে এই টেকনিক ব্যবহার করে আপনার অ্যাপ থেকে Cloud Vision API কল করতে হয়। এই পদ্ধতি আপনার Cloud প্রোজেক্টের মাধ্যমে সবকটি যাচাই করা ব্যবহারকারীকে Cloud Vision-এর বিল করা পরিষেবা অ্যাক্সেস করতে দেবে, তাই এগিয়ে যাওয়ার আগে এই যাচাইকরণ পদ্ধতি আপনার ব্যবহারের ক্ষেত্রে যথেষ্ট কিনা তা বিবেচনা করে দেখুন।
শুরু করার আগে
আপনার প্রোজেক্ট কনফিগার করা
আপনি যদি এখনও আপনার অ্যাপে Firebase যোগ না করে থাকেন, তাহলে শুরু করার নির্দেশিকাতে দেওয়া ধাপগুলি অনুসরণ করে এটি করুন।Firebase ডিপেন্ডেন্সি ইনস্টল ও ম্যানেজ করতে Swift Package Manager ব্যবহার করুন।
- Xcode-এ, আপনার অ্যাপ প্রোজেক্ট খোলা থাকা অবস্থায়, ফাইল > প্যাকেজ যোগ করুন বিকল্পে নেভিগেট করুন।
- প্রম্পট করা হলে, Firebase Apple প্ল্যাটফর্ম SDK রিপোজিটরি যোগ করুন:
- Firebase ML লাইব্রেরি বেছে নিন।
- আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে
-ObjCফ্ল্যাগ যোগ করুন। - এটি সম্পূর্ণ হয়ে গেলে, Xcode অটোমেটিক আপনার ডিপেন্ডেন্সি ব্যাকগ্রাউন্ডে সমাধান ও ডাউনলোড করা শুরু করবে।
https://github.com/firebase/firebase-ios-sdk.git
এরপরে, অ্যাপ-মধ্যস্থ কিছু সেট-আপ করুন:
- আপনার অ্যাপে, Firebase ইমপোর্ট করুন:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
আরও কয়েকটি কনফিগারেশন ধাপ এবং আমরা রেডি:
-
আপনি যদি এখনও নিজের প্রোজেক্টের জন্য ক্লাউড-ভিত্তিক API চালু না করে থাকেন, তাহলে এখন করে নিন:
- Firebase কনসোলে Firebase ML API পৃষ্ঠা খুলুন।
-
আপনি যদি আগে থেকেই নিজের প্রোজেক্টকে পে-অ্যাজ-ইউ-গো Blaze প্রাইসিং প্ল্যানে আপগ্রেড না করে থাকেন, তাহলে তা করতে আপগ্রেড করুন বিকল্পে ক্লিক করুন। (আপনার প্রোজেক্ট Blaze প্রাইসিং প্ল্যানে না থাকলে তবেই আপনাকে আপগ্রেড করার জন্য প্রম্পট করা হবে।)
শুধুমাত্র Blaze প্রাইসিং প্ল্যানের প্রোজেক্টই ক্লাউড-ভিত্তিক API ব্যবহার করতে পারে।
- ক্লাউড-ভিত্তিক API আগে থেকেই চালু করা না থাকলে, ক্লাউড-ভিত্তিক API চালু করুন বিকল্পে ক্লিক করুন।
- Cloud
Vision API-তে অ্যাক্সেস বন্ধ করতে আপনার আগে থেকে থাকা Firebase API কী কনফিগার করুন:
- Cloud Console-এর শংসাপত্র পৃষ্ঠা খুলুন।
- তালিকায় থাকা প্রতিটি API কী-এর জন্য, এডিটিং ভিউ খুলুন এবং 'কী বিধিনিষেধ' বিভাগে, Cloud Vision API বাদ দিয়ে উপলভ্য সব API তালিকায় যোগ করুন।
কল করা যায় এমন ফাংশন ডেপ্লয় করা
এরপরে, আপনার অ্যাপ ও Cloud
Vision API-এর মধ্যে ব্রিজ তৈরি করতে যে ক্লাউড ফাংশন ব্যবহার করবেন সেটি ডিপ্লয় করুন। functions-samples রিপোজিটরিতে একটি উদাহরণ আছে
যা আপনি ব্যবহার করতে পারেন।
ডিফল্ট হিসেবে, এই ফাংশনের মাধ্যমে Cloud Vision API অ্যাক্সেস করলে, আপনার অ্যাপের শুধুমাত্র যাচাই করা ব্যবহারকারীরাই Cloud Vision API অ্যাক্সেস করতে পারবেন। বিভিন্ন প্রয়োজনীয়তা অনুযায়ী আপনি ফাংশন পরিবর্তন করতে পারবেন।
ফাংশন ডেপ্লয় করতে:
- functions-samples repo
ক্লোন বা ডাউনলোড করুন এবং
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 না থাকলে, এটি ইনস্টল করুন।
vision-annotate-imageডিরেক্টরিতে Firebase প্রোজেক্ট শুরু করুন। প্রম্পট করা হলে, তালিকা থেকে আপনার প্রোজেক্ট বেছে নিন।firebase init
- ফাংশন ডেপ্লয় করুন:
firebase deploy --only functions:annotateImage
আপনার অ্যাপে Firebase Auth যোগ করা
উপরে ডিপ্লয় করা কল করা যায় এমন ফাংশন আপনার অ্যাপের যাচাই না করা ব্যবহারকারীদের থেকে আসা যেকোনও অনুরোধ বাতিল করে দেবে। আপনি যদি এটি আগে না করে থাকেন, তাহলে আপনাকে আপনার অ্যাপে Firebase Auth যোগ করতে হবে।
আপনার অ্যাপে প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন
Cloud Functions for Firebase লাইব্রেরি ইনস্টল করতে Swift Package Manager ব্যবহার করুন।
১. ইনপুট ছবি প্রস্তুত করা
Cloud Vision-কে কল করার জন্য, ছবিটিকে অবশ্যই base64-encoded স্ট্রিং হিসেবে ফর্ম্যাট করতে হবে।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;টাইপ
LANDMARK_DETECTIONহিসেবে সেট করে একটি অনুরোধ তৈরি করুন:Swift
let requestData = [ "image": ["content": base64encodedImage], "features": ["maxResults": 5, "type": "LANDMARK_DETECTION"] ]Objective-C
NSDictionary *requestData = @{ @"image": @{@"content": base64encodedImage}, @"features": @{@"maxResults": @5, @"type": @"LANDMARK_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 }];
৩. চেনা ল্যান্ডমার্ক সম্পর্কে তথ্য পাওয়া
ল্যান্ডমার্ক শনাক্তকরণ অপারেশন সফল হলে, টাস্কের ফলাফলে
BatchAnnotateImagesResponse
-এর JSON উত্তর রিটার্ন করা হবে। landmarkAnnotations
অ্যারের প্রতিটি অবজেক্ট এমন একটি ল্যান্ডমার্ককে উপস্থাপন করে যা ছবিতে শনাক্ত করা হয়েছে। প্রতিটি ল্যান্ডমার্কের জন্য,
ইনপুট ছবিতে এর বাউন্ডিং কোঅর্ডিনেট, ল্যান্ডমার্কের নাম,
এর অক্ষাংশ ও দ্রাঘিমাংশ, এর Knowledge Graph এন্টিটি আইডি (উপলভ্য থাকলে) এবং
ম্যাচের কনফিডেন্স স্কোর পেতে পারেন। যেমন:
Swift
if let labelArray = (result?.data as? [String: Any])?["landmarkAnnotations"] as? [[String:Any]] {
for labelObj in labelArray {
let landmarkName = labelObj["description"]
let entityId = labelObj["mid"]
let score = labelObj["score"]
let bounds = labelObj["boundingPoly"]
// Multiple locations are possible, e.g., the location of the depicted
// landmark and the location the picture was taken.
guard let locations = labelObj["locations"] as? [[String: [String: Any]]] else { continue }
for location in locations {
let latitude = location["latLng"]?["latitude"]
let longitude = location["latLng"]?["longitude"]
}
}
}
Objective-C
NSArray *labelArray = result.data[@"landmarkAnnotations"];
for (NSDictionary *labelObj in labelArray) {
NSString *landmarkName = labelObj[@"description"];
NSString *entityId = labelObj[@"mid"];
NSNumber *score = labelObj[@"score"];
NSArray *bounds = labelObj[@"boundingPoly"];
// Multiple locations are possible, e.g., the location of the depicted
// landmark and the location the picture was taken.
NSArray *locations = labelObj[@"locations"];
for (NSDictionary *location in locations) {
NSNumber *latitude = location[@"latLng"][@"latitude"];
NSNumber *longitude = location[@"latLng"][@"longitude"];
}
}