Способность собирать информацию из изображений имеет огромный бизнес-потенциал. А еще это может быть просто весело. В этой статье я расскажу, как мы использовали
Проще говоря, обнаружение объектов изображения — это процесс обнаружения и извлечения информации об объектах на данном изображении. Это включает в себя обнаружение объектов, действий, мест, животных, продуктов и т. д.
Обнаружение объектов изображения имеет широкий спектр вариантов использования в различных отраслях. Основные сектора, такие как банки, страхование, социальные сети, приложения для знакомств, информационные агентства и FinTech, в той или иной форме используют обнаружение объектов.
Недавно нам было поручено создать функцию обнаружения объектов изображений для стартапа в социальных сетях. Вариант использования был прост: пользователи должны иметь возможность выбирать некоторые из своих любимых фотографий и отправлять их для размещения на одной из страниц стартапа в социальных сетях.
Команде по маркетингу в социальных сетях нужен был способ поиска в представленных изображениях определенных тем — например, фотографий океана, популярных достопримечательностей, животных, музыкальных концертов и т. д.
Анализ изображений и их классификация на основе пейзажей и объектов на изображении — непростая задача. Человеческое зрение – просто выдающееся явление, и создание приложения, способного воспроизвести способность мозга обнаруживать объекты, чрезвычайно сложно. Существует целая индустрия компьютерного зрения, посвященная именно этому.
Выполнение обнаружения объектов с нуля обычно представляет собой многоэтапный процесс, который включает в себя:
Нашей целью при создании этой функции, как и всех остальных в проекте, было быстро создать ее и как можно скорее проверить ее эффективность в производственной среде. Более того, мы не хотели выделять ресурсы разработки на создание решения с нуля, когда мы могли использовать существующие облачные сервисы.
Cue Serverless — весь бэкэнд стартапа полностью бессерверный и управляемый событиями. Благодаря этой архитектуре мы можем иметь команды разработчиков, которым нужно сосредоточиться только на функциях, которые отличают приложение для социальных сетей от других. Бессерверная технология также позволяет нам создавать высокомасштабируемые сервисы, платя при этом только за то, что мы используем — важный фактор для масштабируемого стартапа.
Поэтому для реализации этой функции мы использовали Amazon Rekognition — полностью бессерверный сервис анализа изображений и видео. Используя Rekognition, мы смогли разработать этот сложный и ответственный рабочий процесс за считанные часы . Давайте углубимся в это.
Amazon Rekognition — это бессерверное предложение AWS, которое использует глубокое обучение для анализа изображений и видео. Полная бессерверность означает, что с Rekognition нам не нужно беспокоиться о сложности базовой инфраструктуры; мы платим только за то, что используем , и он предоставляет нам заранее написанное программное обеспечение для задач анализа изображений и видео. Rekognition предлагает ряд функций, включая обнаружение меток изображений, обнаружение лиц, обнаружение знаменитостей, модерацию контента и обнаружение текста.
Лучшая часть? Rekognition позволяет абстрагироваться от тяжелой работы по созданию, обучению и анализу моделей глубокого обучения. Анализ изображений и видео выполняется быстро и просто, требует минимальной настройки. Нам не нужно было беспокоиться о создании и обучении собственных наборов данных и выделении серверной мощности для масштабирования нашего сервиса. Все, о чем нам нужно было беспокоиться, — это интеграция.
Архитектура проста. Наше мобильное приложение загружает изображения с телефонов пользователей в корзину S3. Затем загрузка на S3 запускает функцию Lambda, которая, в свою очередь, вызывает Rekognition API и сохраняет результаты в DynamoDB для запросов.
Схема архитектуры бессерверного обнаружения объектов изображений с использованием AWS
Писать код — это весело, правда? Что ж, писать меньше кода еще веселее.
Rekognition предоставляет набор API-интерфейсов, через которые вы отправляете данные изображения, которые выполняют анализ и возвращают результаты. Для нашего варианта использования мы использовали
Упрощенная версия нашей бессерверной инфраструктуры Инфраструктура в виде файла кода выглядит следующим образом:
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
Наш Lambda-код просто вызывает Rekognition API и сохраняет результаты в DynamoDB, но вы можете использовать все, что имеет смысл для вашего варианта использования. Мы получаем имя корзины S3 и имя объекта изображения из события S3 и передаем их в функцию обнаруженияLabels
Мы также передаем два дополнительных параметра (MaxLabels и MinConfidence), чтобы указать порог уровня достоверности и максимальное количество возвращаемых меток. В приведенном ниже примере мы получим в ответе только до 20 меток, и все метки будут иметь уровень достоверности более 80%.
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
Кому не нравится изображение собаки? Ниже приведен ответ на изображение, которое мы загрузили в нашу корзину S3. Как видите, Rekognition правильно определяет, что это изображение собаки на гравийной дорожке (и сообщает нам, где на изображении находится собака!).
Ответ распознавания (слева), загруженное изображение (справа).
Итак, что я думаю после нескольких месяцев использования Rekognition в производстве? Вот список основных выводов:
TLDR: Rekognition позволила нам быстро создать функцию обнаружения объектов изображения, которая будет точной, быстрой и масштабируемой.