#opengl #image-manipulation
#opengl #обработка изображений
Вопрос:
Я хочу создать приложение, которое будет захватывать одно изображение камерой и будет манипулировать живыми изображениями, сделанными им за миллисекунды времени.
Цель состоит в том, чтобы приложение заменило мою одежду на какую-нибудь другую одежду, которую я предоставлю.
У меня есть несколько вопросов:
Обладает ли OpenGL такой способностью изменять живые изображения таким образом, чтобы это меняло мою одежду в компьютерном изображении? Я буду двигать руками и тому подобное, может ли это быть настолько точным, чтобы все выглядело так, как будто я в другой одежде, а не в оригинале, который на мне надет?
Комментарии:
1. Удачи с этим. Очень амбициозный.
2. Я не эксперт, но я так не думаю. OpenGL предназначен для 3D-графики
3. OpenGL также предназначен для 2D-графики. Отлично справляется с ними. Здесь важно то, что OpenGL не предназначен для распознавания положения руки человека по отношению к его телу.
4. @romkyns: тогда куда мне следует обратиться для распознавания движений?
5. @Umair: Попробуйте сначала получить исследовательский грант? 🙂
Ответ №1:
Это не вопрос мощности. OpenGL предназначен для рендеринга 3D-графики. То, что вы хотите, относится к области компьютерного зрения и дополненной реальности. Используйте правильный инструмент для решения задачи. Возможно, вы захотите взглянуть на OpenCV.
Ответ №2:
OpenGL действительно может добавлять одежду очень быстро. Это даже не начнет ограничивать его возможности по компоновке изображений.
Однако у вас может возникнуть недопонимание относительно того, что именно он может сделать для вас. Он может смешивать изображения, но вам придется точно указать ему, где рисовать одежду, как ее деформировать и т.д., И вам придется разбираться в этих вещах самостоятельно. OpenGL не поможет вам определить, где находится рука человека.
Комментарии:
1. В этом суть! Как бы я попытался захватить точную часть одежды вне тела?
2. @Umair У меня мало опыта работы с компьютерным зрением, поэтому я бы даже не смог порекомендовать вам хорошую библиотеку. Но одно можно сказать наверняка, OpenGL — это не та библиотека.
Ответ №3:
OpenGL — это библиотека рендеринга; ее назначение — рисовать объекты на вашем экране. Вероятно, его можно было бы использовать как часть решения вашей проблемы, но только для рендеринга. Ваша проблема также требует довольно серьезной обработки изображений, чтобы взять исходное изображение с камеры, распознать человеческое тело и все его различные части и позы, а затем сузить это до одежды.
Что, если вы одеты, например, в тренчкот, а сменная одежда (подлежащая рендерингу) — это что-то облегающее, например, профессиональный костюм для катания на коньках? Очевидно, что в этом случае процессу замены требуется информация, которая недоступна из исходного изображения. Для этого требуется либо предварительно сгенерированная база данных, описывающая ваше тело, либо ограничение диапазона возможных сменных нарядов (возможно, просто изменение рисунка и / или цвета тренча).
Посмотрите на OpenCV и на то, что люди делают с контроллером Kinect. Это будет нелегко.
Комментарии:
1. Спасибо. Я знаю о Kinect. Даже я устал участвовать в конкурсе, кто принесет драйвер Windows для Kinect, но мне это не удалось.
Ответ №4:
Я думаю, что вопрос скорее о мощности современных видеокарт (GPU), чем об OpenGL. OpenGL — это просто API для доступа к мощности графического процессора.
Графические процессоры сегодня очень мощные (смотрите мою любимую и уже немного устаревшую диаграмму), и я думаю, что они могут справиться с задачей, которую вы от них хотите, достаточно быстро.
Ваша цель очень (очень) амбициозна — вам нужно будет модифицировать алгоритмы компьютерного зрения, чтобы они хорошо работали на графических процессорах (распараллелить их) и использовать их для обнаружения сегментов с одеждой, а затем заменить эти сегменты. Любой из этих задач было бы достаточно для магистерской диссертации.
OpenGL может помочь вам выполнить эту работу, но вам придется самостоятельно кодировать все алгоритмы, используя шейдеры (в GLSL) и рендеринг в текстуре.
В отличие от других, я бы не рекомендовал использовать OpenCV, поскольку у него есть некоторые серьезные недостатки для вашего использования:
- Это медленно, и вы не достигнете интерактивной частоты кадров для своей задачи, если у вас не очень мощный процессор
- Он не использует мощность графического процессора (по крайней мере, в стабильной версии)
- API неинтуитивен — OpenCV — это скорее список реализованных CV-алгоритмов, чем фреймворк. Вам все еще нужно знать, как работают алгоритмы под капотом, чтобы использовать его должным образом.
Комментарии:
1. 1 за мотивацию словами «Ваша цель очень (very) амбициозна»
2. Не кажется ли вам, что это совершенно невозможно из-за того, что одежда покрывает тело? Я думаю, что рентгеновские аппараты могут выполнить эту работу, которая сначала захватит тело даже в одежде, а затем воссоздаст изображение. Вот в чем заключается безопасность TSA 🙂
3. Невозможного нет ничего. Цвет одежды обычно отличается от цвета человеческой кожи. Таким образом, если вы определяете, где находится человек (для этого есть алгоритмы), вы можете нарезать одежду с помощью цветовой сегментации. Но это непросто 🙂