با Firebase ML در iOS نقاط دیدنی را بشناسید

شما می‌توانید از Firebase ML برای تشخیص نشانه‌های شناخته‌شده در یک تصویر استفاده کنید.

قبل از اینکه شروع کنی

    اگر هنوز Firebase را به برنامه خود اضافه نکرده‌اید، با دنبال کردن مراحل موجود در راهنمای شروع به کار ، این کار را انجام دهید.

    برای نصب و مدیریت وابستگی‌های Firebase از Swift Package Manager استفاده کنید.

    1. در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
    2. وقتی از شما خواسته شد، مخزن SDK پلتفرم‌های اپل فایربیس را اضافه کنید:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. کتابخانه Firebase ML را انتخاب کنید.
    5. پرچم -ObjC را به بخش Other Linker Flags در تنظیمات ساخت هدف خود اضافه کنید.
    6. پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی‌های شما در پس‌زمینه می‌کند.

    در مرحله بعد، برخی تنظیمات درون برنامه‌ای را انجام دهید:

    1. در برنامه خود، Firebase را وارد کنید:

      سویفت

      import FirebaseMLModelDownloader

      هدف-سی

      @import FirebaseMLModelDownloader;
  1. اگر هنوز APIهای مبتنی بر ابر را برای پروژه خود فعال نکرده‌اید، اکنون این کار را انجام دهید:

    1. صفحه Firebase ML APIs را در کنسول Firebase باز کنید.
    2. اگر هنوز پروژه خود را به طرح قیمت‌گذاری پرداخت در محل Blaze ارتقا نداده‌اید، برای انجام این کار روی ارتقا کلیک کنید. (فقط در صورتی که پروژه شما در طرح قیمت‌گذاری Blaze نباشد، از شما خواسته می‌شود که آن را ارتقا دهید.)

      فقط پروژه‌های موجود در طرح قیمت‌گذاری Blaze می‌توانند از APIهای مبتنی بر ابر استفاده کنند.

    3. اگر APIهای مبتنی بر ابر از قبل فعال نشده‌اند، روی فعال کردن APIهای مبتنی بر ابر کلیک کنید.

آشکارساز نقطه عطف را پیکربندی کنید

به طور پیش‌فرض، آشکارساز ابر از نسخه پایدار مدل استفاده می‌کند و حداکثر 10 نتیجه را برمی‌گرداند. اگر می‌خواهید هر یک از این تنظیمات را تغییر دهید، آنها را با یک شیء VisionCloudDetectorOptions مانند مثال زیر مشخص کنید:

سویفت

let options = VisionCloudDetectorOptions()
options.modelType = .latest
options.maxResults = 20

هدف-سی

  FIRVisionCloudDetectorOptions *options =
      [[FIRVisionCloudDetectorOptions alloc] init];
  options.modelType = FIRVisionCloudModelTypeLatest;
  options.maxResults = 20;
  

در مرحله بعد، هنگام ایجاد شیء آشکارساز ابر، شیء VisionCloudDetectorOptions را نیز ارسال کنید.

آشکارساز نقاط عطف را اجرا کنید

برای تشخیص نشانه‌های بصری در یک تصویر، تصویر را به عنوان یک UIImage یا یک CMSampleBufferRef به متد detect(in:) از VisionCloudLandmarkDetector ارسال کنید:

  1. یک نمونه از VisionCloudLandmarkDetector دریافت کنید:

    سویفت

    lazy var vision = Vision.vision()
    
    let cloudDetector = vision.cloudLandmarkDetector(options: options)
    // Or, to use the default settings:
    // let cloudDetector = vision.cloudLandmarkDetector()

    هدف-سی

    FIRVision *vision = [FIRVision vision];
    FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector];
    // Or, to change the default settings:
    // FIRVisionCloudLandmarkDetector *landmarkDetector =
    //     [vision cloudLandmarkDetectorWithOptions:options];
  2. برای فراخوانی Cloud Vision، تصویر باید به صورت یک رشته کدگذاری شده با base64 فرمت شود. برای پردازش یک UIImage :

    سویفت

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

    هدف-سی

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. سپس، تصویر را به متد detect(in:) ارسال کنید:

    سویفت

    cloudDetector.detect(in: visionImage) { landmarks, error in
      guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else {
        // ...
        return
      }
    
      // Recognized landmarks
      // ...
    }

    هدف-سی

    [landmarkDetector detectInImage:image
                         completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks,
                                      NSError *error) {
      if (error != nil) {
        return;
      } else if (landmarks != nil) {
        // Got landmarks
      }
    }];

درباره مکان‌های دیدنی شناخته‌شده اطلاعات کسب کنید

اگر تشخیص نقطه عطف با موفقیت انجام شود، آرایه‌ای از اشیاء VisionCloudLandmark به کنترل‌کننده تکمیل ارسال می‌شود. از هر شیء، می‌توانید اطلاعاتی در مورد نقطه عطف تشخیص داده شده در تصویر دریافت کنید.

برای مثال:

سویفت

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
}

هدف-سی

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

مراحل بعدی