Приложение для распознавания изображений, созданное с помощью TensorFlow.js.

TensorFlow.js — популярная библиотека, используемая для разработки моделей машинного обучения для использования в средах выполнения JS, таких как браузер и Node.js. Истинная сила TensorFlow.js заключается в его способности обучать и развертывать модель машинного обучения прямо на устройстве пользователя.

Прохождение проекта

Структура папок довольно проста. Представляющие интерес файлы: ./index.html и ./src/index.js. Другой файл JavaScript, например ./images/index.js, используется только для экспорта изображений (подробнее об этом позже).

Сначала нам нужно установить все зависимости, перечисленные ниже. Перечисленные ниже пакеты, кроме первого, должны быть стандартными для каждого проекта TensorFlow.js в Node.js. Однако первый пакет, то есть @tensorflow-model/coco-ssd, подходит только для проектов, связанных с распознаванием изображений. TensorFlow.js имеет множество таких моделей для различных проектов. Полный список различных доступных моделей можно найти здесь. Как было сказано выше, в нашем проекте по распознаванию изображений используется модель @tensorflow-model/coco-ssd, подробнее об этой модели можно прочитать здесь.

После установки всех зависимостей у нас должен быть файл package.json, подобный приведенному ниже:

Убрав зависимости, мы можем написать html-код. Этот проект направлен только на объяснение основной концепции, представленной в виде простого HTML-файла (index.html).

Следующий шаг — самый важный, мы создаем код ./src/index.js. Здесь мы загружаем модель Coco-ssd и определяем доступные ориентиры на предоставленных/кандидатных изображениях.

Сначала мы импортируем все зависимости и реализуем функцию parseImageImport. Функция parseImageImport получает изображения-кандидаты в виде модуля и возвращает объект Image(), представляющий каждое предоставленное изображение-кандидат.

Во-вторых, мы программируем две дополнительные функции. detectContour()отвечает за отрисовку маркировки на предсказаниях, ожидает объект изображения, контекст (т.е. результат API getContext, см. объяснение здесь) и массив прогнозов (это результат модели Coco-Ssd tensorFlow, подробнее об этом позже). drawImage() отвечает за две вещи. Во-первых, он рисует изображение на холсте, а во-вторых, у него есть прослушиватель событий, который вызывает функцию detectContour при щелчке холста.

Наконец, у нас есть IIFE, который объединяет все это. Он перебирает результат функции parseImageImport (т. е. изображения-кандидаты). Для каждого изображения-кандидата он создает новый холст и добавляет его к телу html. Он также запускает загрузку модели CocoSsd и выполняет прогнозы для каждого изображения-кандидата. Предикации передаются в качестве параметра вспомогательной функции, упомянутой выше, drawImage.

Я обещал показать содержимое ./images/index.js. Этот файл представляет собой просто функцию, экспортирующую файлы изображений-кандидатов в качестве модуля. См. ниже содержимое ./images/index.js.

Результат

В заключении

В этой статье объясняется, как создать простое веб-приложение для распознавания изображений с использованием TensorFlow.js в среде Node.js. Репозиторий Github можно найти здесь.