Быстрый способ выйти в Интернет с вашим проектом машинного обучения!
В моем последнем посте я экспериментировал с тем, как можно было бы использовать Zyro builder в качестве интерфейса для ускорения разработки проекта машинного обучения.
Я создал службу классификации настроений текста, которая могла определять, было ли данное утверждение положительным, нейтральным или отрицательным.
Теперь я снова экспериментирую, и на этот раз я хотел создать инструмент, который может находить лица на изображении.
Метод
Итак, вот как это будет работать:
- Пользователь вводит URL-адрес изображения, на котором он хочет найти лица.
- Этот URL-адрес изображения отправляется на серверную часть, где выполняется вся тяжелая работа (загрузка изображения, поиск по лицу и генерация ответа).
- Передняя часть получит изображение со всеми обнаруженными лицами и отобразит его для пользователя.
Звучит просто, правда? И теперь, когда у нас есть видение, пора запачкать руки 💪
Инструменты
На самом деле весь проект состоит всего из двух частей:
- Облачная функция Google. Это используется для создания REST API и развертывания модели обнаружения лиц.
- Конструктор сайтов Zyro. Это используется для внешнего интерфейса службы обнаружения лиц.
Проэкт
Итак, прежде всего нам нужно создать облачную функцию. В данном случае я называю его Facefinder, выбираю HTTP в качестве типа триггера и отмечаю «Разрешить вызовы без аутентификации».
Я делаю это только для того, чтобы упростить разработку API, чтобы мне не приходилось иметь дело с аутентификацией.
Далее нам нужно установить параметры времени выполнения. Я выбираю 1 ГБ выделенной памяти и устанавливаю Автомасштабирование на 1 (в демонстрационных целях). Все остальные параметры останутся с настройками по умолчанию.
Для программирования логики Облачной функции я собираюсь использовать Python и одну дополнительную библиотеку: OpenCV.
Вся логика очень похожа на мой сервис прогнозирования настроений, но есть некоторые отличия. В основном это связано с тем, что не требуется отдельной модели машинного обучения, потому что OpenCV имеет встроенную модель. Кроме того, вместо получения и ответа с помощью текстовой службы он будет получать и отправлять изображение в качестве ответа.
Итак, чтобы помочь этому процессу, я использую один трюк - если пользователь предоставляет URL-адрес, который не ссылается на изображение, я устанавливаю URL-адрес по умолчанию для использования 👍
Как всегда, весь код облачной функции Google можно найти в этом репозитории GitHub.
Итак, все выглядит хорошо, но прежде чем двигаться дальше, нам нужно проверить, правильно ли работает функция. Для этого можно использовать Почтальон или другие подобные инструменты 😉
Теперь, когда у нас есть бэкэнд, мы можем перейти к фронтенд-разработке. Чтобы ускорить процесс разработки, я повторно использую код, который написал для проекта классификации настроений. Конечно, основное отличие состоит в том, что вместо отображения текста в качестве ответа мне нужно отображать изображение.
Вместо ответа типа json я получаю ответ типа blob, и для отображения изображения, хранящегося в объекте blob, мы необходимо создать URL-адрес, который ведет к этому объекту, выполнив функцию createObjectURL (опять же, весь код внедрения можно найти в репозитории GitHub).
И вот, наконец, сервис распознавания лиц, готовый принять целый мир трафика 🚀
Конечный результат моего проекта вы можете проверить здесь.
И, конечно же, несколько живых демок 💪
Больше контента на plainenglish.io