Комплексное руководство по развертыванию бессерверного, управляемого событиями решения для обнаружения объектов с нуля.

Оглавление

  1. "Введение"
  2. Реализация
    2.1 Корзины S3
    2.2 Роли и политики
    2.3 Лямбда-функция
    2.4 Попробуем!
  3. Выводы
  4. "Использованная литература"

1. Введение

Обнаружение объектов — это метод компьютерного зрения, который позволяет идентифицировать и находить объекты на изображениях или видео.

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

Мы можем описать решение следующим образом:

  1. Изображение будет загружено в Amazon S3, службу хранения объектов.
  2. Событие загрузки изображения в S3 инициирует выполнение функции, созданной с помощью AWS Lambda. AWS Lambda – это бессерверный сервис вычислений, управляемый событиями. Это позволяет запускать наш код без подготовки или управления базовой инфраструктурой.
  3. Функция вызовет Amazon Rekognition, службу искусственного интеллекта (ИИ), для анализа изображений и возврата идентифицированных меток.
  4. Наш код будет записывать журналы в Amazon CloudWatch для мониторинга.
  5. Функция сохранит результаты анализа в виде файла JSON обратно в S3 для использования в будущем.

Единственным необходимым условием для этого руководства является активный аккаунт AWS. Поскольку AWS предоставляет уровни бесплатного пользования, мы можем следовать этому руководству бесплатно.

2. Реализация

В следующих абзацах представлена ​​подробная пошаговая процедура построения решения.

2.1 сегменты S3

Ведро — это контейнер для объектов, хранящихся в S3. Для этого урока мы хотим создать две отдельные корзины для хранения входных изображений и выходных данных анализа соответственно.

Мы создаем входное ведро следующим образом:

  • Откройте консоль AWS.
  • Введите «S3» в строке поиска в верхней части страницы.
  • Откройте «Amazon S3», затем нажмите «Создать корзину».
  • На странице создания корзины укажите имя корзины и регион AWS.
  • Для ведра ввода мы выбираем имя input-img-dev-032022.

Мы повторяем те же шаги, чтобы создать выходной сегмент, назвав его output-img-dev-032022.

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

2.2 Роль и политика

Нам нужно, чтобы наша функция Lambda имела разрешения на:

  • Читатьизображения из S3.
  • Отправлять изображения в Rekognition для обнаружения меток.
  • Запишите результаты обратно в S3.
  • Запись журналов в CloudWatch.

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

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

Создайте политику

  • Щелкните имя учетной записи в верхней части консоли AWS.
  • Выберите «Учетные данные безопасности».
  • В меню слева выберите «Политики», затем «Создать политики».
  • На следующей странице нажмите «JSON».
  • В текстовом поле добавьте следующий код:
  • Нажмите «Далее: Теги», затем «Далее: Обзор».
  • Наконец, назовите политику obj-detect-policy-dev-032022 и нажмите «Создать политику».

Подробнее о правилах

  • Наши политики определяются как объекты JSON внутри свойства Statement.
  • Каждый объект политики состоит из:
    - Effect: указывает, приводит ли инструкция к Allow или Deny.
    - Action: список необходимых разрешений. Например, S3:GetObject позволит нам читать объекты из S3, а S3:PutObject позволит нам сохранить их в корзину.
    - Resource: ресурс, к которому применяются политики. AWS требует идентифицировать ресурсы по их имени ресурса Amazon (ARN).
  • При копировании кода мы должны заменить:
    - <REGION> на регион AWS, в котором создана служба.
    - <AWS ACCOUNT ID> на 12-значный номер, который однозначно идентифицирует учетную запись AWS.
  • Для получения дополнительной информации об ARN и политиках мы должны проверить официальную документацию. Например, ресурс arn:aws:s3:::* не указывает регион или идентификатор учетной записи. Это связано с тем, что в S3 имена сегментов уникальны для разных учетных записей и регионов.
  • Подстановочный знак * используется для идентификации всех ресурсов. Например, ресурс: arn:aws:s3:::* идентифицирует все сегменты/объекты.
  • Хотя это выходит за рамки данного поста, мы должны помнить о принципе наименьших привилегий: любой субъект должен иметь только минимальное количество разрешений, необходимых для выполнения его задач.

Создайте роль

  • Щелкните имя учетной записи в верхней части консоли AWS.
  • Выберите «Учетные данные безопасности».
  • В меню слева выберите «Роли», затем «Создать роль».
  • На странице «Выбрать доверенный объект»:
     – Для параметра «Тип доверенного объекта» нажмите «Сервис AWS».< br /> – Для параметра "Применение" выберите "Лямбда".
  • Нажмите «Далее».

  • В меню «Политики разрешений» выберите ранее созданную политику obj-detect-policy-dev-032022 и добавьте ее к роли.
  • Нажмите «Далее».
  • Дайте роли имя obj-detect-role-dev-032022 и нажмите «Создать роль».

Мы определили набор необходимых разрешений (политик) и привязали их к личности (роли). Мы можем приступить к созданию лямбда-функции.

2.3 Лямбда-функция

  • В консоли AWS введите «лямбда» в строке поиска в верхней части страницы.
  • Выберите службу «Lambda».
  • Регион AWS лямбда-функции должен совпадать с регионом входного сегмента S3. Регион можно изменить в раскрывающемся меню в правом верхнем углу консоли AWS.
  • Нажмите «Создать функцию», затем:
    — выберите «Автор с нуля».
    — В качестве имени функции введите: obj-detect-dev-032022.< br /> – Для параметра "Время выполнения" выберите "Python 3.7".
     – Для параметра "Роль выполнения" выберите "Использовать существующую роль» и укажите имя ранее созданной роли.
  • Нажмите «Создать функцию».

  • На странице функций выберите «+ Добавить триггер». Мы хотим настроить функцию для запуска в ответ на загрузку Amazon S3.

  • На странице «Добавить триггер»:
    – выберите «S3» в качестве входных данных.
    – укажите имя корзины: input-img-dev-032022. Это корзина, в которую изначально загружаются изображения.
     — Тип события: "PUT".
  • Установите флажок с информацией и нажмите «Добавить».

Страница функции теперь выглядит следующим образом:

Вот оно!

Наконец-то мы можем написать логику приложения на Python. На вкладке «Код» на странице функций вставьте это в текстовое поле:

О коде

  • Boto3 — это AWS SDK для Python. Мы использовали его для взаимодействия с другими сервисами AWS: S3 (boto3.client("s3")) и Rekognition (boto3.client("rekognition")).
  • Класс Label хранит метки (имена и достоверность), обнаруженные Rekognition.
  • Класс Response хранит проанализированный объект, полный метаданных и список Labels. Класс Response реализует вызов Rekognition через метод rekognition.detect_labels().
  • Метод rekognition.detect_labels() принимает, помимо прочего, следующие параметры:
    - MaxLabels: максимальное количество меток, которое Rekognition возвращает.
    - MinConfidence: минимальный порог достоверности. Rekognition не возвращает метки, достоверность которых ниже этого значения (по умолчанию: 55%).
  • Функция save_analysis() принимает объект в качестве входных данных и сохраняет его в выходной корзине S3. Он использует метод s3.put_object().
  • Метод lambda_handler(event, context) запускается при вызове функции Lambda. Он передает объект события, который инициировал выполнение.

2.4 Давайте попробуем!

Мы можем добавить любое изображение в корзину ввода (консоль AWS › Amazon S3 › Buckets › корзину ввода › «Загрузить»). Пример:

Процесс обнаружения меток запускается автоматически при загрузке. Мы можем проверить это через журналы AWS CloudWatch. Чтобы их проверить, мы должны перейти на страницу функций Lamba, открыть вкладку «Монитор», затем «Просмотреть журналы в CloudWatch»:

Выявленные метки хорошо описывают картину: urban, outdoors, water, waterfront, architecture и другие.

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

Проверим, сохранился ли анализ и в выходной корзине:

Мы можем загрузить и проверить файл:

3. Выводы

В этом посте мы использовали AWS для быстрого развертывания бессерверного и управляемого событиями решения для анализа изображений.

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

Среди нефункциональных ключевых моментов напомним:

  • Внедрение управляемых сервисов, чтобы нам не приходилось заниматься сложной и трудоемкой настройкой инфраструктуры.
  • Экономичность: с AWS Lambda мы платим только за то, что эффективно используем. Плата не взимается, когда код не работает. Кроме того, использование службы искусственного интеллекта, такой как Amazon Rekognition, устраняет затраты, связанные с разработкой сложных моделей машинного обучения.
  • Автоматизация и масштабируемость по дизайну:процесс управляется событиями и запускается, как только становится доступным новый образ. Более того, AWS Lambda автоматически масштабирует код.

4. Ссылки