Отправлено: Коллин Калбертсон (Intel) 6 декабря 2014 г.
В этой статье предоставляется информация, рекомендации и ссылки для разработчиков, использующих Unity с RealSense SDK 2014. Оставляйте в комментариях дополнения и поправки, и я добавлю их в дальнейшие версии этой статьи. Заходите сюда почаще, чтобы следить за обновлениями.
Важное замечание о версиях Unity:
Unity 4.x в своей основе является 32-битной. Вы можете использовать Unity Pro или бесплатную версию Unity до тех пор, пока используете подписанные библиотеки в Intel RealSense SDK R2 (v.4)
Unity 5.x в своей основе является 64-битной. Вы должны перезаписать 64-битные библиотеки (libpxccpp2c.dll and libpxccpp2c.dll.signature) в ваш проект.
Прежде всего: существующая документация, которая может пригодиться.
- Материалы Intel: Руководство по RSSDK Unity Toolkit устанавливается в папку C:\Program Files (x86)\Intel\RSSDK\doc\PDF\sdktoolkit.pdf.
- Unity_Getting_Started.
- Учебник по отслеживанию лицавключает определение лица, его расположения, реперных отметок и обнаружение выражения лица, распознавание лица, оповещения и примеры кода.
- Учебное руководство по отслеживанию рук, суставов и объектов BLOBсодержит материалы по отслеживанию жестов, рук и суставов, BLOB‑объектов, извлечению контура и сглаживанию данных, а также образцы кода.
- Учебное руководство по записи необработанного потока: получение и отображение потоков цвета и глубины с примерами кода.
- Неофициально: разработчик Intel по имени Амит М. подготовил видео с демонстрацией Unity Toolkitи совмещением RFBDepth и RS/Unity.
- Марти Дж. из компании Sambiglyon предоставил следующие руководства.
- Настройка файлов SDK в Unityи программирование объектов на панели Inspector в соответствии с полученными с камеры данными.
- Преобразование сценариев PXC для использования в файлах сценариев Unity.
- Создание прототипов элементов управления в проектах RealSenseс физическими контроллерами с помощью встроенного в Unity диспетчера Input Manager.
- Простое руководство по отслеживанию движения руки и объектов.
Отметим, что можно использовать DLL-библиотеку Unity, не используя Unity Toolkit. При публикации вопросов и отзывов учитывайте разницу между ними.
Некоторые требования
- Версия Gold R1 поддерживает ТОЛЬКО Windows 8.1. Поддерживается только камера Creative RealSense F200, направленная на пользователя, причем камера должна быть подключена напрямую в порт USB 3.0 без использования USB‑концентратора.
- Необходимо использовать версию Unity Pro, поскольку бесплатная версия Unity не поддерживает подключаемые модули C++. Могут существовать обходные пути для решения этой проблемы, но Intel их не поддерживает. Даже в рамках конкурса Intel НЕ предоставляет лицензии на версию Pro. Обратите внимание, что RSSDK 2014 может использовать C# и содержит немало готовых встроенных «расширений» для взаимодействия между камерой и Unity. (Спасибо, Марти!)
- ПРИМЕЧАНИЕ. Версия Gold R1 компилировалась для Unity Pro 4.1 и также была проверена с версией 4.5. С бета-версией 4.6 тестирование не проводилось.
А теперь советы и рекомендации
- Полный экран. Старайтесь вывести приложение на полный экран в оконном и безоконном режиме при любом разрешении экрана.
- Примечание. Intel рекомендует разрешение 1368 x 768 в качестве минимального.
- Перед компиляцией убедитесь, что в настройках проигрывателя установлен флажок «Использовать Direct3D 11».
- Если в настройках проигрывателя доступно только D3D9, снимите флажки Default is Native Resolution или Default is Full Screen и задайте экран по умолчанию с разрешением 1368 x 768.
- Используйте ТОЛЬКО следующие соотношения сторон: 16:9 и 16:10.
- Результат: положение флажка Windowed на вкладке Resolution Selection Screen.
- Если этот флажок установлен, приложение будет запущено в окне, но его размер можно будет изменять или разворачивать на весь экран.
- Если этот флажок снят, приложение будет запускаться на полном экране.
- Обратите внимание, что можно проверить разрешение экрана
// Cap screen resolution, an example
if ( Screen.currentResolution.width > 1366 || Screen.currentResolution.height > 768 )
Screen.SetResolution(1366, 768, true);
- Производительность
- Желаемое значение AcquireFrame в функции Unity Update() должно быть (false,0) во избежание снижения производительности. (В Unity это блокирующий вызов, привязывающий кадровую скорость к RS и использующийся для ожидания доступности каких-либо кадровых данных.)
if (sm.AcquireFrame (false) != pxceStatus.PXCM_STATUS_NO_ERROR) - Отслеживание обеих рук можно реализовать в одном и том же потоке, но рекомендуется создать отдельные потоки для лица, для голоса и для любого многорежимного использования.
- Желаемое значение AcquireFrame в функции Unity Update() должно быть (false,0) во избежание снижения производительности. (В Unity это блокирующий вызов, привязывающий кадровую скорость к RS и использующийся для ожидания доступности каких-либо кадровых данных.)
- Сглаживание в Unity: как и в SDK, доступно 4 типа сглаживания. Вот рекомендации по их использованию в Unity.
- Stabilize: хорошо подходит для пользовательского интерфейса, поскольку сохраняется существующее расположение вплоть до обнаружения крупных движений.
- Weighted: поддерживает усреднение данных по любому набору значений (Gaussian, Uniform и пр.). Хорошо подходит для отслеживания рук.
- Quadratic: сглаживание на основе времени, применяемое также для стабилизации.
- Spring: на основе времени, но с линейным изменением сглаженных данных.
- Голос и речьв Unity. В Unity поддерживаются команды и преобразование речи в текст (можно использовать образец оболочки C# из папки фреймворка). Синтез речи осуществляется таким же образом (используйте образец из C#).
- Трехмерная сегментация — бороды.В настоящее время при наличии длинной бороды обнаружение может существенно замедлиться: борода поглощает значительную часть инфракрасного излучения и может «отделить» голову от туловища, вызвав путаницу при обнаружении. Над этой проблемой ведется работа.
- Регистрация распознавания лица.
- В версии Gold R1 двухмерное распознавание лица использует только ID#100.
- Версия Gold изменена по сравнению с бета-версией и теперь ожидает в течение 10 кадров подряд перед подтверждением распознавания (этот параметр не изменяется, благодаря ему снизилось количество случаев ложного распознавания).
- При наличии затруднений с UnityEngine.Texture2D PXCMImage.ImageData.ToTexture2D(Int32 plane, Int32 width, Int32 height))
используйте ToTexture2D с указанием Texture2D в виде параметра. - От Marty G: Если вы обнаружили, что объекты двигаются рывками, непредсказуемо или отрываются от объектов, к которым привязаны в качестве дочерних, зайдите в свойства Inspector для конкретного скрипта TrackingAction и установите нулевыми все значения 'Virtual World Box'и 'Real World Box'.
- От Marty G. Если вы хотите, чтобы Unity запускала скрипт внутри объекта, другого, чем MovingObject, отредактируйте скрипт внутри TriggerObject, чтобы дать имя этому объекту, имя скрипту и задать тип функции в начале этого скрипта (Start(), Update() и т.д.). Больше на эту тему см. в посте на форуме.
Присылайте другие советы, подсказки и рекомендации! Надеюсь, что удастся обновить эту статью уже на этой неделе.