আপনার অ্যাপ থেকে Google Cloud API কল করতে, আপনাকে একটি ইন্টারমিডিয়েট REST API তৈরি করতে হবে যা অনুমোদন ম্যানেজ করে এবং API কী-এর মতো গোপন ভ্যালু সুরক্ষিত রাখে। তারপর, এই মধ্যবর্তী পরিষেবার সাথে যোগাযোগ ও যাচাই করার জন্য আপনার মোবাইল অ্যাপে কোড লিখতে হবে।
এই REST API তৈরি করার একটি উপায় হল Firebase Authentication এবং Functions ব্যবহার করা, যা আপনাকে Google Cloud API-এর জন্য একটি ম্যানেজ করা, সার্ভারলেস গেটওয়ে প্রদান করে। এটি যাচাইকরণ ম্যানেজ করে এবং আপনার মোবাইল অ্যাপ থেকে প্রি-বিল্ট SDK-এর মাধ্যমে কল করা যেতে পারে।
এই নির্দেশিকা দেখায় যে কীভাবে আপনার অ্যাপ থেকে Cloud Vision API কল করার জন্য এই টেকনিক ব্যবহার করতে হয়। এই পদ্ধতিটি সমস্ত যাচাইকৃত ব্যবহারকারীকে আপনার Cloud প্রোজেক্টের মাধ্যমে Cloud Vision বিল করা পরিষেবা অ্যাক্সেস করার অনুমতি দেবে, তাই এগিয়ে যাওয়ার আগে এই যাচাইকরণ পদ্ধতিটি আপনার ব্যবহারের ক্ষেত্রে যথেষ্ট কিনা তা বিবেচনা করুন।
শুরু করার আগে
আপনার প্রোজেক্ট কনফিগার করুন
আপনি যদি এখনও আপনার অ্যাপে Firebase যোগ না করে থাকেন, তাহলে শুরু করার নির্দেশিকা-তে দেওয়া ধাপগুলি অনুসরণ করে তা করুন।Firebase ডিপেন্ডেন্সি ইনস্টল ও ম্যানেজ করতে Swift প্যাকেজ ম্যানেজার ব্যবহার করুন।
- 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 APIs পৃষ্ঠা খুলুন।
-
আপনি যদি আগে থেকে আপনার প্রোজেক্টকে যখন ব্যবহার করবেন তখন পেমেন্ট করুন Blaze প্রাইসিং প্ল্যানে আপগ্রেড না করে থাকেন, তাহলে তা করতে আপগ্রেড করুন বিকল্পে ক্লিক করুন। (আপনার প্রোজেক্ট Blaze প্রাইসিং প্ল্যানে না থাকলে তবেই আপনাকে আপগ্রেড করার জন্য প্রম্পট করা হবে।)
শুধুমাত্র Blaze প্রাইসিং প্ল্যানের প্রোজেক্টই ক্লাউড-ভিত্তিক API ব্যবহার করতে পারে।
- ক্লাউড-ভিত্তিক API আগে থেকে চালু করা না থাকলে, ক্লাউড-ভিত্তিক API চালু করুন বিকল্পে ক্লিক করুন।
- Cloud Vision API-তে অ্যাক্সেস বন্ধ করতে আপনার আগে থেকে থাকা Firebase API কী কনফিগার করুন:
- Cloud কনসোলের ক্রেডেনশিয়াল পৃষ্ঠা খুলুন।
- তালিকায় থাকা প্রতিটি 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 যোগ করতে হবে।
আপনার অ্যাপে প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন
Firebase লাইব্রেরির জন্য Cloud Functions ইনস্টল করতে Swift Package Manager ব্যবহার করুন।
১. ইনপুট ছবি প্রস্তুত করুন
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;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
অ্যারের প্রতিটি অবজেক্ট ছবিতে শনাক্ত করা ল্যান্ডমার্ককে দেখায়। প্রতিটি ল্যান্ডমার্কের জন্য,
আপনি ইনপুট ছবিতে এর বাউন্ডিং স্থানাঙ্ক, ল্যান্ডমার্কের নাম,
এর অক্ষাংশ এবং দ্রাঘিমাংশ, এর নলেজ গ্রাফ এন্টিটি আইডি (যদি উপলভ্য থাকে) এবং
ম্যাচের কনফিডেন্স স্কোর পেতে পারেন। যেমন:
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"];
}
}