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

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

قبل از شروع

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

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

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

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

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

      سویفت

      import FirebaseMLModelDownloader

      هدف-C

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

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

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

    3. اگر APIهای مبتنی بر Cloud قبلاً فعال نشده‌اند، روی Enable Cloud-based APIs کلیک کنید.

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

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

سویفت

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

هدف-C

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

در مرحله بعد، شی VisionCloudDetectorOptions را هنگام ایجاد شی Cloud detector ارسال کنید.

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

برای تشخیص نشانه‌ها در یک تصویر، تصویر را به‌عنوان 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()

    هدف-C

    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()

    هدف-C

    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
      // ...
    }

    هدف-C

    [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
}

هدف-C

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

مراحل بعدی