Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
16.62 Mб
Скачать

Видеопоток от сенсора

Внимательно почитав MSDN можно узнать полезную информацию об этом потоке. Например, разработчик волен установить уровень качества и формат картинки при инициализации видеопотока. От уровня качества напрямую зависит количество и скорость передаваемых от сенсора данных, ограниченной, в свою очередь, пропускной способностью USB 2.0. Так для картинки разрешением 1280x960 количество кадров в секунду составит 12, а для картинки разрешением 640x480 – 30. Формат изображения определяется цветовой моделью и может быть либо RGB, либо YUV.

Комбинации уровня качества и формата картинки представлены перечислением ColorImageFormat. Три из его значений определяют 32-битное кодирование каждого пиксела изображения:

RgbResolution1280x960Fps12,RgbResolution640x480Fps30иYuvResolution640x480Fps15, а четвертый – 16-битноеRawYuvResolution640x480Fps15. Большое недоумение вызывает YuvResolution640x480Fps15. В MSDN четко сказано (тут и тут), что это YUV конвертированный в RGB32… но, тем не менее, продолжающий оставаться YUV.

Чтобы начать принимать видеопоток от сенсора, этот самый поток необходимо инициализировать:

// включаем видеопоток с цветовой моделью RGB и разрешением 640x480(30fps)

kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

// теперь можно подписаться на событие сенсора, чтобы получать готовый кадр и работать с ним

kinect.ColorFrameReady +=SensorColorFrameReady;

Аудиопотокотсенсора

В Kinect встроен набор из четырёх микрофонов, использующий 24-битный аналого-цифровой преобразователь, а встроенный обработчик звукового сигнала включает подавление эха и уменьшение шума. Каждый микрофон установлен так, чтобы иметь небольшую направленность. Задействовать ли эхо или шумоподавление зависит от разработчика, т.е. эти опции задаются на этапе инициализации аудиопотока. Оптимальное расстояние между говорящим и сенсором – 1-3 метра.

Звуковые возможности Kinect могут быть использованы самыми различными способами, например, для высококачественного захвата аудиосигнала, определение положения аудиосигнала или распознавания речи. О распознавании речи мы поговорим далее, а сейчас мне бы хотелось остановиться на одной особенности Kinect,. Инициализация аудиопотока занимает чуть меньше четырех секунд. Это необходимо учитывать, и, скажем, после вызова метода сенсора Start(), делать задержку в четыре секунды, прежде чем настраивать параметры аудиопотока —KinectSensor.AudioSource.Пример определения направления звука можно найти в MSDN.

Поток данных дальномера от сенсора это поток формирующийся из кадров, в которых каждый пиксель содержит расстояние (в миллиметрах) от плоскости сенсора до ближайшего объекта в определенных координатах поля зрения камеры. Как и в случае видеопотока, для потока данных дальномера можно устанавливать разрешение одного кадра, которое определяется перечислением DepthImageFormat. При частоте кадров 30 в секунду, разработчик волен выбирать разрешения 80x60 (Resolution80x60Fps30), 320x240 (Resolution320x240Fps30) и 640x480 (Resolution640x480Fps30). И как уже было сказано в предыдущей части, существует два диапазона «рабочих» расстояний: DefaultRange и NearRange, определяемых перечислением DepthRange.

// устанавливаем диапазон расстояний

kinect.DepthStream.Range = DepthRange.Near;

// и включаем поток дальномера с разрешением 640x480(30fps)

kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);

Расстояния в каждом пикселе кодируется только 13-ю битами, а 3 бита призваны идентифицировать человека. Если расстояние до объекта оказывается выходящим за рабочий, в 13 битах вернется ноль или определенная константа. Если при инициализации сенсора включить возможность трекинга человеческой фигуры, в 3 битах будет возвращаться порядковый номер (1 или 2) обнаруженного человека (если в данной точке найден человек, иначе вернется 0):kinect.SkeletonStream.Enable();