Распознавание нарисованных фигур

В 2016 Google опубликовал игру-дудл Magic Cat Academy. Она напомнила мне  игру Гарри Поттер и Философский камень, где для изучения заклинания его нужно было максимально точно нарисовать. Вдохновившись этим геймплеем, я решил разработать собственный распознаватель жестов.


Среди общедоступных вариантов есть весьма неплохая библиотека $1, но она иногда слишком параноидальна и видит правильный жест там, где его нет.


Изначально я сделал распознавание фигуры через приведение ее к прямым и диагональным линиям. Этот способ хорошо работает с фигурами типа V, ^, Z, W, но для распознавания округлых фигур необходимо поддерживать вариативность правил распознавания. На рисунке ниже изображены правила для распознавания фигуры pigtail (хвост свиньи). Секции с вопросительным знаком могут присутствовать или отсутствовать, в остальных блоках должна присутствовать хотя бы одна из указанных секций.

Распознавание нарисованных фигур Программирование, Javascript, Gamedev, Разработка игр, Длиннопост

Для того, чтобы упростить работу с округлыми фигурами, я заменил ламанные линии на кривые Безье.  Это немного снизило скорость распознавания, но позволило распознавать более сложные фигуры.

Распознавание нарисованных фигур Программирование, Javascript, Gamedev, Разработка игр, Длиннопост

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


Вот как теперь выглядят правила для распознавания pigtail:

Распознавание нарисованных фигур Программирование, Javascript, Gamedev, Разработка игр, Длиннопост

Код библиотеки я выложил на github, надеюсь кому-то он пригодится :)

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

6
Автор поста оценил этот комментарий

На хабре лет 6-7 назад была статья о распознавании через приведение контура сначала к замкнутому, потом к вектору комплексных чисел. Сумма членов вектора ЕМНИП однозначно характеризовала фигуру вне зависимости от угла поворота, может полезно будет. Я по нейросетям лабу сделал именно на таком алгоритме - отлично и быстро работало

раскрыть ветку
3
Автор поста оценил этот комментарий

В 2016 Google опубликовал игру-дудл Magic Cat Academy

крутая штука

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