Автоматическая обрезка изображений с помощью Amazon Rekognition

Автоматическая обрезка изображений с помощью Amazon Rekognition

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

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

В этом посте мы покажем, как использовать Апостол выполнять анализ изображения. Amazon Rekognition упрощает добавление этой возможности в ваши приложения без каких-либо знаний в области машинного обучения (ML) и поставляется с различными API-интерфейсами для выполнения таких сценариев использования, как обнаружение объектов, модерация контента, обнаружение и анализ лиц, а также распознавание текста и знаменитостей, которые мы использовать в этом примере.

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

Обзор решения

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

При работе с API обнаружения знаменитостей Amazon Rekognition, в ответе возвращается много элементов. Ниже приведены некоторые ключевые элементы ответа:

  • Уверенность в совпадении – Оценка достоверности соответствия, которую можно использовать для управления поведением API. Мы рекомендуем применить подходящий порог к этой оценке в вашем приложении, чтобы выбрать предпочтительную рабочую точку. Например, установив пороговое значение 99%, вы можете исключить ложные срабатывания, но можете пропустить некоторые потенциальные совпадения.
  • Имя, идентификатор и URL-адреса – Имя знаменитости, уникальный идентификатор Amazon Rekognition и список URL-адресов, таких как IMDb знаменитости или ссылка на Википедию для получения дополнительной информации.
  • Ограничительная рамка – Координаты расположения прямоугольной ограничивающей рамки для каждого распознанного лица знаменитости.
  • ИзвестныйПол - Известная гендерная идентичность для каждой признанной знаменитости.
  • Эмоции – Эмоция, выраженная на лице знаменитости, например, счастливая, грустная или злая.
  • поза - Поза лица знаменитости с использованием трех осей крена, тангажа и рыскания.
  • Улыбка – Улыбается ли знаменитость или нет.

Часть ответа API от Amazon Rekognition включает следующий код:

{ "CelebrityFaces": [ { "Urls": [ "www.wikidata.org/wiki/Q2536951" ], "Name": "Werner Vogels", "Id": "23iZ1oP", "Face": { "BoundingBox": { "Width": 0.10331031680107117, "Height": 0.20054641366004944, "Left": 0.5003396272659302, "Top": 0.07391933351755142 }, "Confidence": 99.99765014648438,
...

В этом упражнении мы покажем, как использовать элемент ограничительной рамки для определения местоположения лица, как показано на следующем примере изображения. Все размеры представлены как отношения к общему размеру изображения, поэтому числа в ответе находятся в диапазоне от 0 до 1. Например, в примере ответа API ширина ограничивающей рамки равна 0.1, что означает, что ширина лица составляет 10 % от общей ширины изображения.

Вернер Фогельс Ограничивающая рамка

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

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

Мы запускаем Создатель мудреца Амазонки Блокнот, предоставляющий среду Python, в которой можно запустить код для передачи изображения в Amazon Rekognition, а затем автоматически изменить изображение, сосредоточив внимание на знаменитости.

Вернер Фогельс укороченный

Код выполняет следующие высокоуровневые шаги:

  1. Сделать запрос в recognize_celebrities API с заданным изображением и именем знаменитости.
  2. Отфильтруйте ответ для информации о ограничивающей рамке.
  3. Добавьте немного отступа к ограничительной рамке, чтобы захватить часть фона.

Предпосылки

Для этого прохождения у вас должны быть следующие предпосылки:

Загрузите образец изображения

Загрузите образец изображения знаменитости в корзину S3.

Запустите код

Для запуска кода мы используем блокнот SageMaker, однако любая IDE также будет работать после установки Python, подушки и Boto3. Мы создаем блокнот SageMaker, а также Управление идентификацией и доступом AWS (IAM) с необходимыми разрешениями. Выполните следующие шаги:

  1. Создать блокнот и назовите файл automatic-cropping-celebrity.

Политика выполнения по умолчанию, которая была создана при создании блокнота SageMaker, имеет простую политику, которая дает роли разрешения на взаимодействие с Amazon S3.

  1. Обновите Resource ограничение с именем корзины S3:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3::: # your-s3-bucket-name " ] } ]
}

  1. Создайте еще одну политику для добавления к роли IAM записной книжки SageMaker, чтобы иметь возможность вызывать ПризнатьЗнаменитости API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM-разрешения

  1. На консоли SageMaker выберите Экземпляры ноутбуков в навигационной панели.
  2. Найдите automatic-cropping-celebrity блокнот и выбери Открытый Юпитер.
  3. Выберите Новые и conda_python3 как ядро ​​для вашего ноутбука.

Блокнот Jupyter

Для следующих шагов скопируйте блоки кода в блокнот Jupyter и запустите их, выбрав Run.

  1. Во-первых, мы импортируем вспомогательные функции и библиотеки:
import boto3
from PIL import Image

  1. Установить переменные
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. Создать сервисный клиент
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Функция распознавания знаменитостей
def recognize_celebrity(photo): with open(photo, 'rb') as image: response = rek.recognize_celebrities(Image={'Bytes': image.read()}) image=Image.open(photo) file_type=image.format.lower() path, ext=image.filename.rsplit(".", 1) celeb_faces = response['CelebrityFaces'] print(f'Detected {len(celeb_faces)} faces for {photo}') return celeb_faces, image, path, file_type 

  1. Функция для получения ограничивающей рамки данной знаменитости:
def get_bounding_box(celeb_faces, img_width, img_height, celeb): bbox = None for celebrity in celeb_faces: if celebrity['Name'] == celeb: box = celebrity['Face']['BoundingBox'] left = img_width * box['Left'] top = img_height * box['Top'] width = img_width * box['Width'] height = img_height * box['Height'] print('Left: ' + '{0:.0f}'.format(left)) print('Top: ' + '{0:.0f}'.format(top)) print('Face Width: ' + "{0:.0f}".format(width)) print('Face Height: ' + "{0:.0f}".format(height)) #dimenions of famous face inside the bounding boxes x1=left y1=top x2=left+width y2=top+height bbox = [x1,y1,x2,y2] print(f'Bbox coordinates: {bbox}') if bbox == None: raise ValueError(f"{celeb} not found in results") return bbox

  1. Функция для добавления отступов к ограничительной рамке, чтобы мы захватили фон вокруг лица.
def pad_bbox(bbox, pad_width=0.5, pad_height=0.3): x1, y1, x2, y2 = bbox width = x2 - x1 height = y2 - y1 #dimenions of new image with padding x1= max(x1 - (pad_width * width),0) y1= max(y1 - (pad_height * height),0) x2= max(x2 + (pad_width * width),0) y2= max(y2 + (pad_height * height),0) #dimenions of new image with aspect ratio, 1 is square, 1.5 is 6:4, 0.66 is 4:6 x1= max(x1-(max((y2-y1)*max(aspect_ratio,1)-(x2-x1),0)/2),0) y1= max(y1-(max((x2-x1)*1/(min((aspect_ratio),1))-(y2-y1),0)/2),0) x2= max(x2+(max((y2-y1)*max((aspect_ratio),1)-(x2-x1),0)/2),0) y2= max(y2+(max((x2-x1)*1/(min((aspect_ratio),1))-(y2-y1),0)/2),0) print('x1-coordinate after padding: ' + '{0:.0f}'.format(x1)) print('y1-coordinate after padding: ' + '{0:.0f}'.format(y1)) print('x2-coordinate after padding: ' + "{0:.0f}".format(x2)) print('y2-coordinate after padding: ' + "{0:.0f}".format(y2)) return [x1,y1,x2,y2]

  1. Функция сохранения изображения в хранилище ноутбука и на Amazon S3
def save_image(roi, image, path, file_type): x1, y1, x2, y2 = roi image = image.crop((x1,y1,x2,y2)) image.save(f'{path}-cropped.{file_type}') s3.upload_file(f'{path}-cropped.{file_type}', bucket, f'{path}-cropped.{file_type}') return image

  1. Используйте Python main() Функция для объединения предыдущих функций для завершения рабочего процесса сохранения нового обрезанного изображения нашей знаменитости:
def main(): # Download S3 image to local s3.download_file(bucket, file, './'+file) #Load photo and recognize celebrity celeb_faces, img, file_name, file_type = recognize_celebrity(file) width, height = img.size #Get bounding box bbox = get_bounding_box(celeb_faces, width, height, celeb) #Get padded bounding box padded_bbox = pad_bbox(bbox) #Save result and display result = save_image(padded_bbox, img, file_name, file_type) display(result) if __name__ == "__main__": main()

Когда вы запустите этот блок кода, вы увидите, что мы нашли Вернера Фогельса и создали новое изображение с его лицом в центре.

Вернер Фогельс укороченный

Изображение будет сохранено в записной книжке, а также загружено в корзину S3.

Вывод ноутбука Jupyter

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

Убираться

Чтобы избежать дополнительных расходов, удалите ресурсы:

  1. В консоли SageMaker выберите свою записную книжку и на Действия Меню, выберите Stop.
  2. После остановки ноутбука на Действия Меню, выберите Удалить.
  3. В консоли IAM удалите созданную роль выполнения SageMaker.
  4. На консоли Amazon S3 удалите входное изображение и все выходные файлы из корзины S3.

Заключение

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

Дополнительные сведения о работе с мультимедийными ресурсами см. Медиа-аналитика стала еще умнее с Media2Cloud 3.0


Об авторе

Автоматическое кадрирование изображений с помощью Amazon Rekognition PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Марк Уоткинс является архитектором решений в команде СМИ и развлечений. Он помогает клиентам создавать решения AI/ML, которые решают их бизнес-задачи с помощью AWS. Он работал над несколькими проектами AI/ML, связанными с компьютерным зрением, обработкой естественного языка, персонализацией, ML на периферии и многим другим. Вдали от профессиональной жизни он любит проводить время со своей семьей и наблюдать за тем, как растут двое его малышей.

Отметка времени:

Больше от Машинное обучение AWS

Создавайте, делитесь, развертывайте: как бизнес-аналитики и специалисты по обработке и анализу данных сокращают время выхода на рынок с помощью машинного обучения без кода и Amazon SageMaker Canvas

Исходный узел: 1210859
Отметка времени: 10 Марта, 2022