Обнаружение объекта камеры в JavaScript

Предположим, что у пользователя есть современный браузер, такой как Chrome, и включает необходимые настройки камеры HTML5 (чтобы getUserMedia работал), как можно было бы определить определенные предопределенные объекты, отображаемые в режиме просмотра веб-камеры, используя JavaScript?

Например, распознавание лиц на основе HTML5/JS, которое отлично работает, и я увидел еще один демонстрация рук (это плохо работает здесь, я мог бы что-то делать не так). Каковы необходимые шаги для обучения камеры обнаружению данных других объектов (разработчика)? Скажем, я хочу, чтобы камера распознала местоположение красной ручки; или, возможно, самый темный объект в поле зрения; или, возможно, черный iPhone помахал в камеру и т.д.

Спасибо!

Ответ 1

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

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

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

  • Вычислительные дескрипторы в интересных точках. Посмотрите на дескрипторы SIFT или HoG (гистограммы градиентов) в Google, это наиболее используемые.
  • Создание структуры распознавания, которая, опять же, может сильно измениться в зависимости от вашего объекта и ваших дескрипторов. Популярные методы включают нейронные сети, поддерживающие векторные машины. Для движущихся объектов обычно можно добавить связанные с графом методы, такие как Graph Cuts, в микс.

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

Насколько мне известно, очень мало программного обеспечения доступно для всего, что есть в JavaScript, но я был бы рад узнать, если вы что-то найдете. Опять же, вот несколько указателей:

  • В примере Распознавание лиц используется что-то очень популярное, называемое Cascade Classifier, которое доступно в еще более популярной библиотеке OpenCV, и считается, что большинство из них являются метод выбора для обнаружения лица.
  • Если вы можете переместить часть обработки на сервер, вы можете использовать OpenCV, у которого есть множество доступных алгоритмов.

Надеюсь, я смог помочь вам немного начать;)