Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

আইওএসের ফায়ারবেস এথ এবং ফাংশন ব্যবহার করে ক্লাউড ভিশনের সাথে ল্যান্ডমার্কগুলি সুরক্ষিতভাবে সনাক্ত করুন

আপনার অ্যাপ থেকে গুগল ক্লাউড এপিআই কল করার জন্য, আপনাকে একটি মধ্যবর্তী REST API তৈরি করতে হবে যা অনুমোদন পরিচালনা করে এবং এপিআই কীগুলির মতো গোপন মান রক্ষা করে। এই মধ্যবর্তী পরিষেবাটির সাথে প্রমাণীকরণ এবং যোগাযোগের জন্য আপনাকে আপনার মোবাইল অ্যাপে কোড লিখতে হবে।

এই REST API তৈরির একটি উপায় হল Firebase প্রমাণীকরণ এবং ফাংশন ব্যবহার করে, যা আপনাকে Google ক্লাউড API- এর একটি পরিচালিত, সার্ভারহীন গেটওয়ে দেয় যা প্রমাণীকরণ পরিচালনা করে এবং আপনার মোবাইল অ্যাপ থেকে পূর্বনির্ধারিত SDKs দিয়ে কল করা যায়।

আপনার অ্যাপ থেকে ক্লাউড ভিশন এপিআই -তে কল করার জন্য এই কৌশলটি কীভাবে ব্যবহার করতে হয় তা এই নির্দেশিকা দেখায়। এই পদ্ধতিটি সমস্ত অনুমোদিত ব্যবহারকারীদের আপনার ক্লাউড প্রকল্পের মাধ্যমে ক্লাউড ভিশন বিল পরিষেবাগুলি অ্যাক্সেস করার অনুমতি দেবে, তাই এগিয়ে যাওয়ার আগে এই ব্যবহারের প্রক্রিয়াটি আপনার ব্যবহারের ক্ষেত্রে যথেষ্ট কিনা তা বিবেচনা করুন।

তুমি শুরু করার আগে

আপনার প্রকল্প কনফিগার করুন

  1. আপনি ইতিমধ্যে আপনার অ্যাপ্লিকেশানে Firebase করে তাহলে, এ পদক্ষেপগুলি অনুসরণ করে তা করতে শুরু করার নির্দেশিকা
  2. আপনার Podfile মধ্যে Firebase অন্তর্ভুক্ত করুন: আপনি ইনস্টল অথবা আপনার প্রকল্পের Pods আপডেট করতে, তার ব্যবহার করে আপনার Xcode প্রকল্প খুলুন নিশ্চিত করা পর .xcworkspace
  3. আপনার অ্যাপে, Firebase আমদানি করুন:

    সুইফট

    import Firebase

    উদ্দেশ্য গ

    @import Firebase;
  4. আপনি যদি ইতিমধ্যে আপনার প্রকল্পের জন্য ক্লাউড-ভিত্তিক API সক্ষম না করে থাকেন, তাহলে এখনই করুন:

    1. খুলুন Firebase এমএল API গুলি পৃষ্ঠা Firebase কনসোলের।
    2. যদি আপনি ইতিমধ্যে আলোকচ্ছটা মূল্যের পরিকল্পনা আপনার প্রকল্পের উন্নীত না করে থাকেন, তাই এ আপগ্রেড করুন এ ক্লিক করুন। (আপনার প্রজেক্ট যদি ব্লেজ প্ল্যানে না থাকে তবেই আপনাকে আপগ্রেড করতে বলা হবে।)

      শুধুমাত্র ব্লেজ-স্তরের প্রকল্পগুলি ক্লাউড-ভিত্তিক API ব্যবহার করতে পারে।

    3. মেঘ-ভিত্তিক API গুলি ইতিমধ্যেই সক্ষম না হয় তাহলে, ক্লিক করুন মেঘ-ভিত্তিক API সক্ষম করুন।
  5. ক্লাউড ভিশন API- এ অ্যাক্সেসের অনুমতি না দেওয়ার জন্য আপনার বিদ্যমান Firebase API কীগুলি কনফিগার করুন:
    1. খুলুন শংসাপত্রের ক্লাউড কনসোলের পাতা।
    2. তালিকার প্রতিটি API কী জন্য, সম্পাদনা দৃশ্য খুলুন, এবং কী বিধিনিষেধ বিভাগে, লিস্টে ক্লাউড ভিশন এপিআই ব্যতীত প্রাপ্তিসাধ্য API গুলি সব যোগ করুন।

কলযোগ্য ফাংশন স্থাপন করুন

এরপরে, ক্লাউড ফাংশনটি স্থাপন করুন যা আপনি আপনার অ্যাপ এবং ক্লাউড ভিশন এপিআই সেতু করতে ব্যবহার করবেন। functions-samples সংগ্রহস্থলের একটি উদাহরণ আপনি ব্যবহার করতে পারেন ধারণ করে।

ডিফল্টরূপে, এই ফাংশনের মাধ্যমে ক্লাউড ভিশন এপিআই অ্যাক্সেস করলে আপনার অ্যাপের অনুমোদিত ব্যবহারকারীরা ক্লাউড ভিশন এপিআই অ্যাক্সেস করতে পারবেন। আপনি বিভিন্ন প্রয়োজনীয়তার জন্য ফাংশন পরিবর্তন করতে পারেন।

ফাংশন স্থাপন করতে:

  1. ক্লোন বা ডাউনলোড ফাংশন-নমুনার রেপো এবং পরিবর্তন vision-annotate-image ডিরেক্টরি:
    git clone https://github.com/firebase/functions-samples
    cd vision-annotate-image
    
  2. নির্ভরতা ইনস্টল করুন:
    cd functions
    npm install
    cd ..
    
  3. আপনি Firebase CLI না থাকে তাহলে, এটি ইনস্টল করুন
  4. একটি Firebase প্রকল্পের আরম্ভ vision-annotate-image ডিরেক্টরি। অনুরোধ করা হলে, তালিকা থেকে আপনার প্রকল্প নির্বাচন করুন।
    firebase init
  5. ফাংশন স্থাপন করুন:
    firebase deploy --only functions:annotateImage

আপনার অ্যাপে Firebase Auth যোগ করুন

উপরে কল করা ফাংশন আপনার অ্যাপের অ-প্রমাণিত ব্যবহারকারীদের যেকোনো অনুরোধ প্রত্যাখ্যান করবে। যদি আপনি ইতিমধ্যে এটি না করে থাকে, তাহলে আপনি করতে হবে আপনার অ্যাপ্লিকেশানে Firebase প্রমাণীকরণ যোগ করুন।

আপনার অ্যাপে প্রয়োজনীয় নির্ভরতা যোগ করুন

  1. : আপনার Podfile করার Firebase কার্যাবলী লাইব্রেরির জন্য নির্ভরতা যোগ
    pod 'Firebase/Functions'
  2. নির্ভরতা ইনস্টল করুন:
    pod install

1. ইনপুট ইমেজ প্রস্তুত করুন

ক্লাউড ভিশন কল করার জন্য, ছবিটি বেস 64-এনকোডেড স্ট্রিং হিসাবে ফরম্যাট করা আবশ্যক। একটি প্রক্রিয়া করতে UIImage :

সুইফট

guard let imageData = uiImage.jpegData(compressionQuality: 1.0f) else { return }
let base64encodedImage = imageData.base64EncodedString()

উদ্দেশ্য গ

NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
NSString *base64encodedImage =
  [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];

2. ল্যান্ডমার্কগুলি সনাক্ত করার জন্য কলযোগ্য ফাংশনটি আহ্বান করুন

একটি চিত্র পথনির্দেশক চিহ্নগুলি চিনতে, callable ফাংশন একটি ক্ষণস্থায়ী ডাকা তাদেরকে JSON ক্লাউড ভিশন অনুরোধ

  1. প্রথমে, ক্লাউড ফাংশনের একটি উদাহরণ আরম্ভ করুন:

    সুইফট

    lazy var functions = Functions.functions()
    

    উদ্দেশ্য গ

    @property(strong, nonatomic) FIRFunctions *functions;
    
  2. সঙ্গে একটি অনুরোধ তৈরি করুন প্রকার সেট LANDMARK_DETECTION :

    সুইফট

    let requestData = [
      "image": ["content": base64encodedImage],
      "features": ["maxResults": 5, "type": "LANDMARK_DETECTION"]
    ]
    

    উদ্দেশ্য গ

    NSDictionary *requestData = @{
      @"image": @{@"content": base64encodedImage},
      @"features": @{@"maxResults": @5, @"type": @"LANDMARK_DETECTION"}
    };
    
  3. অবশেষে, ফাংশনটি আহ্বান করুন:

    সুইফট

    functions.httpsCallable("annotateImage").call(requestData) { (result, error) in
      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]
        }
        // ...
      }
      // Function completed succesfully
    }
    

    উদ্দেশ্য গ

    [[_functions HTTPSCallableWithName:@"annotateImage"]
                              callWithObject:requestData
                                  completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
            if (error) {
              if (error.domain == FIRFunctionsErrorDomain) {
                FIRFunctionsErrorCode code = error.code;
                NSString *message = error.localizedDescription;
                NSObject *details = error.userInfo[FIRFunctionsErrorDetailsKey];
              }
              // ...
            }
            // Function completed succesfully
            // Get information about labeled objects
    
          }];
    

3. স্বীকৃত ল্যান্ডমার্ক সম্পর্কে তথ্য পান

ল্যান্ডমার্ক স্বীকৃতি অপারেশন সফল হয়, তাহলে একটি JSON প্রতিক্রিয়া BatchAnnotateImagesResponse টাস্ক এর ফলাফলে ফেরত পাঠানো হবে। প্রতিটি বস্তুর landmarkAnnotations অ্যারের অযথা নিদর্শন যে ইমেজ স্বীকৃতি ছিল প্রতিনিধিত্ব করে। প্রতিটি ল্যান্ডমার্কের জন্য, আপনি ইনপুট ছবিতে এর সীমানা স্থানাঙ্ক, ল্যান্ডমার্কের নাম, এর অক্ষাংশ এবং দ্রাঘিমাংশ, এর নলেজ গ্রাফ সত্তা আইডি (যদি পাওয়া যায়) এবং ম্যাচের আত্মবিশ্বাস স্কোর পেতে পারেন। উদাহরণ স্বরূপ:

সুইফট

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"]
    }
  }
}

উদ্দেশ্য গ

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"];
  }
}