Полуфиналист конкурса стартапов о технических секретах своей онлайн-примерочной
Продолжение. Предыдущие посты см. здесь и здесь.
В прошлом посте я писал про интерфейс приложения — незадолго до написания этого текста мне сдали его дизайн, сейчас интерфейс программируется с использованием EZGUI. Часть задач пришлось отдать на аутсорсинг, в частности скрипты для связи приложения с базой данных, поиска и сортировки вещей.
Множество людей спрашивали меня про усадку одежды, моделирование того, как одежда будет сидеть. Сервис изначально создается для того, чтобы посмотреть, как одежда выглядит в 3D и как различные вещи будут смотреться вместе. Усадку моделировать планируется, но в будущем. К тому же нынешняя технология надевания одежды (сетки) на модель затрудняет моделирование усадки. Сейчас сетка одежды «натягивается» на сетку модели человека независимо от размера. Возможно, в будущем, когда мы изменим или улучшим технологию, эмуляция усадки станет возможна. Но на основе текущей технологии я не представляю, как это сделать. Сканирование разных размеров одной и той же вещи ни к чему не приведет, так как сетка подгоняется под текущие размеры. В Сети описана одна методика, которая позволит моделировать усадку. Однако она слишком кропотлива и требует долгой ручной настройки параметров компонентов ткани в движке для каждой (!) вещи, что, учитывая большое количество моделей и их потоковое изготовление, в настоящее время неприемлемо.
Помимо основной идеи у меня была также идея офлайн-примерочной на основе сенсора Kinect от Microsoft. Я думал и о приложениях, основанных на дополненной реальности, но отложил их изучение до окончательной реализации онлайн-примерочной. На Западе существует ряд проектов, предлагающих подобные услуги, некоторые ссылки на них я приводил в первом посте. Не все эти решения используют Kinect и подобные сенсоры, в ряде случаев изображение передается с обычной веб-камеры. В некоторых проектах на изображение человека накладывается двумерная картинка выбранной вещи, она может двигаться вслед за человеком. В других проектах на изображение с веб-камеры накладывается 3D-сетка, но она не замкнутая и находится только с фронтальной стороны.
В конце октября, после разговора с ментором, назначенным мне редакцией после попадания в полуфинал конкурса Forbes.ru, я «пощупал» Kinect и понял, что не так уж и сложно перенести основной проект на данную платформу. Попробовал сам кое-что реализовать… и отложил этот вопрос до запуска основного проекта. Ментор же предложил в первую очередь ориентироваться именно на такие офлайн-примерочные, основанные на дополненной реальности, и начать предлагать их продавцам одежды премиум-сегмента. В качестве примера он приводил успешные реализации подобных проектов в США.
Kinect-совместимое приложение может быть интересно офлайн-магазинам как альтернатива обычной примерочной с занавесками. За короткий промежуток времени пользователь может померить на 3D-манекене большое количество одежды, посмотреть, как вещи смотрятся вместе, и принять решение о покупке. Приложение должно отображаться на вертикальных широкоэкранных мониторах. Как следствие, текстуры модели человека и одежды должны быть более высококачественными, чем в онлайн-приложении. Возрастающая в таком случае нагрузка на CPU и видеокарту будет компенсироваться тем, что приложение скомпилировано как standalone и на него может тратиться большее количество ресурсов компьютера.
Отчасти ментор был прав: предлагать такое решение планируется в первую очередь продавцам одежды премиум-сегмента, так как стоимость приложения и отрисовки моделей будет ощутимо выше, чем для онлайн-версии. В основном это произойдет из-за более высококачественных текстур и наличия дополнительного оборудования (монитора, компьютера). С точки зрения изготовления моделей реализация конкретной офлайн-версии может быть даже проще, так как в целевых магазинах ассортимент обычно невелик.
Поскольку в настоящее время идет доработка интерфейса, у меня появилось время заняться Kinect-версией приложения. Вскоре после появления на рынке Kinect была написана и выложена в свободный доступ обертка функций Kinectдля Unity3D, которая существенно упрощает создание соответствующих приложений.
Разработку я условно разделил на 3 части:
1. Setup персонажа: назначение костей скелета 3D-модели и их зависимостей от входящей с камеры информации таким образом, что движения будут распознаваться и модель будет двигаться вслед за человеком. Этот процесс полуавтоматизирован, возможно, потребуется написать ряд скриптов для коррекции отдельных движений.
2. Программирование интерфейса, управляемого движениями рук: жестами можно будет прокрутить меню, выбрать конкретную вещь. Интерфейс в данной версии будет урезан — меню изменения параметров тела не будет, так как параметры и размеры будут сниматься непосредственно с камеры. Меню поиска и сортировки также будет отсутствовать, так как предполагается, что такие примерочные будут стоять в магазинах, где изначально объем вещей невелик. К тому же текущая версия меню для поиска и сортировки слишком сложна для управления жестами с камеры.
3. Определение размеров тела. В данном случае мне помог опыт разработки приложения для распознавания лиц, точнее использования методик обработки изображения, в этом задействованных. Алгоритм я уже придумал и оттестировал, осталось прикрутить его непосредственно к приложению.
P. S. Непосредственно в момент написания этого поста со мной достаточно неожиданно связались конкуренты, о которых я раньше не слышал. Это российская компания, занимающаяся предоставлением услуг в виде 2D-примерочных и редакторов образов онлайн. Мы уже ведем переговоры о сотрудничестве. Подробнее в следующем посте.