Перейти к содержимому
Compvision.ru
ProgerX

Как распознавать жесты пальцев?

Recommended Posts

Набрел в сети на проект (дипломная работа) по определению координат руки в трехмерном пространстве при помощи двух камер.

проект здесь: http://www.b4silio.com/files/thesis-basilio_noris.pdf

видео здесь:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте!

Мне нужно для диплома написать программу по распознаванию жестов руки (Open CV и C++), а опыта с Open CV никакого. Профессор хочет видеть реализацию через Скелетон. После длительных попыток мне даже удалось етот Скелетон построить, а вот что с ним дальше делать непонятно. Может что-то посоветуете? А если бы примеры были, то было бы просто замечательно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Опишите задачу подробно, т.к. никто кроме Вас т.з. не видел и с Профессором не общался.

Что дано? Что нужно от программы? Что здесь понимается под "жесты"?

Хорошо-бы привести пару изображений.

А так ответа долго ждать будете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Опишите задачу подробно, т.к. никто кроме Вас т.з. не видел и с Профессором не общался.

Что дано? Что нужно от программы? Что здесь понимается под "жесты"?

Хорошо-бы привести пару изображений.

А так ответа долго ждать будете.

Описание:

Камера снимает руку на черном фоне. Показываются жесты, например

"victory" (2-й и 3-й палец)

"телефон" (1-й и 5-й палец)

"кулак" (без пальцев )

или просто показывается один,2, 3,4 или 5 пальцев.

Программа распознает их и выдает текстовое сообщение на экран.

Скелетон как на картинке.

post-5337-0-55875400-1334048313_thumb.jp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не стал-бы делать это через скелет, но если такая постановка задачи, то:

1) Найти моменты, выровнять по главной оси инерции, подогнать масштаб под стандартный размер.

2) Скелетизация

3) преобразовать в векторное описание. (например пары x,y светлых точек) и обучить этому нейронную сеть.

п.2 и п.3 можно попробовать поменять местами.

PS: Посмотрите еще

http://opencv.willowgarage.com/documentation/python/structural_analysis_and_shape_descriptors.html#cvconvexitydefect

и

http://www.andol.info/hci/1661.htm/comment-page-2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Cпасибо большое за совет. Насчет моментов уже думал, правда пока не придумал как их со скелетом связать. А вот с векторизацией пока вообще не знаком. Все пока делал только контурами или отдельными пикселями. Может у вас есть пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так что его связывать? Ищем моменты бинаризованного изображения, находим по ним углы.

Находим скелет. Поворачиваем его главной осью куда надо. Углы у скелета и бинаризованного изображения будут похожи.

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

Кстати, можно ведь и к скелету применить CovnexityDefect (как вариант векторизации).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

где то даже встречал описание типа skeletons vs contours но чем там закончилось дело не помню)

а по сравнению скелетонов можно почитать про shock graphs даже программа есть.

http://www.cs.toronto.edu/~dmac/ShapeMatcher/index.html

у скелетов есть свои проблемы типа маленьких "веточек" помоему в англоязычной литературе их убирание называется pruning.

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

во всяком случае, если у вас что то получится, то напишите тут об этом, интересно почитать будет как это работает на практике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое за ответы. Пытаюсь разобраться и выбрать то, что может пригодиться. Пока продвигается очень медленно.

у меня еще вопрос- а как можно провести прямую линию по пальцам на кривом скелетоне так, чтобы она заканчивалась там, где заканчиваются пальцы (красным на картинке я выделил то, что хочу получить)? Пожалуйста рассчитывайте в ответах на полного новичка в opencv. Поподробнее и с примерами, если не труднo кoнечнo.

:)

post-5337-0-60157500-1334656411_thumb.jp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а скелет вы получаете по какому алгоритму(в смысле толщина однопиксельная)? и как он у вас хранится?

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

кривизну наверно можно так же определить как угол между соседними отрезками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а скелет вы получаете по какому алгоритму(в смысле толщина однопиксельная)? и как он у вас хранится?

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

кривизну наверно можно так же определить как угол между соседними отрезками.

Скелет я получаю с помощью повторения cvErode и cvDilate. результат хранится в IplImage и толщина не всегда однопиксельная. Я пока не знаю как мне провести прямую линию только по пальцам. Т. е. Она дoлжна прeдставить скелетон пальца oдной линией и идти от вершины пальца примерно по скелетону, не повторяя его изгибов. если oна вниз в ладонь уйдет, это не важно. Лучше конечно если oна будет проходить только от начала и до конца пальца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
толщина не всегда однопиксельная.

это плохо. не так удобно работать.

надо найти точки изгибов и конечные точки, а то что это пальцы потом отфильтровать.

конечная точка это (если скелет однопиксельный) у которой 1 сосед.

точка изгиба это точка из которой если построить 2 отрезка фиксированной длины(вперед по контуру и назад) и померить между ними угол, то угол превосходит заданный заранее угол.

(хотя возможно можно как то и по другому определить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Библиотека для распознавания артикуляций руки:

http://www.libhand.org/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Microsoft - овская разработка для считывания жестов руки.

http://research.microsoft.com/apps/video/default.aspx?id=173838

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×