Обеспечение правильной ориентации данных изображения в приложении iOS в Swift 5

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

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

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

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

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, это мое первое "настоящее" приложение, поэтому мне очень жаль, если был лучший или более простой способ достичь моей цели.

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

1 ответ

Решение

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

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

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

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

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

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

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

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

Привет,

Джули

Другие вопросы по тегам