Быстрый способ выйти в Интернет с вашим проектом машинного обучения!

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

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

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

Метод

Итак, вот как это будет работать:

  1. Пользователь вводит URL-адрес изображения, на котором он хочет найти лица.
  2. Этот URL-адрес изображения отправляется на серверную часть, где выполняется вся тяжелая работа (загрузка изображения, поиск по лицу и генерация ответа).
  3. Передняя часть получит изображение со всеми обнаруженными лицами и отобразит его для пользователя.

Звучит просто, правда? И теперь, когда у нас есть видение, пора запачкать руки 💪

Инструменты

На самом деле весь проект состоит всего из двух частей:

  • Облачная функция Google. Это используется для создания REST API и развертывания модели обнаружения лиц.
  • Конструктор сайтов Zyro. Это используется для внешнего интерфейса службы обнаружения лиц.

Проэкт

Итак, прежде всего нам нужно создать облачную функцию. В данном случае я называю его Facefinder, выбираю HTTP в качестве типа триггера и отмечаю «Разрешить вызовы без аутентификации».

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

Далее нам нужно установить параметры времени выполнения. Я выбираю 1 ГБ выделенной памяти и устанавливаю Автомасштабирование на 1 (в демонстрационных целях). Все остальные параметры останутся с настройками по умолчанию.

Для программирования логики Облачной функции я собираюсь использовать Python и одну дополнительную библиотеку: OpenCV.

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

Итак, чтобы помочь этому процессу, я использую один трюк - если пользователь предоставляет URL-адрес, который не ссылается на изображение, я устанавливаю URL-адрес по умолчанию для использования 👍

Как всегда, весь код облачной функции Google можно найти в этом репозитории GitHub.

Итак, все выглядит хорошо, но прежде чем двигаться дальше, нам нужно проверить, правильно ли работает функция. Для этого можно использовать Почтальон или другие подобные инструменты 😉

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

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

И вот, наконец, сервис распознавания лиц, готовый принять целый мир трафика 🚀

Конечный результат моего проекта вы можете проверить здесь.

И, конечно же, несколько живых демок 💪

Больше контента на plainenglish.io