Знаменитости

Сервис распознавания лиц знаменитостей, который я создал с помощью Serverless Framework, с использованием Twilio, Amazon Rekognition и IMDbPy API.

Этот проект представляет собой обзор бессерверных вычислений и детализирует концепцию, помогая создать убедительный пример Shazam for Celebrities, получивший название CelebritySleuth, с использованием бессерверной платформы.

Для получения дополнительной информации о бессерверной архитектуре и бессерверной платформе ознакомьтесь с этим техническим описанием.

Введение

Мы находимся на поворотном этапе в эпоху вычислений, когда машинное обучение превращается в товар, позволяя средним разработчикам использовать возможности искусственного интеллекта для обработки естественного языка, распознавания лиц и преобразования текста в речь без необходимости баловаться с загадочными нейронными сетями или другие алгоритмы, основанные на глубоком обучении. Примеры таких сервисов, как Amazon Rekognition, Polly и Lex, позволяют отдельным разработчикам разрабатывать приложения, которые до недавнего времени были сферой деятельности исследовательских лабораторий и крупных технологических корпораций (в довершение всего, они на 100% бессерверны. Вы платите только за них). вы их используете, и это невероятно масштабируемо.)

Пытаясь понять возможности этих сервисов, получая удовольствие от создания приложений с использованием бессерверной модели, я искал интересную проблему, которую нужно было решить. Первая проблема, с которой я столкнулся, - это подсчет стоимости монет, лежащих на столе. Решение было легко построить с использованием Python и различных библиотек обработки изображений Python. К сожалению, когда дело дошло до втискивания кода в AWS Lambda, я столкнулся с трудностями. AWS Lambda имеет верхний предел размера кода, который может быть развернут, а библиотеки изображений, которые я использовал, были огромными. Это быстро оказалось бесполезным.

Примерно в это время моя малышка столкнулась с собственной неприятной проблемой. Во время просмотра шоу по телевизору она не могла сопоставить лица актрис со своим именем. Она знала, что видела актрису раньше в другом диснеевском сериале, но кто она такая? Обсуждая это за обеденным столом, мы быстро решили, что я должен построить что-нибудь, чтобы разрешить ее затруднительное положение. Так родилась CelebritySleuth.

Аудитория

Разработчики или архитекторы решений, которые хотят:

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

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

3. Узнайте о повышении эффективности, которое обеспечивает бессерверная архитектура.

Приложение CelebritySleuth

Приложение CelebritySleuth - это приложение, управляемое событиями, использующее следующие преимущества:

1. Мобильные SMS / MMS пользователя для уровня презентации,

2. Twilio на среднем уровне, соединяющий мир SMS и AWS Gateway.

3. Набор функций AWS Lambda, написанных на Python с использованием AWS Rekogniton для обработки изображений и IMDB для сбора информации о знаменитостях.

Обычно пользователь делает снимок знаменитости (по телевизору ?!) с помощью камеры своего телефона и отправляет изображение вместе с инструкциями на номер телефона, размещенный на Twilio. Система проверяет инструкции и немедленно отвечает, если есть ошибка в наборе инструкций, или с сообщением, чтобы дождаться фактического ответа, если проверка прошла. Через несколько секунд пользователь получает ответ с именем и биографией знаменитости.

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

Приложение CelebritySleuth состоит из двух сервисов:

- Коммуникационная служба Twilio

- Служба распознавания лиц

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

  • Архитектура

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

Картинка выше иллюстрирует высокоуровневую архитектуру приложения. Подробности следующие:

1. Пользователь отправляет изображение и команды для добавления / сопоставления лица в коллекцию. В качестве альтернативы пользователь может создать коллекцию, и в этом случае изображение не требуется. SMS / MMS отправляется на телефонный номер, принадлежащий Twilio.

2. Twilio перехватывает сообщение и пересылает его на шлюз API на основе конфигурации Twilio пользователя.

3. API Gateway переводит TwiML в JSON и вызывает лямбда-функцию обработчика запросов.

4. Лямбда-выражение обработчика запросов проверяет команды и помещает сообщение в соответствующую тему в SNS. Если проверка не удалась, он возвращает пользователю сообщение об ошибке через Twilio.

5. При поступлении сообщения в теме «Создать коллекцию» срабатывает лямбда, добавляющая названную коллекцию в AWS Rekognition через библиотеки Boto. Сообщение об успехе / ошибке помещается в тему "Процессор ответа".

6. Когда приходит сообщение в теме «Добавить лицо», активируется лямбда-выражение, которое идентифицирует наиболее заметное лицо на изображении и добавляет метаданные для лица в данную коллекцию. Если лица не идентифицированы, он создает сообщение об ошибке и отправляет ответ в тему обработчика ответов.

7. Когда приходит сообщение в теме Match Face, активируется лямбда, которая идентифицирует наиболее заметное лицо на изображении и сопоставляет метаданные для этого лица с известными лицами в коллекции. Если совпадение найдено, возвращается имя соответствующего человека. Затем Lambda использует IMDB для поиска биографии человека.

8. Различные лямбда-процессоры отбрасывают ответное сообщение в теме «Процессор ответа».

9. Процессор ответа принимает ответ, составляет SMS-сообщение и вызывает SMS-службу Twilio.

10. Twilio проверяет номер От и отправляет сообщение на соответствующий номер Кому.

  • Компоненты

Приложение состоит из следующих компонентов:

1. Python. Python - это язык программирования, который позволяет быстро работать и более эффективно интегрировать системы. Мы будем использовать Python 2.7 для создания приложения CelebritySleuth.

2. Twilio - служба обмена сообщениями Twilio, позволяющая пользователю общаться с приложением с помощью SMS.

3. AWS Lambda - AWS Lambda позволяет запускать код без выделения серверов и управления ими. Вы платите только за потраченное время вычислений - плата не взимается, когда ваш код не запущен.

4. AWS Rekognition. Amazon Rekognition - это сервис, который упрощает добавление анализа изображений в ваши приложения. С Rekognition вы можете обнаруживать объекты, сцены и лица на изображениях. Вы также можете искать и сравнивать лица.

5. IMDb - IMDbPY - это пакет Python, полезный для извлечения и управления данными из базы данных фильмов IMDb о фильмах, людях, персонажах и компаниях.

Инструкции по установке

1. Установка Python

Если вы работаете на компьютере Mac или Linux, вероятно, у вас уже установлен Python. В Windows вам нужно будет установить Python.

Независимо от вашей операционной системы, вы должны использовать виртуальную среду для запуска Python. Anaconda или его краткая версия Miniconda - это виртуальные среды Python, которые позволяют управлять различными версиями и средами Python. Установщики поставляются с Python и менеджером пакетов conda.

Следуйте инструкциям здесь, чтобы установить Miniconda. Примечание. В этом проекте мы будем использовать Python 2.7.

2. Создание виртуальной среды Python

После установки Python 2.7 создайте виртуальную среду следующим образом. Примечание. Я называю свою виртуальную среду лицами:

$ conda create -n faces python=2

3. Инициализируйте виртуальную среду Python

Чтобы начать работу в новой виртуальной среде Python:

$ source activate faces

Если вы работаете в Windows, используйте:

$ activate faces

4. Установите Git

Git - популярная система контроля версий кода. Чтобы установить Git для вашей операционной системы, следуйте инструкциям здесь.

5. Установите CelebritySleuth.

Чтобы установить CelebritySleuth из Git, следуйте инструкциям ниже:

$ mkdir DevFestDC
$ cd DevFestDC
$ git clone — recursive https://github.com/skarlekar/faces.git

6. Настройка Twilio

Если у вас еще нет номера Twilio, зарегистрируйтесь в Twilio и получите пробный номер телефона с возможностью MMS. Вы можете использовать этот номер в течение 30 дней в течение пробного периода.

· Настройка переменных среды Twilio

Обновите setTwilio.sh в репозитории, указав свои учетные данные из Twilio, и настройте свою среду. Инструкции по использованию vi находятся здесь.

$ cd faces
$ vi setTwilio.sh
$ source ./setTwilio.sh

Пользователи Windows используют:

$ cd faces
$ edit setTwilio.cmd
$ setTwilio.cmd

· Тестирование настройки Twilio

Чтобы проверить настройку Twilio, запустите программу Python sendmessage.py в twilioTester. Эта программа просто отправляет сообщение на ваш мобильный номер, используя ваши учетные данные Twilio. Примечание. Убедитесь, что вы запускаете это в среде Python 2.7.

$ python twilioTester/sendmessage.py

Если вы получили сообщение с изображением на свой мобильный телефон, ваш Twilio настроен и работает.

7. Установите Node.js и Serverless Framework

Serverless Framework - это приложение Node.js. Чтобы использовать Serverless Framework и запустить приложение CelebritySleuth, вам необходимо установить Node.js. Следуйте инструкциям с веб-сайта Serverless Framework, чтобы установить как Node.js, так и Serverless Framework.

Убедитесь, что ваша бессерверная среда работает, используя следующее:

$ serverless –version

8. Настройка Amazon AWS

1. Войдите в свою учетную запись AWS или зарегистрируйтесь.

2. Настройте свои учетные данные AWS, следуя инструкциям здесь.

9. Тестирование бессерверной настройки

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

Создайте тестовый каталог. В каталоге test создайте лямбда-функцию из шаблона по умолчанию следующим образом:

$ mkdir sls-tester
$ cd sls-tester
$ sls create — template aws-python — name sls-test

Это должно создать два файла в текущем каталоге:

> serverless.yml
>
> handler.py

serverless.yml объявляет образец службы и функцию. handler.py возвращает сообщение о том, что ваша функция выполнена успешно.

Чтобы развернуть функцию, просто введите:

$ sls deploy — verbose

Это должно развернуть функцию. Опция подробного вывода предоставляет дополнительную информацию.

Чтобы проверить свою функцию, введите:

$ sls invoke — function hello

Если вы получили следующее сообщение, ваша бессерверная установка работает.

ВНИМАНИЕ! Вы используете v1.9.0. В v1.10.0 будут внесены следующие критические изменения:

- Некоторые события жизненного цикла подключаемого модуля развертывания будут перенесены в подключаемый модуль нового пакета. Подробнее - › https://git.io/vy1zC

Вы можете отказаться от этих предупреждений, установив переменную среды «SLS_IGNORE_WARNING = *».

{
“body”: “{\”input\”: {}, \”message\”: \”Go Serverless v1.0! Your function executed successfully!\”}”,
“statusCode”: 200
}

10. Коммуникационная служба Twilio

Twilio Communication Service соединяет сервис обмена SMS-сообщениями Twilio со службой распознавания лиц. Когда пользователь отправляет сообщение на свой номер Twilio, сообщение перехватывается службой обмена сообщениями Twilio. Сервис Twilio Messaging будет перенаправлять содержимое SMS-сообщения на URL-адрес AWS API Gateway. AWS API Gateway, в свою очередь, вызовет Lambda-функцию обработчика запросов (process_request) в twilioCommunicationService.

TwilioCommunicationService поддерживает две функции:

1. Функция processRequest проверяет входящие запросы и синхронно отправляет ответ, если формат сообщения правильный, или сообщение об ошибке с указанием правильного использования, если это не так - подробности см. В разделе Использование. о том, как пользоваться этой услугой. Затем он вызывает faceRecognitionService асинхронно через SNS для обработки команды.

2. Функция sendResponse составляет ответ от faceRecognitionService и отправляет ответ обратно на номер, с которого возник запрос.

· Разверните службу связи Twilio

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

Установите свои учетные данные Twilio, запустив ранее обновленный сценарий оболочки.

$ source ./setTwilio.sh
Windows users, use:
$ setTwilio.cmd

Измените каталог на каталог twilioCommunicationService и разверните службу, запустив sls deploy, как показано ниже:

$ cd twilioCommunicationService
$ sls deploy — verbose

Убедитесь, что в процессе развертывания нет ошибок. Вы также можете перейти в Консоль AWS и убедиться, что API Gateway создан. Вы должны увидеть шлюз API под названием dev-twilioCommunication.

Кроме того, убедитесь, что функции Lambda созданы, убедившись, что лямбда-функции twilioCommunication-dev-processReques t и twilioCommunication-dev-sendResponse доступны в консоли AWS Lambda.

Убедитесь, что ваши учетные данные Twilio настроены как переменные среды, щелкнув каждую из лямбда-функций и убедившись, что TWILIO_AUTH_TOKEN и TWILIO_ACCOUNT_SID были созданы с правильными значениями в Раздел переменных среды на вкладке Код.

· Настройка службы обмена сообщениями Twilio

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

1. На веб-сайте Twilio войдите в свою учетную запись и перейдите в Службы обмена сообщениями.

2. Нажмите + в разделе «Службы обмена сообщениями с Copilot», чтобы добавить новую службу обмена сообщениями.

3. Дайте название своей службе и нажмите Создать. Скажем, CelebritySleuth.

4. В разделе Свойства раскрывающегося списка СЛУЧАЙ ИСПОЛЬЗОВАНИЯ выберите Чат-бот / интерактивное двустороннее соединение.

5. В разделе Входящие настройки убедитесь, что установлен флажок ОБРАБОТАТЬ ВХОДЯЩИЕ СООБЩЕНИЯ.

6. Скопируйте и вставьте URL-адрес AWS API Gateway из консоли AWS в поле REQUEST URL и добавьте / process_request в конец URL-адреса. Ваш URL-адрес должен выглядеть так: https://netxnasdfda.execute-api.us-east-1.amazonaws.com/dev/process_request

7. Выберите HTTP GET в раскрывающемся списке рядом с полем.

8. Оставьте для остальных полей значения по умолчанию и нажмите СОХРАНИТЬ.

9. Перейдите в раздел Числа в консоли Twilio.

10. Щелкните по присвоенному вам номеру. Это приведет вас к разделу, где вы можете настроить, что должно происходить при отправке SMS-сообщения на ваш номер телефона.

11. В разделе Сообщения g выберите Служба обмена сообщениями в раскрывающемся списке НАСТРОИТЬ С.

12. В СЛУЖБЕ СООБЩЕНИЙ выберите службу обмена сообщениями, созданную на шагах 2–8 выше, и нажмите СОХРАНИТЬ.

11. Служба распознавания лиц

Сервис распознавания лиц на данный момент поддерживает три функции. Они есть:

· createCollection: для добавления коллекции.

· addFace: чтобы добавить лицо в существующую коллекцию.

· matchFace: для сопоставления лица в коллекции и поиска биографии совпадающего имени человека в IMDb.

Коллекция - это логическая группа индексов лиц (векторов лиц) и их соответствующих имён. Когда вы создаете коллекцию с помощью лямбда-функции createCollection, она пуста. На внутренней стороне createCollection создает коллекцию в AWS Rekognition. Затем вы можете добавить новые лица в коллекцию и связать ее с заданным именем. Созданная таким образом коллекция может затем использоваться для поиска изображений известных лиц с высокой степенью уверенности. Физически индексы лиц хранятся в базе данных на сервере, управляемом AWS Rekognition, у вас нет прямого доступа к этой базе данных.

Создав коллекцию, вы можете добавлять в нее лица с помощью лямбда-функции addFace. Чтобы добавить лицо в коллекцию, вы должны предоставить изображение, имя коллекции и имя, которое вы хотите связать с лицом. Если на данном изображении нет лиц или если коллекция не существует, возвращается сообщение об ошибке. Функция addFace использует AWS Rekognition для обнаружения лиц на данном изображении, извлечения черт лица и сохранения информации о чертах лица, обнаруженных на изображении, в AWS Rekognition. Черты лица сохраняются в виде векторов изображений с возможностью поиска.

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

12. Разверните службу распознавания лиц

Измените каталог на каталог faceRecognitionService и разверните службу, запустив sls deploy, как показано ниже:

$ cd faceRecognitionService
$ sls deploy — verbose

Убедитесь, что в процессе развертывания нет ошибок. Вы также можете перейти в Консоль AWS Lambda и убедиться, что функции Lambda faceRecognition-dev-addFace, faceRecognition-dev-matchFace и faceRecogniton-dev -createCollection были созданы.

13. Тестирование приложения

Чтобы протестировать приложение, создайте коллекцию, отправив следующее SMS-сообщение на свой номер Twilio:

face addcol celebs

Это работает? Вы получили сообщение оттуда? Если нет, то почему? Посмотрите журналы CloudWatch для вашей Lambda-функции processRequest. В чем проблема?

Если вы посмотрите внимательно, вы обнаружите, что у функций Lambda недостаточно разрешений для работы с темой SNS или ресурсами AWS Rekognition.

14. Исправление twilioCommunicationService.

Откройте файл serverless.yml в twilioCommunicationService и раскомментируйте раздел iamRoleStatements, сохраните и снова разверните службу.

$ cd twilioCommunicationService
$ vi serverless.yml
$ sls deploy — verbose

Повторите добавление коллекции еще раз.

face addcol celebs

На этот раз вы должны получить сообщение о том, что вскоре получите ответ.

«Все хорошо. Вы должны немедленно получить ответ! »

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

15. Исправление faceRecognitionService

Откройте файл serverless.yml в faceRecognitionService и раскомментируйте раздел iamRoleStatements, сохраните и снова разверните службу.

$ cd twilioCommunicationService
$ vi serverless.yml
$ sls deploy — verbose

Это должно было исправить это. Теперь, если вы добавите коллекцию:

face addcol celebs

Вы должны получить не только такой ответ:

«Все хорошо. Вы должны немедленно получить ответ!

Вы также должны получить следующее сообщение:

«Коллекция знаменитостей успешно создана»

16. Добавление лица в коллекцию

Чтобы добавить лицо в коллекцию вместе с изображением человека, отправьте в одном SMS-сообщении следующее:

(image)
face addimg celebs firstName_lastName

Вы должны получить следующий ответ:

«Изображение firstName_lastName добавлено в коллекцию знаменитостей»

17. Подбор лица в коллекции

Теперь найдите другое изображение человека и проверьте возможность сопоставления лиц в AWS Rekognition, отправив изображение и следующие команды по SMS на свой номер Twilio:

(image)
face match celebs

Вы должны получить не только следующее сообщение:

«Все хорошо. Вы должны немедленно получить ответ! »

Вы также должны получить следующее сообщение с биографией человека.

«Лицо соответствует firstName lastName со сходством xx.xx и достоверностью yy.yy.

….

….”

использование

Ниже приведены команды, которые в настоящее время поддерживаются CelebritySleuth.

· Добавить коллекцию

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

face addcol (название-коллекции)

где collection-name - это имя коллекции, которую вы хотите создать.

Пример:

face addcol celebs

· Добавить изображение

Чтобы добавить изображение в данную коллекцию и связать лицо на изображении с именем, введите следующее в тексте SMS. Вы должны включить изображение в одно и то же SMS-сообщение.

face addimg (collection-name) (first-name_last-name)

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

Пример:

face addimg celebs Albert_Einstein

· Соответствующее лицо

Чтобы сопоставить лицо в данной коллекции:

face match (collection-name)

где имя-коллекции - имя существующей коллекции. Эта команда должна сопровождаться изображением в том же SMS-сообщении.

Пример:

face match celebs

Приложение в действии:

Ниже приведен пример анимации приложения в действии:

Https://gist.github.com/skarlekar/c27ae9fef725683c0f969e2b02649454/raw/6749a5103b006e0b313f4dd510e9bd9b664c33b3/mel-fuzzed-less.gif

Вывод

Услуги искусственного интеллекта, предлагаемые такими поставщиками, как Amazon, Google и Microsoft, являются краеугольным камнем для создания интеллектуальных приложений с короткой взлетно-посадочной полосой. Он дает разработчикам возможность добавлять интеллектуальные возможности в свои приложения с помощью предварительно обученных сервисов, а не создавать свои алгоритмы и модели с нуля.

С другой стороны, Serverless Framework - это ускоритель внедрения бессерверной архитектуры. Он обещает значительно меньше DevOps, более низкую стоимость, высокую масштабируемость и множество вариантов развертывания от различных поставщиков.

В ходе тестирования мне не удалось развернуть приложение CelebritySleuth в Microsoft Azure, поскольку Serverless Framework в настоящее время не поддерживает развертывание функций, написанных на Python. Помимо этого, с помощью Serverless Framework мне удалось создать приложение CelebritySleuth от начала до конца за пару часов, по сравнению с полдня для настройки компонентов вручную через консоль AWS.

Отказ от ответственности: Capital One не связан с компаниями, упомянутыми в этом сообщении в блоге. Все используемые товарные знаки являются собственностью их владельцев.