Пишемо веб-додаток для розпізнавання осіб за годину

Пишемо веб-додаток для розпізнавання осіб за годину

Розповідає Деван Сабаратнам, розробник з 30-річним стажем

У минулі вихідні, гортаючи Amazon Web Services, я помітив новий сервіс під назвою «Rekognition». Я припустив, що це помилка (recognition - англ. Розпізнавання), але вона привернула мою увагу. Я зацікавився: що це за сервіс? Amazon звик додавати нові сервіси в свою платформу з лякаючою регулярністю, і цей я пропустив.

Раніше я займався технологією розпізнавання осіб, використовуючи сторонні бібліотеки, а також Microsoft Face API. але всі спроби створення подібного програми не увінчалися успіхом. Але, переглядаючи документацію «Rekognition», я зрозумів, що AWS API насправді дуже простий у використанні. Я негайно взявся за роботу.

Мені була потрібна проста веб-сторінка, яка дозволила б робити фотографію за допомогою камери мого iMac і виконувати розпізнавання на фотографії. Зокрема, я хотів би визначати користувача, який сидить перед комп'ютером.

Сервіс Amazon Rekognition дозволяє створювати одну або кілька колекцій. Колекція - це набір лицьових векторів для фотографій, які ви хочете зберегти.

Примітка: Сервіс записує не фотографії, а їх JSON-уявлення.

Після створення колекції ви можете сфотографувати предмет, порівняти його властивості c збереженими і повернути найближчим відповідність. Звучить просто, чи не так? По правді кажучи, розробка фронтенда веб-сторінки для отримання даних з камери зайняла більше часу, ніж написання бекенд для розпізнавання.

Загалом, веб-сторінка дозволяє створювати або видаляти колекцію лицьових даних на Amazon, завантажувати нові дані, отримані з фотографії, в свою колекцію і порівнювати нові фотографії з існуючою колекцією, щоб знайти збіг. А в якості додаткової фичи я також додав в цю демку службу Amazon Polly. щоб після розпізнавання фотографії сторінка вітала користувача.

Пишемо веб-додаток для розпізнавання осіб за годину

Для бекенд я використовував Ruby-бібліотеку Sinatra. яка може виконувати всю важку роботу за допомогою AWS. Я часто використовував Sinatra (насправді Padrino) в своїх проектах і настійно рекомендую цю платформу.

Примітка: Amazon Rekognition пропонує спочатку завантажувати вихідні фотографії, які використовує його API, в Amazon S3, а потім обробляти їх. Я хотів уникнути цього непотрібного кроку і замість цього відправляти зображення безпосередньо в API, що мені в підсумку вдалося зробити.

Я зумів зробити те ж саме з їх привітанням Polly. Замість того, щоб зберігати аудіо в MP3-файл і програвати його, у мене вийшло закодувати дані MP3 безпосередньо в тег

Я розмістив весь код цього проекту на моїй сторінці на GitHub. Не соромтеся використовувати і змінювати його. Нижче я постараюся пояснити код більш докладно.

пишемо додаток

Створення користувача AWS IAM

Як тільки ви створили обліковий запис AWS, перше, що нам потрібно зробити, - створити користувача Amazon IAM (Identity Access Management), який має права на використання служби Rekognition. Ми також поставимо права для Amazon Polly.

В консолі Amazon натисніть на кнопку «Сервіси» у верхньому лівому кутку, потім виберіть «IAM». В меню зліва виберіть «Користувачі». Ви повинні побачити список існуючих користувачів IAM, яких ви створили в консолі, якщо ви робили це в минулому.

Пишемо веб-додаток для розпізнавання осіб за годину

Натисніть кнопку «Додати користувача», розташовану у верхній частині списку, щоб додати нового користувача IAM.

Пишемо веб-додаток для розпізнавання осіб за годину

Дайте користувачеві ім'я і переконайтеся, що ви відзначили пункт «Programmatic Access», так як ви будете використовувати цей IAM у виклику API.

Пишемо веб-додаток для розпізнавання осіб за годину

Далі наведені настройки дозволів. Переконайтеся, що ви натискаєте на третьому квадратику на екрані з написом «Attach existing policies directly». Потім в поле пошуку «Filter: Policy Type» введіть «rekognition». Виберіть «AmazonRekognitionFullAccess» зі списку, поставивши поруч з ним галочку.

Потім змініть фільтр пошуку на «polly» і помістіть галочку поруч з «AmazonPollyFullAccess».

Тепер у цього IAM є права, достатні для Amazon Rekognition і Amazon Polly. Натисніть «Next: Review» в правому нижньому кутку.

Пишемо веб-додаток для розпізнавання осіб за годину

Пишемо веб-додаток для розпізнавання осіб за годину

Ця сторінка важлива. Запишіть ключі AWS Key і AWS Secret, які ви вказали на цій сторінці, оскільки нам необхідно включити їх в наше додаток нижче.

Це єдиний раз, коли вам будуть показані ці ключі, тому збережіть їх і файл CSV з цієї сторінки в надійному місці.

Завантаження коду

Тепер завантажте приклад коду з моєї сторінки GitHub. щоб ви могли змінити його в міру необхідності. Завантажте код у вигляді ZIP-файлу, або клонують його в вашу робочу папку.

Перше, що вам потрібно зробити, - це створити файл з ім'ям .env в робочій папці і ввести ці два рядки, замінивши в них ключі Amazon IAM на свої:

користування програмою

Сама веб-сторінка досить проста. Ви повинні побачити потокове зображення у верхній частині екрану, яке представляє собою канал з вашої веб-камери.

Спершу створіть колекцію, клацнувши по посиланню в самому нижньому лівому кутку сторінки. Це створить порожню колекцію на серверах Amazon для зберігання ваших зображень. Зверніть увагу: ім'я за замовчуванням для цієї колекції - faceapp_test. але ви можете змінити його в коді faceapp.rb (рядок 17).

Після того, як ви створили кілька осіб у своїй базі даних, ви можете попросити випадкову людину сісти перед камерою і натиснути «Порівняти зображення». Якщо ця людина вже доданий в колекцію, на екрані має з'явитися його ім'я.

Зверніть увагу, що звичайний спосіб роботи Amazon Rekognition полягає в тому, щоб завантажувати фотографію в Amazon S3 Bucket, а потім обробляти його звідти, але я хотів обійти цей крок і фактично відправити дані фотографії безпосередньо в Rekognition як потік байтів, закодований в Base64. На щастя, aws-sdk для Ruby дозволяє використовувати обидва методи.

Розбір коду

Перш за все, давайте поглянемо на HTML-сторінку:

Це налаштовує бібліотеку JPEG Camera, щоб відображати канал на екрані і обробляти завантаження зображень.

Функція add_to_collection () захоплює зображення з камери, а потім виконує запис в кінцеву точку / upload разом з ім'ям користувача в якості параметра. Функція перевіряє, чи дійсно ви ввели ім'я, яке потрібно в якості унікального ідентифікатора цих даних.

Функція завантаження перевіряє виклик і виводить повідомлення про успішне завершення або помилку.

Функція compare_image () викликається, коли ви натискаєте кнопку «Порівняти зображення». Вона захоплює кадр з камери і передає POST-дані в / compare. Ця кінцева точка поверне або помилку, або структуру JSON, що містить id (ім'я) знайденого особи, а також відсоток схожості.

Якщо особа співпаде з даними з колекції, функція відправить ім'я знайденого особи в / speech. Ця кінцева точка викликає службу Amazon Polly, щоб перетворити вітання в файл MP3, який можна відтворити користувачеві.

Служба Amazon Polly повертає вітання у вигляді бінарного потоку MP3, тому ми беремо цей потік введення-виведення, шифруємо його в форматі Base64 і поміщаємо в якості закодованої вихідної посилання в теги

Прим. перев. Ви можете дізнатися про Web Audio побільше, прочитавши нашу серію статей по цій темі.

Нарешті, в JS-файлі додатки є функція greetingTime (). Вона вирішує, чи варто говорити «доброго ранку / день / вечір» в залежності від часу доби користувача.

Тепер поглянемо на код Ruby:

Схожі статті