Jump to content
Compvision.ru
Sign in to follow this  
ProgerX

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

Recommended Posts

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

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

видео здесь:

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Описание:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

:)

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites
толщина не всегда однопиксельная.

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

http://www.libhand.org/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×