Перший досвід з RealSense

Одного разу я писав на Хабр про різні технології отримання 3D зображення з однієї камери. Закінчував я ту статтю словами: “Сам я, щоправда, досі не стикався ні з однією з цих камер, що шкода і прикро."
І ось, раптово, не пройшло і року, Intel проводить в Москві семінар + хакатон по новому поколінню своїх 3D-камер (Intel RealSense). Цікавість заграло: ми з колегою записалися на захід. Як з'ясувалося, не дарма. Хакатон ми виграли + отримали Developer-версію камери, яку тепер мучимо.

Стаття присвячена двом речам:
1) Розповіді про камеру, її плюси і недоліки. Огляд того, що можна зробити, а для яких завдань вона не годиться.
2) Розповідь про концепцію, яку ми запропонували на хакатоне і за яку отримали перше місце.


Камера

Про камеру можна говорити багато. Камера виявилася цікавішою очікувань, але не в плані якості, а в плані закладеної математики. З глобальних речей:
По-перше, замість технології Time of flight відбулося повернення до структурованої підсвічуванню. Думаю, що точність за ту ж ціну виявляється вище. Звичайно, потенціалу більше у ToF, але там величезна вартість якісного сенсора. Структурована підсвічування має цікавий малюнок, який рухається в часі
image
Якщо чесно, я не розумію, як вони нівелюють цю картинку в ІК потоці. Ймовірно якийсь міжкадрової апроксимацией. Але явно це не помітно.
По-друге, дуже класна математика для виділення пальців на руках і контурів особи. Контури особи виділяються через активні моделі зовнішнього вигляду, але, алгоритми розширені на 3D область. Це рішення дозволило збільшити стабільність і точність роботи. Цікавий момент — виділення особи працює на звичайних камерах. Точність, звичайно, менше, але при яскравому освітленні непогано. Ідея мені сподобалася. Наскільки мені відомо, стабільного рішення по активних моделей, яке можна було б взяти і використовувати безкоштовно просто не було (хоча, звичайно, 4хгиговый SDK зупиняє).
Виділення особи двухэтапно. Спочатку якимось швидким алгоритмом (ймовірно хааром) шукається регіон з особою, потім через активну модель форми натягується особа. Стійко до міміки і до окулярів. Не стійке до поворотів більше 15-20 градусів.
Рішення з виділенням пальців мені теж сподобалося. Ідеальною стабільності немає, але передбачувана система, на її основі можна створювати цілком робочі програми. Напевно, менш точна, ніж у Leap Motion, зате більше область огляду. Рішення не ідеально. Виникають неоднозначності, криво натягаються моделі. Деякі з вбудованих жестів розпізнаються через раз. Деякі з жестів не розпізнаються, якщо спочатку система не побачить розгорнуту руку. У відео нижче я спробував висвітлити проблеми.
На мій погляд, потенціал є вже зараз. А якщо якість виділення рук підвищать ще в півтора рази, то таке управління буде порівнянно з тачпад.
По-третє, хотілося б відзначити, що Kinect і RealSense мають різні ніші. Kinect націлений на великі простори, для роботи з людиною здалеку. А RealSense для прямої взаємодії з системою, куди він встановлений. Багато в чому це визначає і параметри 3D сенсора.

Мінуси

Не обійшлося і без мінусів. Так як поточна версія ще не фінальна, хотілося б сподіватися, що їх виправлять.
Перший незручний момент — драйвера поки сирі. У колеги, з яким ми ходили в якийсь момент камера геть відмовилася працювати. Допоміг тільки знесення всіх драйверів і їх скинути кілька разів.
При ініціалізації відеопотоку періодично відбувається фэйл, всі програма зависає на 20-30 секунд і не стартує. Словлено на двох компах.
Другий момент відноситься до розпізнавання особи. На мій погляд, упускається велику кількість інформації:
1) Очі — дзеркало душі. Чому не виділяється явне напрям погляду? Є направлення особи, є виділення положення зіниць (звідки, теоретично можна отримати направлення). Але при кутах повороту голови більше 5 градусів положення зіниць починає апроксимироваться центром очі. При цьому це явно ніяк не вказується. Звичайно, хотілося б, щоб в API було явно винесена можливість використовувати напрямок.
2) Виділення особи працює лише в двох режимах, в "FACE_MODE_COLOR_PLUS_DEPTH" і в «FACE_MODE_COLOR». Чому немає «FACE_MODE_IR_PLUS_DEPTH» або хоча б «FACE_MODE_IR»? В умовах слабкої освітленості особи виділення перестає працювати. Чому не можна використовувати для виділення режим, де особа завжди видно добре і стабільно. Багато люблять сидіти перед комп'ютером у напівтемній кімнаті.

Третій момент — архітектура. Може, ми не зрозуміли до кінця, але у нас не вдалося одночасно запустити розпізнавання обличчя та розпізнавання рук. Будь-яку з цих систем потрібно ініціалізувати окремо.

Четвертий мінус — не всі заявлені частоти працюють. Звичайно, можна спробувати підібрати з камери відео 640*480*300fps. Але воно не підбирається в такій якості не зберігається. Хотілося б, щоб перераховувалися робочі режими.

П'ятий мінус трохи персоналізований для тієї тематики, де ми часто працюємо — «біометрія». Будь би довжина хвилі лазера 800-900нм, а не 700-600, як в камері було б видно багато біометричних ознак людини, системи розпізнавання можна було б робити прямо на цій камері.

Як ми виграли Хакатон

Хакатон починався після півтора годин лекцій і показу прикладів. Всього було 40 чоловік в 13 командах. Формат: «даємо камеру, через 6 годин покажіть проект».Враховуючи, що будь-яка видеоаналитика вельми складна, це небагато. З іншого боку, дивно проводити такі заходи в іншому форматі (сумарно все тривало 8 годин, під кінець всі були сильно виснажені).
Хто-то до хакатону грунтовно готувався. Хтось взяв проекти, зроблені для інших цілей і сильно модифікував їх. Вся наша з Васею підготовка до хакатону зайняла три години. Сиділи, пили чай і думали що ж можна зробити. Ідей було кілька:
1) Спробувати взяти який-небудь наш проект і пристосувати до нього 3D камеру. Проблема була, що всі проекти були саме для 2D-розпізнавання/аналітики. І прикручувати камеру до них було явно більше 4х годин. Плюс до того, незрозуміло, як це можна було красиво обставити.
2) Спробувати показати демонстраційний ефект, якесь просте і класичне додаток. Управління мишкою/літачком очима/рукою. Малювання на обличчі вусів/бакенбардів. Мінус такого варіанту — він досить порожній і нецікавий. До гарного стану доводити довго, а простий варіант не буде цікавий публіці.
3) Показати якісно нову ідею, досяжну лише на даному продукті. Зрозуміло, що за 4 години хакатона таку штуку неможливо збудувати до кінця. Але є можливість показати демонстраційний ефект. Цей варіант сподобався найбільше. Тут основна проблема — придумати таку ідею
Одна з речей, які мені подобаються — аналітика стану людини. Можливо, ви читали одну з моїх минулих статей на Хабре. І звичайно, мене понесло в ту ж сторону. Але робити посилення руху через 3D — малоффективно. Зате через 3D можна зняти багато характеристик сидить перед камерою людини. Але от як і куди це застосувати?

Відповідь виявилася напрочуд тривіальним і очевидним, варто було тільки Васю спитати мене: «а чим може допомогти 3D камера в машині?». І тут нас просто понесло. Адже 3D камера в машині може:
· Стежити за тим, засинає водій чи ні.
· Слідкувати за увагою водія, наприклад, що при перестроюванні водій не дивиться в дзеркала заднього виду.
· Розпізнавати жести водія: водій може не відриватися від дороги скролити мапу/управляти музикою.
· Автоматичне налаштування дзеркал перед поїздкою.
А найдивніше: цього ще ніхто не зробив. Є системи визначення втоми, в останні пару років вони навіть почали використовувати відеокамери. Але з 3d камерою можна точніше визначати положення голови водія, що дозволяє контролювати його реакції. До того ж, одна справа, засинання, а інше — аналіз дій і допомогу водієві.
За чотири години зібрали простеньку демонстрацію:
За цю ідею і демонстрацію нам раптом видали перше місце.
Якщо раптом комусь потрібні наші начерки за 6 годин — ось вони. Там EmguCV підключено + вермишельный код. Ідея офігенна, але як підступатися до проблеми такого масштабу і рівня інтеграції — незрозуміло. Але такі технології можуть стати перехідними до автомобілів-роботів.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.