Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 23.10.2013 | Доступ: свободный | Студентов: 1772 / 623 | Длительность: 09:26:00
Специальности: Программист
Лекция 2:

Основы, функциональность и особенности Intel Perceptual Computing SDK

Модули обработки

Модуль распознавания жестов

Рассмотрим модуль отслеживания позиций пальцев на руке. Нам доступны 7 точек: кончики пальцев, центр ладони и максимально видимая точка, которая находится у локтя. Если не требуется знать о местоположении каждого пальца, то можно запросить специальные параметры, например, самую верхнюю точку, самую правую точку или центр масс руки. На последнее не стоит сильно полагаться, так как это изменяемая величина. Поэтому если нужно отслеживать руку, то для точных взаимодействий рекомендуется использовать кончик пальца.

Кроме этого существует возможность распознать несколько стандартных жестов. Такие как большой палец вверх, большой палец вниз, символ V (победа). В новой версии SDK доступен жест ладони (раскрытая ладонь). Кроме статических жестов камера позволяет возвращать события о том, что произошли какие-то динамические жесты. Например, взмахи руки влево, вправо, вверх, вниз, круговое движение, помахивание.

Кроме всего прочего, данный модуль позволяет возвращать карту значений. Это специальный набор, где каждому пикселю будет присвоено значение именно того объекта, которому он принадлежит. Это может быть полезно для сегментации объектов, то есть отделение одних объектов от других.

Модуль распознавания лиц

Наверное, всем известно как работает функция обнаружения лиц в фотоаппаратах, когда в окне предварительного просмотра появляется квадратик на распознанном лице и в зависимости от его положения выставляется фокусное расстояние или другие настройки. Данный модуль SDK позволяет получить большое количество информации о распознанном лице. В итоге может быть возвращено 7 точек на лице: уголки глаз, уголки рта, кончик носа. Кроме этого можно получить некоторую аналитическую информацию о распознанном лице. Например, мы можем получить возрастную группу лица присутствующего на картинке (ребенок, пожилой человек), можно определить пол, распознать подмигивание, распознать улыбку. Еще одна полезная особенность этого модуля заключается в том, что он может находить похожие лица.

Модуль голосового управления

Модуль голосового управления предлагает две основных функциональности по распознаванию речи: первая – это использование функций модуля для реализации голосовых меню. Вторая – это надиктовывание. Данная функция предназначена для реализации надиктовывания коротких фраз продолжительностью до 30 секунд. На текущий момент доступны немецкий, британский английский, американский английский, французский, итальянский, японский, португальский, испанский, китайский словари. Другие языки будут добавляться по мере сотрудничества с разработчиками голосового движка. Сейчас для реализации голосового управления используется голосовой движок Nuance Dragon Assistant. Русский язык также скоро будет доступен.

Кроме того, в SDK доступен модуль синтеза речи. С помощью этой функции компьютер сможет отвечать пользователю. Отличительной особенностью здесь является то, что не требуется заносить в программу какие-то предзаписанные фразы, а аудио поток формируется на лету и результат воспроизводится через аудио систему компьютера.

Модуль отслеживания двумерных и трехмерных объектов

Функционал данного модуля позволяет отслеживать плоские двумерные объекты. Достаточно просто создать модель этого объекта на компьютере и отслеживать его. В результате мы можем получать параметры позиции объекта, угол наклона и т.д. Также поддерживается отслеживание трехмерных объектов, которые задаются в виде модели (.obj файла). По умолчанию доступна модель маски лица, при помощи которой можно отслеживать наклоны и изменения позиции лица как трехмерного объекта.

Стоит дополнить, что SDK реализует несколько уровней интерфейсов, которые позволяют сразу же использовать игровые движки. На текущий момент поддерживаются следующие игровые движки: Unity, Processing, использующий Java и openFrameworks.

Конфиденциальность пользователя

Компания Intel заботится о сохранности персональных данных пользователей. В состав SDK включена утилита, предназначение которой заключается в уведомлении пользователя о том, что его персональные данные используются в данный момент. Ведь если камера персонального компьютера включена постоянно, то можно начать сомневаться, а не следят ли за мной. Поэтому данная утилита присутствует в составе SDK. Когда утилита запущена, то ее значок прячется в системном трее рядом с часами. В случае использования интерфейса SDK появляется всплывающая подсказка. Работу утилиты можно настроить на свое усмотрение. К примеру, если вы не хотите, чтобы подсказка постоянно всплывала, то ее можно отключить, а иконка в системном трее будет просто моргать. Данная утилита предназначена только для уведомления пользователя и не предназначена для блокировки доступа к сенсору камеры или микрофона. Ограничить доступ к камере или микрофону через данное приложение невозможно.

Иерархия интерфейсов

Иерархия API SKD

Рис. 2.2. Иерархия API SKD

Поскольку SDK нацелен на различные модели использования, а также на широкий спектр разработчиков с разным уровнем знаний, то достаточно сложно разработать единый интерфейс, который работает во всех случаях. Некоторые разработчики ценят простоту, другим требуется как можно точнее настроить каждый шаг алгоритма. SDK предоставляет слои иерархии интерфейсов для удовлетворения этих потребностей.

Как представлено на рис. 2.2, основой SDK являются набор блоков C++ интерфейсов, модули ввода/вывода и модули алгоритмов. Эти интерфейсы обеспечивают грубую функциональность. Например, PXCCapture интерфейс возвращает аудио семплы (PXCAudio) или изображения (PXCImage) с сенсора устройства. Интерфейс PXCGesture выполняет отслеживание пальцев и распознавания жестов. Приложения, использующие данные уровни интерфейсов, достигают максимальной гибкости и умеренно сложны в реализации. Интерфейсы C++ напрямую портируются в интерфейсы C# (левая часть рисунка).

SDK предоставляет набор вспомогательных классов для упрощения разработки приложений: класс UtilCapture является расширением интерфейса PXCCapture, помогает объединить модули алгоритмов с устройствами ввода и синхронизировать поток данных между ними. Класс UtilPipeline предоставляет простой интерфейс общего назначения, ограничивается распознаванием жестов, лица и голоса.

В своем приложении вы можете использовать любой из этих интерфейсов и настраивать их под конкретные случаи. Для максимальной простоты, вы можете начать с класса UtilPipeline. Для большей гибкости, вы можете использовать класс UtilCapture. Большинство приложений должны использовать определенные комбинации. Например, класс UtilPipeline определит, как направить поток данных с устройства ввода в модули алгоритмов, а также использовать интерфейс PXCGesture для управления деталями алгоритма.

  • Интерфейс PXCCapture предоставляет функции-члены для опроса устройства видео захвата и создает экземпляр устройства захвата.
  • Интерфейс PXCAudio обеспечивает последовательный способ доступа к аудио буферу.
  • Интерфейс PXCImage обеспечивает последовательный способ доступа к буферу изображения.
  • PXCGesture интерфейс позволяет функции-члену выполнять распознавание жестов.
  • Вспомогательный класс UtilPipeline предоставляет простой интерфейс для некоторой ограниченной функциональности отслеживания пальцев, распознавания голоса и лицам с камеры или из файла.
  • Интерфейс UtilCapture является вспомогательным интерфейсом (поверх интерфейса PXCCapture) для создания сложного конвейера (пайплайна).


2.1.
                    Пример простого распознавания жестов

рис. 2.3 отображает приложение, которое использует класс UtilPipeline для распознавания жестов. Приложение позволяет распознавать жесты с помощью функции EnableGesture. Запускается цикл с помощью функции LoopFrames, которая инициализирует конвейер распознавания жестов и направляет данные с устройства ввода (камеры глубина) в модуль распознавания жестов.

Интерфейсы SDK (с префиксом PXC) - это виртуальные классы C++, каждый из которых может иметь несколько исполнений.

Модель программирования

Общая процедура программирования представлена в Примере 2.

  1. Создание сессии. Прежде всего, необходимо создать сессию. "Сессия" это контекст, который SDK использует для хранения всех модулей ввода/вывода и модулей алгоритмов. Приложение может использовать функции сессии для создания экземпляра модуля. Приложение вызывает функцию PXCSession_Create для создания сессии SDK.
  2. Создание модуля. Приложение создает экземпляр некоторого алгоритма, модуль ввода/вывода вызывая функцию CreateImpl. При необходимости с помощью функции QueryImpl перечисляются имеющиеся алгоритмы и модули ввода/вывода.
  3. Работа модуля. Приложение вызывает функции-члены экземпляра модуля для некоторых функций.
  4. Закрытие. Приложение должно удалить все созданные экземпляры.
// Создаем сессию
PXCSmartPtr<PXCSession> session;
PXCSession_Create(&session);
// Создаем захват
PXCSmartPtr<PXCCapture> capture;
session->CreateImpl<PXCCapture>(&capture);
// Производим захват
2.2. Общая процедура программирования

В примере 2.2, приложение использует шаблонную функцию PXCSmartPtr для управления жизненным циклом сессии и захвата экземпляров. Это упрощает программирование. Некоторые из шаблонов, таких как PXCSmartArray, PXCSmartSP, и PXCSmartSPArray, введены для удобства, но являются необязательными.

Гульзия Калымова
Гульзия Калымова
Александр Радченко
Александр Радченко