Smorodov 579 Жалоба Опубликовано May 12, 2011 Набрел в сети на проект (дипломная работа) по определению координат руки в трехмерном пространстве при помощи двух камер. проект здесь: http://www.b4silio.com/files/thesis-basilio_noris.pdf видео здесь: Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
student89 0 Жалоба Опубликовано April 9, 2012 Здравствуйте! Мне нужно для диплома написать программу по распознаванию жестов руки (Open CV и C++), а опыта с Open CV никакого. Профессор хочет видеть реализацию через Скелетон. После длительных попыток мне даже удалось етот Скелетон построить, а вот что с ним дальше делать непонятно. Может что-то посоветуете? А если бы примеры были, то было бы просто замечательно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 10, 2012 Опишите задачу подробно, т.к. никто кроме Вас т.з. не видел и с Профессором не общался. Что дано? Что нужно от программы? Что здесь понимается под "жесты"? Хорошо-бы привести пару изображений. А так ответа долго ждать будете. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
student89 0 Жалоба Опубликовано April 10, 2012 Опишите задачу подробно, т.к. никто кроме Вас т.з. не видел и с Профессором не общался. Что дано? Что нужно от программы? Что здесь понимается под "жесты"? Хорошо-бы привести пару изображений. А так ответа долго ждать будете. Описание: Камера снимает руку на черном фоне. Показываются жесты, например "victory" (2-й и 3-й палец) "телефон" (1-й и 5-й палец) "кулак" (без пальцев ) или просто показывается один,2, 3,4 или 5 пальцев. Программа распознает их и выдает текстовое сообщение на экран. Скелетон как на картинке. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 10, 2012 Я не стал-бы делать это через скелет, но если такая постановка задачи, то: 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
student89 0 Жалоба Опубликовано April 10, 2012 Cпасибо большое за совет. Насчет моментов уже думал, правда пока не придумал как их со скелетом связать. А вот с векторизацией пока вообще не знаком. Все пока делал только контурами или отдельными пикселями. Может у вас есть пример? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 10, 2012 Так что его связывать? Ищем моменты бинаризованного изображения, находим по ним углы. Находим скелет. Поворачиваем его главной осью куда надо. Углы у скелета и бинаризованного изображения будут похожи. Что касается векторизации, то можно пробежать по изображению и записать все координаты ненулевых точек, но это как простейший вариант, как с ним будет работать сеть, не могу сказать. Может быть придется придумать что нибудь более изощренное. Кстати, можно ведь и к скелету применить CovnexityDefect (как вариант векторизации). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 16, 2012 где то даже встречал описание типа skeletons vs contours но чем там закончилось дело не помню) а по сравнению скелетонов можно почитать про shock graphs даже программа есть. http://www.cs.toronto.edu/~dmac/ShapeMatcher/index.html у скелетов есть свои проблемы типа маленьких "веточек" помоему в англоязычной литературе их убирание называется pruning. и еще они чувствительны к шуму на контуре, но это возможно не такая уж проблема наверно можно либо сгладить или выбрать какую нибудь метрику поумнее. во всяком случае, если у вас что то получится, то напишите тут об этом, интересно почитать будет как это работает на практике. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
student89 0 Жалоба Опубликовано April 17, 2012 Спасибо большое за ответы. Пытаюсь разобраться и выбрать то, что может пригодиться. Пока продвигается очень медленно. у меня еще вопрос- а как можно провести прямую линию по пальцам на кривом скелетоне так, чтобы она заканчивалась там, где заканчиваются пальцы (красным на картинке я выделил то, что хочу получить)? Пожалуйста рассчитывайте в ответах на полного новичка в opencv. Поподробнее и с примерами, если не труднo кoнечнo. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 17, 2012 а скелет вы получаете по какому алгоритму(в смысле толщина однопиксельная)? и как он у вас хранится? надо сапроксимировать набор точек отрезками, отрезок прерывается там где где кривизна больше установленной пользователем. кривизну наверно можно так же определить как угол между соседними отрезками. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
student89 0 Жалоба Опубликовано April 17, 2012 а скелет вы получаете по какому алгоритму(в смысле толщина однопиксельная)? и как он у вас хранится? надо сапроксимировать набор точек отрезками, отрезок прерывается там где где кривизна больше установленной пользователем. кривизну наверно можно так же определить как угол между соседними отрезками. Скелет я получаю с помощью повторения cvErode и cvDilate. результат хранится в IplImage и толщина не всегда однопиксельная. Я пока не знаю как мне провести прямую линию только по пальцам. Т. е. Она дoлжна прeдставить скелетон пальца oдной линией и идти от вершины пальца примерно по скелетону, не повторяя его изгибов. если oна вниз в ладонь уйдет, это не важно. Лучше конечно если oна будет проходить только от начала и до конца пальца. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 17, 2012 толщина не всегда однопиксельная. это плохо. не так удобно работать. надо найти точки изгибов и конечные точки, а то что это пальцы потом отфильтровать. конечная точка это (если скелет однопиксельный) у которой 1 сосед. точка изгиба это точка из которой если построить 2 отрезка фиксированной длины(вперед по контуру и назад) и померить между ними угол, то угол превосходит заданный заранее угол. (хотя возможно можно как то и по другому определить) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 19, 2012 другой метод, но картинки красивые http://mmlab.disi.unitn.it/wiki/index.php/Hand_gesture_detection_and_recognition_via_Haarcascade_%26_Fingertips_detection Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 4, 2012 Библиотека для распознавания артикуляций руки: http://www.libhand.org/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 20, 2013 Microsoft - овская разработка для считывания жестов руки. http://research.microsoft.com/apps/video/default.aspx?id=173838 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах