Решение множества задач машинного зрения (сегментация изображений, выделение объектов и лиц) основано на распознавании цвета. Благодаря JavaScript-библиотеке Tracking.js это можно делать прямо в браузере!
Чтобы разобраться, как работает этот плагин, мы создадим демо-приложение, в которое можно загрузить нужное изображение и выбрать цвет для распознавания.
В нем будет загрузчик файлов, превью картинки и колорпикер для указания искомого цвета. Также добавим настройку допустимого отклонения (tolerance
) с помощью слайдера – эта опция непосредственно не входит в библиотеку, мы реализуем ее самостоятельно. Для максимального удобства добавлена пипетка, чтобы можно было брать цвет прямо с картинки.
Нажатие на кнопку Track color
запускает алгоритм распознавания. Найденные области обводятся цветной рамкой.
Поиграть с приложением вы можете по ссылке.
Полный код со всеми ресурсами доступен на GitHub.
Реализация
Tracking.js – одна из самых простых в использовании библиотек компьютерного зрения с низким порогом вхождения. Другими словами, вы можете просто брать ее и сразу же делать удивительные вещи.
Шаг #1. Подключение ресурсов
Вы можете загрузить библиотеку tracking.js из github-репозитория:
или подключить npm-пакет:
Для оформления интерфейса нам также понадобятся:
- jquery – популярная библиотека для манипуляции DOM-элементами;
- color-picker – для создания колорпикера;
- rangeslider.js – полифилл для элемента input type="range";
- broiler.js – для создания пипетки.
Подключите файлы стилей и скриптов всех плагинов и библиотек любым удобным для вас способом, например, в секции head
в html-файле:
Шаг #2. Создание интерфейса
Код HTML демо-приложения:
Здесь также подключаются скрипты: range-slider.js
и главный файл color-tracking.js
.
Создание и инициализация слайдера параметра tolerance
– файл range-slider.js
:
Шаг #3. Создание трекера
Чтобы начать использовать функциональность библиотеки tracking.js, нужно создать объект трекера с помощью конструктора и передать ему цвета для распознавания. По умолчанию предлагается набор из трех цветов: пурпурный (magenta), бирюзовый (cyan) и желтый (yellow).
Также можно дополнительно регистрировать любые другие цвета. Для этого предназначен метод API tracking.ColorTracker.registerColor
:
Этот код отслеживает нажатие на кнопку «Добавить цвет» (Add color) и регистрирует в трекере выбранный в колорпикере цвет. Метод registerColor
принимает два аргумента: собственно цвет и функцию сравнения, которая будет запускаться для каждого обнаруженного на картинке цвета. В этой функции мы будем вычислять "разницу" между целевым и найденным цветами и сравнивать ее с установленным значением параметра tolerance
.
Другими словами, чем больше tolerance
, тем больше диапазон цветов, которые будут считаться подходящими и попадут в выделение.
Метод displayColorList
выводит все выбранные цвета. Его реализацию вы можете посмотреть в репозитории.
Шаг #4. События трекера
Когда трекер обнаружит искомые цвета на изображении, он выбросит событие track
, на которое можно подписаться.
В объекте события хранятся координаты всех выбранных областей. Для каждой области также доступен цвет, которому она соответствует.
Получив эти данные, мы создаем прямоугольные контейнеры с указанными параметрами и помещаем их на превью (метод drawRect
).
Шаг #5. Установка изображения
Теперь осталось только передать трекеру изображение, на котором нужно определить выбранные цвета. Для этого предназначен статический метод библиотеки track
:
В него следует передать селектор целевого элемента img
(также поддерживаются video
и canvas
) и экземпляр трекера.
Объединим весь код создания и запуска трекера при нажатии на кнопку Track color:
Сначала мы должны удалить все области, оставшиеся с предыдущего поиска. Затем придется создать экземпляр трекера с выбранными цветами, установить обработчик события track
и передать изображение.
Всю дополнительную функциональность (выбор цвета с помощью пипетки, смена картинки, сброс результатов поиска) вы можете найти в репозитории приложения.
Кроме обнаружения цвета прямо в браузере (на изображениях и даже на видео), библиотека tracking.js может обнаруживать лица людей, но не распознавать их. Более подробную информацию вы найдете в документации.
Комментарии