Обеспечение правильной ориентации данных изображения на приложение iOS в Swift 5 - PullRequest
0 голосов
/ 11 апреля 2020

Я использую Firebase ML Kit для распознавания лиц, и в документации говорится:

При необходимости поверните изображение так, чтобы его свойство imageOrientation было .up. Создайте объект VisionImage, используя правильно повернутый UIImage. Не указывайте какие-либо метаданные ротации - необходимо использовать значение по умолчанию .topLeft.

Я сталкиваюсь с проблемой, когда фотографии, загружаемые из inte rnet, работают нормально, но когда я сделать фотографии с моей камеры, кажется, проблемы. У меня такое ощущение, что это связано с тем, как изображения ориентированы, и я не могу понять, как мне следует проверять изображения, чтобы убедиться, что эти два требования, перечисленные выше, выполнены. Я попытался распечатать images.imageOrientation, но это мне не сильно помогло, и я по какой-то причине не смог использовать UIImageOrientationUp, который, как я видел, использовался в другом ответе stackoverflow.

Вот что печатается, когда я пытаюсь напечатать ориентацию изображений:

int:0x2809f9a40 'UISV-alignment' UIImageView:0x13de4d4b0.bottom == UILabel:0x13dec1630'orient's Profile'.bottom   (active)>",
    "<NSLayoutConstraint:0x2809f9a90 'UISV-alignment' UIImageView:0x13de4d4b0.top == UILabel:0x13dec1630'orient's Profile'.top   (active)>",

В любом случае, если кто-то может помочь мне написать функцию, которую я могу использовать для обеспечения ориентации изображения, которое я Я собираюсь перейти к ML Kit ориентированы правильно, я был бы очень признателен. Спасибо! Я новичок iOS, это мое первое приложение "Реал", поэтому я извиняюсь, если был лучший или более простой способ достичь sh моей цели.

*** Итак, я обнаружил, что когда я сделайте снимок с помощью моей камеры, он ориентирован на правое, но на реальном imageView выглядит хорошо. Я попытался изменить ориентацию на .up, но теперь изображение на самом деле повернуто вправо, и обнаружение все равно не удалось ... Я думаю, что мне нужно изменить ориентацию на .Up, фактически не поворачивая изображение, если это возможно. Потому что, когда я пытаюсь установить значение, оно говорит, что свойство get only

1 Ответ

1 голос
/ 07 мая 2020

Спасибо, что обратились к нам, я июль ie из команды MLKit, извините, что задержался на этой ветке поздно.

Да, когда фотография снята с камеры, ориентация по умолчанию - не всегда .up, например, если он сделан в портретном режиме, ориентация изображения. ориентация .right.

Детектор лиц на самом деле достаточно гибок в работе с изображениями, ориентация которых не равна .up, ключевым шагом является правильная установка ориентации:

Вот пример обнаружения лиц с использованием фотографий, снятых с Камера в нашем приложении быстрого запуска , проверьте, решит ли она вашу проблему.

В основном вам нужно только правильно установить значение imageMetadata.orientation, например this :

    // Define the metadata for the image.
    let imageMetadata = VisionImageMetadata()
    imageMetadata.orientation = UIUtilities.visionImageOrientation(from: image.imageOrientation)

    // Initialize a VisionImage object with the given UIImage.
    let visionImage = VisionImage(image: image)
    visionImage.metadata = imageMetadata

и сопоставление между ориентациями можно найти здесь :

public static func visionImageOrientation(
    from imageOrientation: UIImage.Orientation
  ) -> VisionDetectorImageOrientation {
    switch imageOrientation {
    case .up:
      return .topLeft
    case .down:
      return .bottomRight
    case .left:
      return .leftBottom
    case .right:
      return .rightTop
    case .upMirrored:
      return .topRight
    case .downMirrored:
      return .bottomLeft
    case .leftMirrored:
      return .leftTop
    case .rightMirrored:
      return .rightBottom
    }
  }

Это утверждение для UIImage предназначено для более общего назначения во всех ML Kit детекторы:


Create a VisionImage object using the correctly-rotated UIImage. Do not specify any rotation metadata—the default value, .topLeft, must be used.

, но для лица это можно сделать легким способом, просто установив правильную ориентацию. Мы приносим извинения за путаницу, которую это принесло вам, и мы обновим это заявление в следующем выпуске.

Спасибо за сообщение о проблеме и надеемся, что приложение для быстрого запуска будет полезно для вашей разработки.

Ура,

Июль ie

...