Обеспечение правильной ориентации данных изображения в приложении 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.
но для лица с этим можно легко справиться, просто правильно установив ориентацию. Приносим извинения за доставленное вам недоразумение, и мы обновим это заявление в следующем выпуске.
Благодарим за сообщение о проблеме и надеемся, что приложение для быстрого запуска поможет вам в разработке.
Привет,
Джули