Quantcast
Channel: Статьи Intel Developer Zone
Viewing all 357 articles
Browse latest View live

SDN, NFV, DPDK, ONP, OPNFV и так далее!

$
0
0

Почему корпорация Intel участвует в работе сообществ SDN и NFV??

Программно-управляемые сети (SDN) и виртуализация сетевых функций (NFV) постепенно выходят из лабораторий разработки и занимают свое место в рабочей среде: это более дешевые, более быстрые и более гибкие альтернативы традиционному сетевому оборудованию.  

В свое время виртуализация преобразовала возможности развертывания ОС и приложений. Аналогичным образом NFV на уровне 4 и выше (уровень управления) и SDN на уровнях 2 и 3 (управление движением пакетом) преобразуют возможности управления сетевым трафиком с использованием уже существующего оборудования и операционных систем, как проприетарных, так и с открытым исходным кодом. В этой области платформа OPNFV, включая Intel® Open Network Platform (ONP) Server (эталонная архитектура), поможет быстро приступить к проектированию и тестированию сети. Используйте инструкции, приведенные по адресу https://software.intel.com/en-us/articles/quick-set-up-onpдля первоначальной настройки с помощью стандартных существующих серверных платформ с процессорами от Intel® Atom™ до Intel® Xeon®.

Что означают все эти названия с приставкой «Open»?

Средства управления сетью и инфраструктурой виртуализации определяют информационную модель, набор интерфейсов API и протоколы управления, такие как OpenFlow (протокол обмена данными между уровнем управления и уровнем переадресации), разработанные для ОС OpenStack*.

OpenStack* (Juno*-Mitaka) обеспечивает платформу для создания виртуальных машин (ВМ) и управления ими. Виртуальные машины — это базовые операционные системы для всех виртуальных функций. Каждая виртуальная машина может обладать несколькими виртуальными сетевыми интерфейсами.
OpenStack Neutron* это сетевой компонент абстрагирования сетевых конфигураций Linux с помощью общего API, действующего в качестве оболочки для сетевых функций (Open vSwitch, VLANs, iptables/netfilter и пр.).
OpenDaylight* (Helium, Lithium, Beryllium)предоставляет код и архитектуру для виртуализации сетевых контроллеров (уровень управления настройкой, мониторингом и управлением)
Open vSwitch* (OVS) 2.5.0 это многоуровневый виртуальный сетевой коммутатор рабочего уровня. (OVS может быть узлом, подключенным к контроллеру OpenDaylight)
Data Plane Development Kit (DPDK) v16.04 это набор библиотек уровня данных и драйверов сетевых адаптеров, образующих платформу программирования для быстрой обработки сетевых пакетовна процессорах общего назначения.

Примечание. Mitaka содержит OVS 2.5 с ускорением за счет DPDK 2.2

https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-on-ubuntu

Intel® Open Network Platform (ONP) Server это эталонная платформа со сценариями и другими ресурсами для быстрой настройки тестовой сети. Эта платформа основана на решении
OPNFV, которое представляет собой эталонный аппаратно-программный комплекс для развития NFV.  

Технологии Intel для повышения производительности

Корпорация Intel (включая Wind River) вносит значительный вклад в разработку DPDK и Linux. Недавно разработчики Intel объединили Intel® DPDK vSwitch с основной ветвью Open vSwitch, поэтому в Neutron можно использовать алгоритмы ускоренной обработки пакетов Intel, избегая проприетарных подключаемых модулей. Логика коммутации построена на основе библиотеки Intel DPDK, за счет чего существенно повышается производительность обработки пакетов. При этом функции коммутации могут быть интегрированы как в основной вычислительный сетевой узел OpenStack, так и в гостевые узлы.

 

В пакете Intel DPDK также содержатся примеры переадресации на уровне 3, балансировки нагрузки и таймеров; все эти примеры помогают ускорить разработку. Доступ к ресурсам предоставляется как к набору виртуальных функций: ресурсы доступны для множества виртуальных машин и позволяют ускорить обмен данными между виртуальными машинами.

Кроме того, Intel разрабатывает прототипы решений Open NFV (OPNFV) на платформе OpenDaylight, чтобы задействовать возможности повышения производительности сети.

Технология ускорения Intel® QuickAssistпредоставляет возможность ускорения различных алгоритмов (шифрование, сжатие, разгрузка) с поддержкой до 14 раздельных виртуальных сред. Технология Intel QuickAssist поддерживается процессорами Intel® EP80579 (интегрированный процессор), Intel® Xeon® серий E5-2600 и E5-2400, Intel® Core™, Intel® Pentium® и Intel® Celeron® с наборами микросхем серии Intel® 89xx.

Intel также предоставляет Intel® Open Network Platform Server. Эталонная архитектура Intel® ONP Server включает оборудование, оптимизированное для полного набора последних версий ПО с открытым исходным кодом в виде проверенного шаблона для быстрой разработки. Эталонная архитектура включает спецификации, отчеты о тестировании, сценарии оптимизации и поддержку сетевых интерфейсов Intel Ethernet от 1 до 40 Гбит/с (FTXL710-AM2 4x10GbE).

Какие приложения SDN/NFV доступны?

Перечень партнеров по разработке решений приведен по адресу  https://networkbuilders.intel.com/solutionslibrary

Где найти дополнительные сведения?  

Intel поддерживает несколько сайтов, включая следующие. 


Новые возможности управления: Intel® RealSense™ и GestureWorks Fusion*

$
0
0

Веление времени: развитие управления с помощью жестов

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

Управление с помощью жестов достаточно интенсивно развивается в области игр, а технология Intel® RealSense™ — одна из передовых разработок в этом направлении. Интеграция управления жестами в настольные ПК была вопросом времени. Привычная клавиатура и мышь были дополнены расширенной системой голосовых команд и жестов. Представьте все доступные возможности. Можно запустить или остановить воспроизведение фильма, произнеся соответствующие команды вслух, а для приостановки и перемотки достаточно простого набора жестов. Также можно управлять сложным трехмерным объектом в системе автоматического проектирования на большом настенном экране с помощью рук, передавая различные элементы модели коллегам.

Такова концепция компании Ideum из города Корралес, шт. Нью-Мексико, США. Эта компания создает современные системы взаимодействия с пользователями. Компания была образована свыше 15 лет назад и занималась проектированием и внедрением мультисенсорных столов, киосков и настенных панелей. Решения этой компании используются в ведущих учреждениях, в том числе в Чикагском музее естественной истории им. Филда, в Смитсоновском музее поселений американских индейцев, в музее современного искусства в Сан-Франциско. Для работы над решением GestureWorks Fusion * разработчики Ideum решили задействовать технологию Intel RealSense.

В программе GestureWorks Fusion специалисты Ideum стремятся совместить удобство и простоту управления с помощью жестов и голоса с возможностью управления широким набором приложений для настольных ПК, начиная с воспроизведения поточного мультимедиа. Вопросы и возможности, с которыми столкнулись разработчика Ideum, можно считать общими для всех новшеств в области взаимодействия человека и компьютера.

В этом примере описываются решение GestureWorks и использование многорежимного ввода для создания мощной и интуитивной системы, способной интерпретировать жесты и голосовые команды. Показано, как разработчики Ideum использовали Intel® RealSense™ SDKи новый режим Cursor, позволяющий им быстро и удобно взаимодействовать с традиционными приложениями, разработанными для клавиатуры и мыши. Кроме того, в статье описываются проблемы, с которыми столкнулись проектировщики и разработчики, и описываются подходы к решению этих проблем при помощи сочетания технологий Intel и Ideum.

Представляем GestureWorks Fusion *

GestureWorks Fusion — это приложение, использующее камеру Intel® RealSense™ SR300для получения многорежимного ввода, например жестов и голосовых команд. В первоначальной версии этого программного продукта пользователи могут интуитивно управлять работой веб-сайтов для воспроизведения поточного видео, таких как YouTube *. Используя традиционные элементы управления графического пользовательского интерфейса, пользователи могут воспроизводить, приостанавливать, перематывать видео, не дотрагиваясь до мыши, клавиатуры и экрана. Благодаря прямой обратной связи система очень удобна в использовании и освоении.

GestureWorks Fusion* makes it fun and easy to enjoy streaming video web sites, such as YouTube*, using intuitive voice and gesture commands on systems equipped with an Intel® RealSense™ camera SR300.
GestureWorks Fusion * дает возможность удобно и интересно использовать веб-сайты поточного видео, например YouTube *, используя для управления интуитивные голосовые команды и жесты, если система оборудована камерой Intel® RealSense™ SR300.

Камера Intel RealSense SR300 является усовершенствованием камеры Intel RealSense F200, которая в свое время была одной из первых и самых компактных камер со встроенными модулями съемки двухмерного изображения и глубины. Как и в модели F200, в камере Intel RealSense SR300 реализована возможность съемки цветного изображения высокой четкости с разрешением 1080p и расширенные возможности трехмерной съемки, причем увеличена допустимая дальность действия. Вместе с микрофоном эта камера является идеальным решением для отслеживания головы и рук, а также для распознавания лица. «В камере Intel RealSense SR300 нас привлекает то, что эта камера может делать все это одновременно, очень быстро и исключительно надежно», — поясняет Пол Лейси (Paul Lacey), технический директор компании Ideum и руководитель группы разработки GestureWorks.

Решение GestureWorks Fusion опирается на возможности и наработки двух существующих продуктов компании Ideum: GestureWorks Core и GestureWorks Gameplay 3. GestureWorks Gameplay 3 — это приложение для Microsoft Windows *, обеспечивающее сенсорное управление в популярных играх на ПК. Пользователи могут создавать собственные сенсорные элементы управления, обмениваться ими с другими пользователями или загружать элементы управления, созданные сообществом.

GestureWorks Core — это система многорежимного взаимодействия, проводящая полный трехмерный анализ жестов головы и рук и поддерживающая взаимодействие с помощью мультисенсорного ввода и голоса. В GestureWorks Core SDK представлено свыше 300 готовых жестов и поддерживаются наиболее распространенные языки программирования, в том числе C++, C#, Java * и Python *.

Изначально программа GestureWorks Fusion была разработана для работы с Google Chrome * и Microsoft Internet Explorer * под управлением Microsoft Windows 10. При этом предполагается, что GestureWorks Fusion будет работать с любыми системами, оборудованными камерой Intel RealSense. Компания также планирует развить свою систему, чтобы она смогла работать с широким набором приложений, в том числе с играми, офисными приложениями и программами для презентаций.

Проблемы и решения

Специалисты Ideum столкнулись с несколькими проблемами, стремясь сделать решение GestureWorks интуитивным и удобным в использовании, особенно для новых пользователей. Разработчики уже обладали опытом создания мультисенсорных столов и стеновых панелей для общественных учреждений и знали, что пользователей раздражает, если техника работает не так, как они ожидают. Опираясь на этот опыт, проектировщики решили сделать жесты как можно более простыми и сосредоточиться на наиболее привычном поведении.

GestureWorks* Fusion features a simple set of gestures that map directly to the application user interface, offering touchless access to popular existing applications.
В GestureWorks * Fusion используется простой набор жестов, напрямую связанных с пользовательским интерфейсом приложения; реализуется доступ к популярным существующим приложением без использования традиционного или сенсорного интерфейса.

Следующий набор затруднений возник в связи с ограничениями в операционной системе и в браузере. Так, современные веб-браузеры не оптимизированы для многорежимного ввода. Из-за этого затрудняется определение, к примеру, фокуса ввода пользователя, то есть места на экране, с которым пользователь намеревается взаимодействовать. При этом также нарушается плавность перемещения между разными сегментами интерфейса и даже переключения с одного веб-сайта на другой. В то же время стало очевидно, что невозможно просто отказаться от прокрутки и щелчков, эти операции являются основополагающими для рабочего стола, они используются практически во всех современных приложениях.

Более того, для интерфейсов такого типа важна возможность интуитивно включать и отключать управление при помощи жестов. Человек интуитивно понимает, какие жесты являются значимыми и в каких обстоятельствах. Приложению, в отличие от человека, для анализа жестов требуется контекст. В GestureWorks Fusion достаточно поднять руку в поле зрения камеры, чтобы включить интерфейс управления с помощью жестов. Если рука выходит из поля зрения камеры, интерфейс жестов исчезает; такой подход аналогичен отображению дополнительной информации при наведении указателя мыши.

Сам по себе многорежимный ввод связан с определенным проблемами программирования, повлиявшими на архитектуру и реализацию программ Ideum. Например, в приложении Ideum для каждого жеста предусмотрена голосовая команда, из-за чего могут возникать конфликты. «Многорежимный ввод нуждается в тщательной проработке для достижения успеха», — поясняет Лейси.

Не менее важным фактором оказалось и время отклика, оно должно соответствовать уже существующим стандартам, заданным для мышей и клавиатур (в противном случае резко возрастает трудоемкость всех операций для пользователя, которому приходится постоянно корректировать ввод). Это означает, что время отклика должно быть не более 30 мс, а в идеале — 6 мс. Этот показатель Лейси называет «Святым Граалем взаимодействия человека и компьютера».

И наконец, разработчики Ideum столкнулись с проблемой индивидуальной настройки. В приложении GestureWorks Fusion настройка по большей части осуществляется неявно, «за кадром». «Система автоматически адаптируется и изменяется, постепенно повышая удобство работы по мере использования продукта», — поясняет Лейси.

Использование Intel® RealSense™ SDK

Разработчики получают доступ к возможностям камеры Intel RealSense SR300 посредством пакета Intel RealSense SDK, который представляет собой стандартный интерфейс для обширной библиотеки алгоритмов обнаружения и распознавания шаблонов. Эти алгоритмы включают ряд полезных функций, таких как распознавание лица, распознавание жестов и речи, переработку текста в речь.

Система разделена на набор модулей, при помощи которых разработчики могут сосредоточиться на различных аспектах взаимодействия. Некоторые компоненты, такие как интерфейс SenseManager, обеспечивают координацию общих функций, в том числе отслеживание лица и рук, и управляют конвейером многорежимного управления, включая управление вводом-выводом и обработкой. Прочие элементы, такие как интерфейсы Capture и Image, позволяют разработчикам отслеживать работу камеры и работать с отснятыми изображениями. Интерфейсы HandModule, FaceModule и AudioSource предоставляют доступ к отслеживанию лица и рук, к звуковому вводу.

Intel RealSense SDK упрощает интеграцию благодаря поддержке множества стилей и методик написания программного кода. Предусмотрены оболочки для нескольких распространенных языков программирования, платформ и игровых движков, C++, C#, Unity *, Processing и Java. В Intel RealSense SDK также обеспечивается ограниченная поддержка браузерных приложений с JavaScript *. Пакет Intel RealSense SDK упрощает реализацию сложных алгоритмов взаимодействия человека с компьютером; благодаря этому пакету разработчики могут сосредоточиться на повышении удобства пользователей, а не на написании кода алгоритмов распознавания жестов и речи.

«Благодаря решениям Intel значительно снижается стоимость разработки, — отмечает Лейси. — Технологии Intel принимают на себя важную часть работы, они гарантируют ввод и распознавание жестов, что существенно упрощает задачи разработчиков, дает им возможность с уверенностью заниматься новыми проектами по взаимодействию между человеком и компьютером».

Работа над решением

При создании GestureWorks Fusion разработчики Ideum применили ряд новых методик. Рассмотрим, к примеру, проблему определения фокуса пользователя. Для устранения этой проблемы было решено использовать новый режим Cursor, впервые появившийся в Intel RealSense SDK 2016 R1 для Windows. В режиме Cursor доступен быстрый и точный способ отслеживать одну точку, которая соответствует общему положению руки. Благодаря этому система получает возможность поддерживать небольшой набор жестов, таких как щелчки, открытие и закрытие ладони, вращение в любую сторону. В режиме Cursor проблема фокуса пользователя решена: система интерпретирует ввод жестами таким же образом, как ввод мышью.

Using the ingenious Cursor Mode available in the Intel® RealSense™ SDK, developers can easily simulate common desktop actions such as clicking a mouse.
Используя встроенный режим Cursor в Intel® RealSense™ SDK, разработчики могут без труда имитировать распространенные действия по управлению рабочим столом, например щелчок мыши.

Используя эти жесты, пользователи могут с высокой точностью и уверенностью перемещаться в приложении и управлять его работой «на весу», не прикасаясь к клавиатуре, мыши и экрану. Режим Cursor помогает и в других областях. «Мы обнаружили, помимо прочего, что не все жестикулируют одинаково», — заявил Лейси. Режим Cursor помогает сопоставлять схожие жесты с одним и тем же контекстом, что способствует повышению общей надежности работы.

Разработчики также подчеркнули простоту внедрения режима Cursor в существующие прототипы, что позволило выпустить новые версии GestureWorks Fusion всего за несколько часов: потребовалось добавить лишь несколько строк кода. Например, в GestureWorks режим Cursor используется для получения координат изображения указателя и для синтезирования событий мыши, как показано в следующем фрагменте кода.

// Get the cursor image coordinates
PXCMPoint3DF32 position = HandModule.cursor.QueryCursorPointImage();

// Synthesize a mouse movement
mouse_event (
   0x0001,
                                   // MOUSEEVENTF_MOVE
   (uint)(position.x previousPosition.x),     // dx
   (uint)(position.y previousPosition.y),     // dy
   0,
                               // dwData flags empty
   0                                          // dwExtraInfo flags empty
};

...


// Import for calls to unmanaged WIN32 API
[DllImport("user32.dll", CharSet = CharSet.Auto,
   CallingConvention = CallingConvention.StdCall)]

public static extern void mouse_event(uint dwFlags, uint dx, uint dy,
   uint cButtons, int dwExtraInfo);

После этого можно быстро определить, в каком окне находится фокус, с помощью стандартного API Windows.

// Get the handle of the window with focus

IntPtr activeWindow = GetForegroundWindow();

// Create a WINDOWINFO structure object

WINDOWINFO info = new WINDOWINFO(); GetWindowInfo(activeWindow, ref info);

// Get the actiive window text to compare with pre-configured controllers
StringBuilder builder = new StringBuilder(256);
GetWindowText(activeWindow, builder, 256);

...

// Import for calls to unmanaged WIN32 API
[DllImport("user32.dll")]

static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]

static extern int GetWindowText(IntPtr hWnd, StringBuilder builder,
   int count);

В режиме Cursor отслеживание работает вдвое быстрее, чем отслеживании всей руки, при этом вдвое ниже потребление электроэнергии. «Удобство использования — это формирование ожидаемых результатов как можно более предсказуемым образом, — поясняет Лейси. — Когда достигнут очень высокий уровень уверенности в жестах, это позволяет сосредоточиться на доработке других областей взаимодействия с пользователями; это также способствует снижению стоимости разработки и позволяет добиться более значительных результатов, затратив меньше ресурсов».

Для поддержки многорежимного ввода в GestureWorks используется API распознавания речи корпорации Майкрософт (Microsoft SAPI), содержащий компоненты, отсутствующие в Intel RealSense SDK, например частичные гипотезы. Это позволяет сопровождать каждый жест соответствующей голосовой командой, как показано в следующем фрагменте кода.

IspRecognizer* recognizer;
ISpRecoContext* context;

// Initialize SAPI and set the grammar

...


// Create the recognition context
recognizer>CreateRecoContext(&context);

// Create flags for the hypothesis and recognition events
ULONGLONG recognition_event = SPFEI(SPEI_RECOGNITION) |
   SPFEI(SPEI_HYPOTHESIS);

// Inform SAPI about the events to which we want to subscribe context>SetInterest(recognition_event, recognition_event);

// Begin voice recognition
<recognition code …>

Для распознавания намерений пользователей применяется распараллеливание, что позволяет взаимодействовать и предоставлять обратную связь практически одновременно при скорости 60 кадров в секунду. «Эффективное использование многопоточной обработки дало нам возможность снизить время реагирования, — заявляет Лейси. — Многопоточность расширила наши возможности, мы смогли добиться результатов, в осуществимости которых мы даже не были уверены, причем с поддержанием низкого уровня задержек».

Разработчики Ideum также постарались полнее описать и формализовать взаимодействие на основе жестов, разработав расширенный XML-сценарий конфигураци, который назвали языком разметки жестов — Gesture Markup Language (GML). Используя GML, удалось создать полную библиотеку жестов, которую можно использовать для решения проблем взаимодействия между человеком и компьютером. Благодаря этому разработчикам удалось избежать чрезмерной сложности алгоритмов распознавания жестов, поскольку диапазон ввода при отслеживании движений и мультисенсорном управлении может охватывать тысячи разновидностей.

«Влияние многорежимного взаимодействия вместе с камерой Intel RealSense можно описать одним словом: контекст, — отметил Лейси. — Мы получаем возможность распознавать новый уровень контекста, открывающий принципиально новые возможности взаимодействия человека с компьютером».

Дальнейшие действия

Разработчики Ideum планируют развивать GestureWorks Fusion, добавить поддержку дополнительных приложений, в том числе офисных пакетов, графических приложений и систем автоматизированного проектирования, в которых для управления виртуальными объектами будут использоваться трехмерные жесты. Приложение GestureWorks может также работать на планшетах, поддерживающих технологию Intel RealSense, в домашних развлекательных системах и даже в автомобилях, а также вместе с другими технологиями — в решениях, резко отличающихся от традиционных настольных ПК и ноутбуков.

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

«В ходе работы над GestureWorks Fusion нам удалось обнаружить новые способы взаимодействия в современной среде, — поясняет Лейси. — Впрочем, вне зависимости от среды должна быть возможность просто управлять устройством с помощью жестов и речи и выбирать нужные последовательности действий, не сталкиваясь с необходимостью управлять устройством традиционным образом, как компьютером».

Ресурсы

Посетите сайт Intel Developer Zone, чтобы приступить к работе с технологией Intel RealSense.

Узнайте больше о компании Ideum, разработавшей GestureWorks.

Загрузите пакет Intel® RealSense™ SDK по адресу https://software.intel.com/en-us/intel-realsense-sdk .

Intel® Software Guard Extensions, серия учебных материалов: часть 1, Intel® SGX Foundation

$
0
0

Первая часть в серии учебных материалов по Intel® Software Guard Extensions (Intel® SGX)представляет собой краткое описание этой технологии. Дополнительные сведения см. в документации в составе Intel Software Guard Extensions SDK.Список всех учебных материалов в этой серии см. в статье Представляем серию учебных материалов, посвященных Intel® Software Guard Extensions.

Технология Intel® Software Guard Extensions

Программным приложениям зачастую приходится работать с конфиденциальной информацией, например с паролями, номерами счетов, финансовыми данными, ключами шифрования, медицинскими данными. Доступ к этим данным должен быть только у полномочных получателей. В терминологии Intel SGX такая конфиденциальная информация называется «секретом приложения».

Задача операционной системы состоит в применении политики безопасности в компьютере, чтобы эти секреты не были непреднамеренно раскрыты другим пользователям или приложениям. Операционная система не даст пользователю получить доступ к файлам другого пользователя (без предоставленного явным образом разрешения); не даст одному приложению получить доступ к памяти другого приложения; не даст пользователю без необходимых прав получить доступ к ресурсам ОС, исключая строго контролируемые ресурсы. В приложениях часто используются дополнительные защитные меры, например шифрование данных, чтобы исключить доступ третьими сторонами к данным, пересылаемым в хранилище или по сетевому подключению, даже если злоумышленникам удалось получить доступ к ОС и к оборудованию.

Несмотря на все эти защитные меры, в большинстве компьютерных систем все равно остаются уязвимые места. Разнообразные механизмы защищают одно приложение от другого и защищают ОС от пользователя, не имеющего разрешений, но приложения обычно практически никак не защищены от процессов, выполняющихся с более высоким уровнем прав, включая саму ОС. Вредоносные программы, обладающие правами администратора, имеют неограниченный доступ ко всем системным ресурсам и ко всем приложениям, запущенным в системе. Усовершенствованные вредоносные программы могут атаковать защитные механизмы приложения, чтобы извлечь ключи шифрования и даже секретные данные непосредственно из памяти.

Корпорация Intel разработала расширения Intel SGX для высокоуровневой защиты секретов и для защиты от таких программных атак. Intel SGX — это набор инструкций ЦП, дающих возможность приложениям создавать анклавы: защищенные области в адресном пространстве приложения, обеспечивающие конфиденциальность и целостность даже при наличии вредоносных программ с расширенными правами. Код анклавов поддерживается особыми инструкциями, он компилируется и загружается в виде файла библиотеки динамической компоновки Windows * (DLL).

Расширения Intel SGX позволяют снизить уязвимость приложений. На рис. 1 показана значительная разница между потенциальными областями атаки при наличии и при отсутствии анклавов Intel SGX.

Рисунок 1. Области атаки с анклавами и без анклавов Intel® Software Guard Extensions

Как технология расширений Intel Software Guard Extensions помогает защищать данные

Intel SGX обеспечивает следующую защиту от атак, нацеленных на оборудование и программ.

  • Доступ к памяти анклава на чтение и запись извне анклава отсутствует вне зависимости от текущего уровня прав и режима работы ЦП.
  • Анклавы рабочего уровня недоступны для отладки как программными, так и аппаратными отладчиками. (Можно создать анклав с атрибутом отладки, при наличии которого отладчик Intel SGX может просматривать содержимое анклава аналогично стандартному отладчику. Это сделано, чтобы повысить удобство процесса разработки программного обеспечения.)
  • В среду анклава невозможно войти с помощью классических вызовов функций, переходов, манипуляций с регистрами или со стеком. Единственный способ вызвать функцию анклава — с помощью новой инструкции, выполняющей несколько защитных проверок.
  • Память анклава защищена с помощью стандартных алгоритмов шифрования с защитой от воспроизведения. Если прочесть память или подключить модули оперативной памяти к другой системе, удастся получить только зашифрованные данные (см. рис. 2).
  • Ключ шифрования памяти изменяется случайным образом при каждом изменении цикла электропитания (например, при загрузке, при возобновлении работы после сна и гибернации). Ключ хранится внутри ЦП и недоступен извне.
  • Данные изолированы в анклавах и доступны только для кода данного анклава.

Размер защищенной области памяти строго ограничен и задан BIOS системы. Обычно это 64 МБ или 128 МБ. Некоторые производители систем предоставляют возможность настраивать это значение в BIOS. В зависимости от размера каждого анклава в памяти одновременно может быть создано от 5 до 20 анклавов.

Рисунок 2. Защита данных в анклавах Intel® Software Guard Extensions в защищенных приложениях

Как это устроено

Для использования Intel SGX приложение должно быть разделено на два компонента (см. рис. 3).

  • Доверенный компонент. Это анклав. Код в доверенном компоненте получает доступ к секретам приложения. У одного приложения может быть несколько доверенных компонентов/анклавов.
  • Недоверенный компонент.Это остальная часть приложения, любые его модули. Следует отметить, что с точки зрения анклава и ОС, и VMM считаются недоверенными компонентами.

Доверенный компонент должен быть как можно меньше, в нем должны быть лишь те данные, которые нуждаются в наиболее надежной защите, и операции, работающие непосредственно с этими данными. Крупный анклав со сложным интефейсом не только потребляет больше защищенной памяти, но и повышает уязвимость.

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

Рисунок 3. Выполнение приложения Intel® Software Guard Extensions

Аттестация

В архитектуре SGX аттестация — это подтверждение создания определенного анклава на платформе. Существует два механизма аттестации.

  • Локальная аттестация происходит, когда два анклава, находящиеся на одной и той же платформе, выполняют взаимную проверку подлинности.
  • Удаленная аттестация происходит, когда доверенность анклава проверяется удаленным поставщиком.

Локальная аттестация

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

Один анклав не может получить доступ к защищенному пространству памяти другого анклава, даже если оба анклава созданы одним и тем же приложением, поэтому необходимо убрать из всех указателей ссылки на их значения и скопировать; полный набор данных должен быть передан из одного анклава в другой.

Удаленная аттестация

При удаленной аттестации программные расширения Intel SGX и оборудование платформы формируют предложение, которое передаются на сторонний сервер для установления доверия. Программное обеспечение включает анклав приложения, а также компонент Quoting Enclave (QE) и Provisioning Enclave (PvE), предоставляемые корпорацией Intel. Оборудование для аттестации — ЦП, поддерживающий Intel SGX. Сводка программной информации в сочетании с уникальным для платформы асимметричным ключом оборудования используются для формирования предложения, которое передается на удаленный сервер по проверенному каналу. Если удаленный сервер определяет, что экземпляр анклава был создан правильно и запущен на процессоре, поддерживающем Intel SGX, то сервер устанавливает доверительные отношения и передает секреты по проверенному каналу.

Запечатывание данных

Запечатывание данных — это шифрование данных, чтобы можно было записывать их в недоверенную память или хранилище, не раскрывая содержимое. Эта данные могут быть позже прочитаны анклавом и распечатаны (расшифрованы). Ключи шифрования создаются внутри по запросу и не раскрываются для анклава.

Существует два способа запечатывания данных.

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

Запечатывание с удостоверением анклава

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

Запечатывание с удостоверением запечатывания

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

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

Как мы будем использовать технологию Intel Software Guard Extensions в учебном руководстве

Мы рассмотрели три важнейших компонента Intel SGX: анклавы, аттестацию и запечатывание. В этом учебном руководстве мы сосредоточимся на реализации анклавов, поскольку это основа Intel SGX. Невозможно провести аттестацию или запечатывание, не создав анклав. Кроме того, это позволит ограничить размер учебного руководства.

В дальнейших выпусках

Во второй части серии учебных материалов Расширения Intel® Software Guard Extensions: часть 2, создание приложений, мы рассмотрим диспетчер паролей, который будет создан с поддержкой Intel SGX. Мы опишем требования к созданию этого приложения, ограничения и пользовательский интерфейс. Следите за новостями.

Список всех учебных материалов в этой серии см. в статье Представляем серию учебных материалов, посвященных Intel® Software Guard Extensions.

 

Настройка и использование ограничения скорости для Open vSwitch* с DPDK

$
0
0

В этой статье описывается настройка ограничения скорости входящего трафика для интерфейса Data Plane Development Kit (DPDK)в Open vSwitch* (OVS)с DPDK. Эта статья предназначена для сетевых администраторов, которые могут использовать ограничение скорости Open vSwitch, чтобы обеспечить гарантированную скорость приема для портов DPDK на развернутых серверах Open vSwitch. Эта статья дополняет статью Настройка и использование качества обслуживания для Open vSwitch* с DPDK, поскольку ограничение скорости и качество обслуживания действуют соответственно в трактах приема и передачи, используя уникальные команды API для настройки и работы.

Примечание. На момент написания этой статьи ограничение скорости OVS с DPDK было доступно только в основной ветви OVS. Загрузить ZIP-архив основной ветви OVS можно здесь. Действия по установке OVS с DPDK описаны здесь.

Ограничение скорости в OVS с DPDK

Перед настройкой ограничения скорости следует рассказать об отличиях от качества обслуживания и о взаимодействии с трафиком в vSwitch.

Качество обслуживания применяется к исходящему трафику, то есть к данным, передаваемым из порта OVS. Ограничение скорости, напротив, действует только для входящего трафика, то есть для данных, принимаемых портом vSwitch. Ограничение скорости реализовано в OVS с DPDK с помощью ограничителя входящего трафика (аналогичного ограничителю исходящего трафика для качества обслуживания, поддерживаемого в OVS с DPDK). Ограничитель входящего трафика начинает просто отбрасывать пакеты после превышения определенной скорости приема в интерфейсе (алгоритм буфера маркеров). Для физического устройства ограничитель входящего трафика будет отбрасывать трафик, поступающий извне системы через сетевой адаптер. Для виртуального интерфейса, то есть порта vhost-user DPDK, ограничитель будет отбрасывать трафик, передаваемый с гостевой машины на vSwitch. По сути, ограничивается скорость передачи данных с гостевой машины на этот порт. Это показано на рис. 1.


Рис. 1. Ограничение скорости с помощью ограничения входящего трафика для порта vhost-user

Тестовая среда


Рис. 2. Тестовая среда

Примечание. И главный компьютер, и виртуальные машины (ВМ), используемые в этой среде, работают под управлением 64-разрядной версии Fedora* 23 Server 64-bitс ядром Linux* 4.4.6. Каждая ВМ имеет виртуальный сетевой адаптер, подключенный к мосту vSwitch через интерфейс vhost-user DPDK. Виртуальный сетевой адаптер отображается в качестве устройства ядра Linux (например, ens0) в операционной системе виртуальной машины. Убедитесь, что между виртуальными машинами есть подключение (например, отправьте эхо-запрос к ВМ2 с ВМ1).

Настройка и тестирование ограничения скорости

Для тестирования настройки установите iPerf*на обе ВМ. Убедитесь в том, что версия rpm соответствует версии гостевой ОС. В данном случае следует использовать 64-разрядную версию Fedora. Если используется диспетчер пакетов, например dnf в Fedora 23, то можно автоматически установить iPerf с помощью следующей команды:

dnf install iperf

Для проверки настройки убедитесь, что iPerf установлен на обе виртуальные машины. iPerf можно запускать в режиме клиента и в режиме сервера. В этом примере мы запустим клиент iPerf на ВМ1 и сервер iPerf на ВМ2.

Тест без ограничителя входящего трафика

На ВМ2 выполните следующую команду, чтобы развернуть сервер iPerf в режиме UDP на порту 8080:

iperf –s –u –p 8080

На ВМ1 выполните следующую команду, чтобы развернуть клиент iPerf в режиме UDP на порту 8080 с пропускной скоростью передачи данных 100 Мбит/с:

iperf -c 7.7.7.2 -u -p 8080 -b 100m

В этом случае ВМ1 будет пытаться передавать данные на ВМ2 по протоколу UDP со скоростью 100 Мбит/с. Через 10 секунд проявится набор значений. Выполните эти команды до настройки ограничения скорости. Вы увидите результаты, аналогичные показанным на рис. 3. В отчете сервера нас интересует столбец Bandwidth (пропускная способность).


Рис. 3. Выходные данные без ограничения входящего трафика

Данные, показанные на рис. 3, свидетельствуют о том, что пропускная способность подключения между виртуальными машинами составляет 100 Мбит/с.

Тест с настроенным ограничителем входящего трафика

Теперь настроим ограничение скорости с помощью ограничителя входящего трафика vhost-user1 до 10 Мбит/с, используя следующую команду:

ovs-vsctl set interface vhost-user1 ingress_policing_rate=10000
ingress_policing_burst=1000

Параметры описаны ниже.

  • ingress_policing_rate: максимальная скорость (Кбит/с), разрешенная для этой виртуальной машины. Это значение обязательно для создания ограничителя входящего трафика. Если значение не указано, существующая настройка ограничения скорости останется без изменений.
  • ingress_policing_burst: размер буфера маркеров в килобайтах. Минимальное значение этого параметра должно быть равно наибольшему предполагаемому размеру пакета. Если значение не указано, используется значение по умолчанию, равное 8000 КБ.

Если снова запустить тест пропускной способности UDP iPerf, результаты будут схожи с показанными на рис. 4.


Рис. 4. Выходные данные с ограничением входящего трафика

Обратите внимание, что теперь, при настроенном ограничителе трафика, доступная пропускная способность составляет 9,59 Мбит/с, а не 100 Мбит/с. Программа iPerf отправила трафик по протоколу UDP с клиента ВМ1 на сервер ВМ2 со скоростью 100 Мбит/с, но скорость трафика была снижена, поскольку на входящем тракте портов vhost-user1 vSwitch действует ограничитель входящего трафика. За счет этого скорость трафика, передаваемого с клиента iPerf ВМ1, была снижена приблизительно до 10 Мбит/с.

Отметим, что если используется трафик TCP, то значение параметра ingress_policing_burst должно составлять существенную долю значения параметра ingress_policing_rate; рекомендуется, чтобы оно превышало 10 %. Это обусловлено снижением производительности протокола TCP при отбрасывании пакетов и возникновением проблем с повторной передачей пакетов.

Существующую настройку ограничения скорости для vhost-user1 можно получить с помощью следующей команды:

ovs-vsctl list interface vhost-user1

Чтобы отменить ограничения скорости трафика vhost-user1, установите для параметра ingress_policing_rate значение 0, как показано ниже (настраивать значение параметра ingress_policing_burst не нужно):

ovs-vsctl set interface vhost-user1 ingress_policing_rate=0

Заключение

В этой статье мы показали простой пример, в котором трафик передается между двумя виртуальными машинами через Open vSwitch* с DPDK с настроенным ограничителем входящего трафика. Мы продемонстрировали команды для настройки ограничения скорости для заданного порта DPDK, для получения сведений о текущей настройке ограничения скорости и для отмены ограничения скорости.

Дополнительные сведения

Дополнительные сведения об использовании ограничения скорости, параметрах и многом другом см. в разделах, посвященных ограничению скорости, в vswitch.xmlи ovs-vswitchd.conf.db.

Есть вопрос? Запросы относительно Open vSwitch можно отправлять в почтовое обсуждение.

Дополнительные сведения об Open vSwitch* с DPDK см. в следующих видеороликах и статьях на сайтах Intel® Developer Zone и Intel® Network Builders University.

Настройка и использование качества обслуживания для Open vSwitch* с DPDK

Open vSwitch* с DPDK: подробное описание архитектуры

DPDK Open vSwitch*: ускорение подключения к гостевой системе

Об авторе

Иэн Стокс (Ian Stokes) — инженер по программному обеспечению корпорации Intel. Его деятельность в основном посвящена ускорению работы программных коммутационных решений в пользовательском пространстве в системах с архитектурой Intel®. В области Open vSwitch* с DPDK он занимался разработкой API качества обслуживания OVS DPDK, а также ограничителями исходящего и входящего трафика.

Приступая к работе с технологией Intel® Active Management (AMT)

$
0
0

Введение

Этот документ содержит информацию о том, как приступить к работе с технологией Intel® Active Management (Intel® AMT). Здесь содержится обзор возможностей этой технологии, информация о требованиях к системе, конфигурации клиента Intel AMT, а также средства разработки, доступные для создания приложений, поддерживающих Intel AMT.

Intel AMT поддерживает удаленные приложения, работающие под управлением Microsoft Windows * или Linux *. Intel AMT 2.0 или более поздней версии поддерживает только локальные приложения для Windows. Полный перечень требований к системе см. в руководстве по внедрению и справочном руководстве Intel AMT.

Приступая к работе

Для удаленного управления клиентом Intel AMT или для запуска примеров из SDK следует использовать отдельную систему для удаленного управления устройством Intel AMT. Дополнительные сведения см. в руководстве по внедрению и в справочном руководстве Intel AMT, находящемся в папке Docs в пакете Intel AMT SDK.

Что такое Intel® Active Management?

Intel AMT входит в состав пакета решений Intel® vPro™. Если платформа поддерживает Intel AMT, то такими платформами можно удаленно управлять вне зависимости от состояния электропитания и от наличия или отсутствия действующей ОС.

В основе системы Intel AMT находится ядро Converged Security and Manageability Engine (CSME). Intel AMT является компонентом Intel® vPro™ и использует ряд элементов архитектуры платформы Intel vPro. На рис. 1 показаны взаимоотношения между этими элементами.


Рисунок 1.Архитектура технологии Intel® Active Management 11

Обратите внимание на сетевое подключение, связанное с Intel® Management Engine (Intel® ME). Используемый адаптер различается в зависимости от используемой версии Intel AMT.

  • Микропрограмма CSME содержит функциональность Intel AMT.
  • Во флеш-памяти хранится образ микропрограммы.
  • Для поддержки возможностей Intel AMT можно использовать ядро CSME, реализованное ОЕМ-производителем платформы. Удаленное приложение осуществляет установку и настройку корпоративной системы.
  • После включения микропрограмма копируется в оперативную память.
  • Микропрограмма выполняется на процессоре Intel® с Intel ME и использует небольшую часть оперативной памяти (разъем 0) для хранения данных при выполнении. Поэтому для работы микропрограммы необходимо, чтобы в разъеме 0 был установлен модуль оперативной памяти и чтобы этот разъем был включен.

Intel AMT хранит следующую информацию во флеш-памяти (данные Intel ME).

  • Параметры, настраиваемые OEM-производителем
    • Параметры настройки, например пароли, конфигурация сети, сертификаты и списки управления доступом.
    • Прочие данные конфигурации, например списки оповещений и политики защиты системы Intel AMT.
    • Конфигурация оборудования, определенная в BIOS при запуске компьютера.
  • • Сведения о платформах 2016 года, поддерживающих технологию Intel vPro (выпуск 11.x)
    • Технологический процесс 14-нм
    • Платформа (мобильные устройства и настольные компьютеры): Процессор Intel® Core™ 6-го поколения
    • ЦП: SkyLake
    • Узел контроллера платформы: Sunrise Point

Новые возможности SDK Intel® Active Management Technology версии 11.0

  • CSME — новая архитектура Intel AMT 11. До Intel AMT 11 ядро CSME называлось Intel® Management Engine BIOS Extension (Intel® MEBx).
  • Файлы MOFs и XSL: файлы MOFs и XSL в папке \DOCS\WS-Management и справочные материалы по классам в документации относятся к версии 11.0.0.1139.
  • Новые поля событий WS и аргументов PET: дополнительные аргументы, добавленные к оповещениям CILA, предоставляют код причины для подключения пользовательского интерфейса и имя хоста устройства, выдавшего оповещение.
  • Обновленная версия OpenSSL *: Версия OpenSSL — v1.0. Также обновлена библиотека перенаправления.
  • Обновленная версия Xerces: в Windows и в Linux используется библиотека Xerces версии 3.1.2.
  • Поддержка HTTPS для событий WS: поддерживается безопасная подписка на события WS.
  • Удаленное безопасное стирание через параметры загрузки Intel AMT: среди параметров загрузки Intel AMT есть возможность безопасно удалить все данные с основного устройства хранения данных.
  • Подписание DLL-библиотек с помощью строгого имени: следующие библиотеки DLL теперь подписаны с помощью строгого имени: CIMFramework.dll, CIMFrameworkUntyped.dll, DotNetWSManClient.dll, IWSManClient.dll и Intel.Wsman.Scripting.dll.
  • HECI и модули наблюдения за наличием агентов включают автоматическую перезагрузку платформы: возможность автоматически включить перезагрузку всякий раз, когда HECI или модули наблюдения за наличием агентов сообщают о том, что срок действия агента истек.
  • Замена протокола перенаправления хранилища IDE-R: перенаправление хранилища работает по протоколу USB-R вместо протокола IDE-R.
  • Обновление SHA: сертификаты SHA1 упразднены, вместо них применена серия сертификатов SHA256.

Настройка клиента Intel® AMT

Подготовка клиента Intel® AMT к использованию

На рис. 2 показаны этапы настройки устройства Intel AMT перед его использованием.


Рисунок 2. Ход настройки

Перед настройкой устройства Intel AMT в приложении Setup and Configuration Application (SCA) его необходимо подготовить, получив начальную информацию, и перевести в режим установки. Начальная информация будет различаться в зависимости от доступных компонентов выпуска Intel AMT и от настроек платформы, примененных ОЕМ-производителем. В таблице 1 приведены методики установки и настройки для разных версий Intel AMT.

Методика установкиПрименимость к версиям Intel® AMTДополнительные сведения
Традиционный режим1.0; версии 2.x и 3.x в традиционном режимеУстановка и настройка в традиционном режиме
SMB2.x, 3.x, 4.x, 5.xУстановка и настройка в режиме SMB
PSKС версии 2.0 до Intel AMT 10, упразднено в Intel AMT 11Установка и настройка с помощью PSK
PKI2.2, 2.6, 3.0 и более поздних версийУстановка и настройка с помощью PKI (удаленная настройка)
Вручную6.0 и более поздних версийУстановка и настройка вручную (с версии 6.0)
CCM, ACM7.0 и более поздних версий

Режим управления клиента и режим управления администратора

Настройка клиентов вручную для Intel AMT 7.0 и более поздних версий

Таблица 1. Способы установки в зависимости от версии Intel® AMT

Программное обеспечение Intel® Setup and Configuration Software (Intel® SCS) 11 можно использовать для подготовки систем ранних версий вплоть до Intel AMT 2.x. Дополнительные сведения о программе Intel SCS и уровнях подготовки, доступных для разных версий Intel AMT, см. на сайте Загрузить последнюю версию службы Intel® Setup and Configuration Service (Intel® SCS).

Советы по настройке вручную

При настройке платформы вручную, начиная с версии 6.0, нет ограничений по компонентам, но следует учитывать определенные особенности поведения системы.

  • Методы API не возвратят состояние PT_STATUS_INVALID_MODE, поскольку доступен только один режим.
  • По умолчанию протокол TLS отключен, его необходимо включить при настройке. Так будет всегда при настройке вручную, поскольку невозможно задать параметры TLS локально.
  • Локальные часы платформы будут использоваться до тех пор, пока не будет удаленно задано время по сети. Автоматическая настройка не будет успешно выполнена, если не задано сетевое время (а это можно сделать только после настройки TLS или Kerberos *). Включение TLS или Kerberos после настройки не будет работать, если не было задано сетевое время.
  • Пользовательский веб-интерфейс включен в системе по умолчанию.
  • Система по умолчанию включает SOL и IDE-R.
  • Система отключает прослушиватель перенаправления по умолчанию в Intel AMT, начиная с версии 10.
  • Если включить KVM локально через CSME, оно все равно не будет работать, пока администратор не активирует его удаленно.

Начиная с Intel AMT 10, некоторые устройства поставляются без физического сетевого адаптера. Эти устройства невозможно настроить с помощью существующих USB-решений в составе Intel SCS 11.

Установка вручную

При включении платформа Intel AMT отображает экран запуска BIOS, затем обрабатывает MEBx. В ходе этого процесса можно получить доступ к Intel MEBX, но такой подход зависит от производителя BIOS. Некоторые возможные методы:

  • Большинство производителей BIOS добавляют возможность входа в CSME в меню однократной загрузки. Нажмите соответствующие клавиши (обычно используется сочетание клавиш Ctrl + P) и следуйте подсказкам на экране.
  • На некоторых ОЕМ-платформах на экране появляется предложение нажать клавиши после процедуры пусковой самопроверки. При нажатии сочетания клавиш управление переходит в главное меню Intel MEBx (CSME).
  • Некоторые ОЕМ-производители встраивают настройку CSME в BIOS (но такой подход применяется относительно редко).
  • Некоторые ОЕМ-производители предусматривают в BIOS возможность отобразить или скрыть предложение, нажав , поэтому. если в меню однократной загрузки соответствующая команда отсутствует, проверьте наличие в BIOS возможности включить подсказку.

Режим управления клиента и режим управления администратора

После установки устройства с Intel AMT 7.0 или более поздней версии переходят в один из двух режимов управления.

  • Режим управления клиента. Intel AMT входит в этот режим после проведения простой настройки на базе хоста (см. «Настройка на базе хостов (локальная)»). В этом режиме функциональность Intel AMT ограничена, поскольку для настройки на базе хоста достаточно более низкого уровня доверия.
  • Режим управления администратора. После удаленной настройки, настройки с помощью USB или настройки вручную с помощью CSME Intel AMT переходит в режим управления администратора.

Также существует способ настройки, включающий процедуру изменения режима: с режима клиента на режим администратора. Эта процедура исходит из того, что устройство Intel AMT находится в режиме управления клиента, и переключает устройство в режим управления администратора.

В режиме управления администратора функциональность Intel AMT не имеет ограничений. Это связано с более высоким уровнем доверия при таком методе установки.

Ограничения режима управления клиента

По завершении простой настройки на основе хоста платформа переходит в режим управления клиента, в котором действуют следующие ограничения.

  • Функция защиты системы недоступна.
  • Действия перенаправления (IDE-R и KVM, исключая запуск сеанса SOL) и изменения параметров загрузки (включая загрузку SOL) требуют дополнительного согласия пользователя. В этом режиме сотрудники удаленной службы ИТ-поддержки по-прежнему могут устранять неполадки в системах конечных пользователей с помощью Intel AMT.
  • Если назначен аудитор, то права аудитора не требуются для отмены подготовки.
  • Ряд функций заблокирован, чтобы предотвратить доступ недоверенного пользователя к платформе.

Настройка клиента Intel AMT 11.0 вручную

При включении платформы Intel AMT отображается начальный экран BIOS, затем обрабатываются расширения BIOS. Вход в расширение Intel AMT в BIOS зависит от производителя BIOS.

При использовании эталонной платформы Intel AMT (SDS или SDP) на экране появляется приглашение нажать клавиши . После этого управление переходит в главное меню CSME.

В системах ОЕМ-производителей можно использовать меню однократной загрузки, а вход в CSME обычно является одним из вариантов загрузки в этом меню. Конкретные сочетания клавиш могут различаться в зависимости от ОЕМ-производителя, типа BIOS и модели.

Настройка клиентов Intel® AMT 11.0 вручную с подключением только по Wi-Fi *

У многих систем уже нет физического разъема для подключения к проводной локальной сети. Можно настроить и активировать Intel ME, затем использовать веб-интерфейс или какой-нибудь другой способ для настройки параметров беспроводного подключения.

  1. 1. Измените пароль по умолчанию, задав новое значение (это требуется для продолжения). Новое значение должно быть стойким паролем. Оно должно содержать по крайней мере одну заглавную букву, одну строчную букву, одну цифру и один специальный символ, а его длина должна составлять не менее восьми символов.
    1. Войдите в CSME при запуске.
    2. Введите пароль по умолчанию (admin).
    3. Введите и подтвердите новый пароль.
  2. Выберите «Настройка Intel AMT».
  3. Убедитесь, что установлен флажок «Выбор компонентов управления».
  4. Выберите «Включить доступ к сети».
  5. Выберите «Y», чтобы подтвердить включение интерфейса.
  6. Выберите «Настройка сети».
  7. Выберите настройку сетевых имен Intel® ME.
    1. Введите имя узла.
    2. Введите имя домена.
  8. Выберите «Согласие пользователя».
    1. По умолчанию задано «Только KVM». Можно выбрать «Нет» или «Все».
  9. Выйдите из CSME.
  10. Настройте беспроводное подключение с помощью синхронизации драйверов беспроводной сети ProSet, веб-интерфейса или другим способом.

Настройка клиентов Intel® AMT 11.0 вручную с подключением по локальной сети

Введите пароль CSME по умолчанию (admin).

Измените пароль по умолчанию (требуется для продолжения). Новое значение должно быть стойким паролем. Оно должно содержать по крайней мере одну заглавную букву, одну строчную букву, одну цифру и один специальный символ, а его длина должна составлять не менее восьми символов. С помощью консоли управления можно изменить пароль Intel AMT, не меняя пароль CSME.

  1. Выберите «Настройка Intel AMT».
  2. Убедитесь, что установлен флажок «Выбор компонентов управления».
  3. Выберите «Включить доступ к сети».
  4. Выберите «Y», чтобы подтвердить включение интерфейса.
  5. Выберите «Настройка сети».
  6. Выберите настройку сетевых имен Intel ME.
    1. Введите имя узла.
    2. Введите имя домена.
  7. Выберите «Согласие пользователя».
    1. По умолчанию задано «Только KVM». Можно выбрать «Нет» или «Все».
  8. Выйдите из CSME.

Доступ к Intel® AMT через веб-интерфейс

Администратор с правами пользователя может устанавливать удаленное подключение к устройству Intel AMT через веб-интерфейс. Для этого нужно ввести URL-адрес устройства. URL-адрес будет различаться в зависимости от того, включен ли протокол TLS.

  • Не TLS — http:// :16992
  • TLS — https:// <только полное доменное имя>:16993

Для подключения без TLS также можно использовать локальное подключение и браузер хоста. Вкачестве IP-адреса можно указать localhost или 127.0.0.1. Пример: http://127.0.0.1:16992.

Требования для поддержки Intel AMT

Помимо правильной настройки BIOS и CSME, требуется совместимый с Intel AMT адаптер беспроводной сети. Для управления ОС хоста с помощью Intel AMT требуются определенные драйверы и службы.

Чтобы убедиться в правильности загрузки драйверов и служб Intel AMT, найдите их в диспетчере устройств и в разделе «Службы» в ОС хоста. Регулярно заходите на сайт ОЕМ-производителя для получения обновленных версий BIOS, микропрограмм и драйверов.

Вот драйверы и службы, которые должны отображаться в ОС хоста.

  • Сетевое подключение Intel® Ethernet i218-LM #
  • Двухдиапазонный адаптер беспроводной сети Intel® AC 8260 или аналогичный #
  • Драйвер интерфейса Intel® Management Engine Interface (Intel® MEI)
  • Драйвер последовательной передачи по локальной сети (SOL)
  • Служба локального управления приложениями Intel® Management and Security Status (Intel® MSS) **
  • Приложение Intel® AMT Management and Security Status **
  • Драйверы HID-устройств (мыши и клавиатуры) ***

* Версии сетевого контроллера и беспроводного интерфейса будут различаться в зависимости от поколения платформы Intel vPro.

** В составе полного пакета драйверов для Intel MEI (набор микросхем).

*** Драйверы HID-устройств необходимы при подключении через Intel AMT KVM. С драйверами по умолчанию обычно не возникает проблем, но мы сталкивались с затруднениями при использовании нестандартных установок ОС. Если подключение установлено к устройству без HID-драйверов, ОС пытается автоматически установить эти драйверы. После установки заново установите подключение KVM.

Примечание. Уровень версии драйверов должен совпадать с уровнем версий микропрограммы и BIOS. Если установлены несовместимые версии, Intel AMT не будет работать с компонентами, которым требуются эти интерфейсы.

Физическое устройство — беспроводное подключение Ethernet

По умолчанию на всех беспроводных платформах Intel vPro будет установлена плата беспроводной сети с поддержкой Intel AMT, например двухдиапазонный адаптер Intel AC 8260. Прочие адаптеры беспроводной сети, отличные от адаптеров Intel, не будут поддерживать возможность беспроводного подключения Intel AMT. При использовании адаптера беспроводной сети, отличного от Intel AC 8260, можно использовать сайт ark.intel.com, чтобы проверить совместимость этого адаптера с Intel AMT.

Требуемое программное обеспечение для Windows

Для удаленного управления драйвера устройств не требуются, но они необходимы для локального обмена данными с микропрограммой. Для функций обнаружения и настройки с помощью ОС требуются драйвер Intel MEI, драйвер SOL, служба LMS и приложение Intel® Management and Security Status (Intel® MSS).

Драйверы устройств — интерфейс Intel® Management Engine Interface

Для подключения к микропрограмме требуется Intel MEI. По умолчанию драйвер Intel MEI автоматически устанавливается из Центра обновления Windows. Уровень версии драйвера Intel MEI должен быть таким же, как у Intel MEBX.

Драйвер Intel MEI отображается в диспетчере устройств в разделе «Системные устройства» под названием Intel® Management Engine Interface.

Драйверы устройств — драйвер последовательной передачи по локальной сети

Драйвер SOL используется в операции перенаправления IDE при подключении удаленного накопителя для компакт-дисков.

Драйвер SOL отображается в диспетчере устройств в разделе «Порты» под названием «Intel® Active Management Technology — SOL (COM3)».


Рисунок 3.Драйвер последовательной передачи по локальной сети

Служба — Intel Active Management Technology LMS Service

Служба Local Manageability Service (LMS) работает локально на устройстве Intel AMT и дает возможность локальным приложениям управления отправлять запросы и получать ответы. Служба LMS отвечает на запросы, отправленные локальному хосту Intel AMT, и отправляет их в Intel® ME с помощью драйвера Intel® MEI. Установщик службы находится в одном пакете с драйверами Intel MEI на веб-сайтах ОЕМ-производителей.

Обратите внимание, что при установке ОС Windows служба Центра обновления Windows устанавливает только драйвер Intel MEI. Службы IMSS и LMS не устанавливаются. Служба LMS обменивается данными из приложения ОС с драйвером Intel MEI. Если служба LMS не установлена, перейдите на веб-сайт ОЕМ-производителя и загрузите драйвер Intel MEI, который обычно находится в категории драйверов для наборов микросхем.


Рисунок 4. Драйвер интерфейса Intel® Management Engine

LMS — это служба Windows, устанавливающаяся на платформу Intel AMT 9.0 или более поздней версии. Ранее, в версиях Intel AMT с 2.5 до 8.1, служба LMS называлась User Notification Service (UNS).

LMS получает набор оповещений от устройства Intel AMT. LMS записывает оповещение в журнал событий приложения Windows. Для просмотра оповещений щелкните правой кнопкой мыши Компьютери выберите Управление компьютером > Системные программы > Просмотр событий > Приложение.

Приложение — Intel® Management and Security Status

Открыть приложение Intel MSS можно с помощью значка в виде синего ключа в области уведомлений Windows.


Рисунок 5.Значок программы Intel® Management and Security Status в области уведомлений

Вкладка «Общие»

На вкладке «Общие» в Intel MSS отображаются состояние компонентов Intel vPro, доступных на данной платформе, и журнал событий. На каждой вкладке приводятся дополнительные сведения.


Рисунок 6.Вкладка «Общие» в Intel® Management and Security Status

Вкладка Intel AMT

Здесь локальный пользователь может проводить операции KVM и перенаправления носителей, использовать запрос справки и просматривать состояние защиты системы.


Рисунок 7.Вкладка Intel AMT в Intel® Management and Security Status

Вкладка «Расширенные»

На вкладке «Расширенные» в Intel MSS отображается более подробная информация о конфигурации и компонентах Intel AMT. На снимке экрана, показанном на рис. 8, видно, что в этой системе настроена технология Intel AMT.


Рисунок 8.Вкладка «Расширенные» в Intel® Management and Security Status

Intel Active Management Technology Software Development Kit (SDK)

В пакете Intel AMT Software Development Kit (SDK)доступны низкоуровневые возможности программирования, поэтому разработчики могут создавать приложения для управления, наиболее полно использующие Intel AMT.

Пакет средств для разработки ПО на основе Intel AMT представляет собой образец кода и набор API-интерфейсов, позволяющих разработчикам просто и быстро добавить в приложения поддержку Intel AMT. В состав SDK также входит полный комплект документации в формате HTML.

Этот пакет средств для разработки ПО поддерживает C++ и C# в операционных системах Microsoft Windows и Linux. Руководство пользователя и файлы Readme в каждом каталоге содержат важную информацию о сборке примеров.

Пакет SDK представляет собой набор папок, которые можно скопировать в любое расположение. При этом следует копировать всю структуру папок, это обусловлено взаимной зависимостью между компонентами. На верхнем уровне находятся три папки: DOCS (содержит документацию для SDK), а также папки с примерами кода для Linux и Windows. Дополнительные сведения о том, как приступить к работе и использовать SDK, см. в руководстве по внедрению и справочном руководстве Intel® AMT.

Как показано на снимке экрана на рис. 9, можно получить дополнительные сведения о требованиях к системе и о сборке примеров кода, ознакомившись с разделом «Использование Intel® AMT SDK» в руководстве по внедрению и справочном руководстве Intel AMT. Документация представлена в сети Intel® Software Network: Пакет средств для разработки ПО на основе Intel® AMT (последний выпуск)


Рисунок 9. Руководство по внедрению и справочное руководство Intel AMT

Прочие ресурсы, посвященные Intel AMT

Руководство по внедрению и справочное руководство Intel AMT
Intel AMT SDK, загружаемый файл
Высокоуровневый API, статьяи загружаемый файл
Intel® Platform Solutions Manager, статьяи загружаемый файл
Модуль Power Shell, загружаемый файл
Руководство для разработчиков приложений KVM
Библиотека перенаправления
API платформы CIM C++
API платформы CIM C#
Поставщик WMI Intel® ME
Проверка состояния системы (NAP)
Примеры использования и проектов

Приложение

В следующей таблице перечислены возможности, поддерживаемые в Intel AMT версий с 8-й по 11-ю.

Описание всех возможностей и компонентов см. в руководстве по внедрению и справочном руководстве Intel® AMT (в разделе «Компоненты Intel AMT».)

КомпонентIntel® Active Management Technology (Intel® AMT) 8Intel AMT 9Intel AMT 10Intel AMT 11
Инвентаризация оборудованияXXXX
Постоянный идентификаторXXXX
Удаленное включение и выключениеXXXX
Перенаправление SOL/IDEXXXX
Управление событиямиXXXX
Сторонние хранилища данныхXXXX
Встроенный веб-серверXXXX
Защита флеш-памятиXXXX
Обновление микропрограммыXXXX
HTTP-дайджест/TLSXXXX
Статические и динамические IP-адресаXXXX
Защита системыXXXX
Наличие агентаXXXX
Политики управления электропитаниемXXXX
КомпонентAMT 8AMT 9AMT 10AMT 11
Взаимная проверка подлинностиXXXX
Kerberos*XXXX
TLS-PSKXXXУпразднено
Значок конфиденциальностиXXXX
Пробуждение по локальной сети Intel® Management EngineXXXX
Удаленная настройкаXXXX
Настройка беспроводной сетиXXXX
EAC 802.1XXXX
Пакеты управления электропитаниемXXXX
Обнаружение средыXXXX
Сфера чтения журнала событийXXXX
Эвристическая защита системыXXXX
Интерфейс WS-MANXXXX
Настройки VLAN для Intel AMTXXXX
Сетевые интерфейсыXXXX
КомпонентAMT 8AMT 9AMT 10AMT 11
Быстрый вызов помощи (CIRA)XXXX
Монитор доступаXXXX
Поддержка Microsoft NAP *XXXX
Поддержка виртуализации для наличия агентаXXXX
ПК-будильникXXXX
Удаленное управление KVMXXXX
Синхронизация профилей беспроводной сетиXXXX
Поддержка протокола IPv6XXXX
Подготовка на базе хостаXXXX
Правильное завершение работыXXXX
API WS-ManagementXXXX
Команды SOAPXУпраздненоУпраздненоУпразднено
Поддержка InstantGo   X
Удаленное безопасное стирание   X

Образец кода Enhanced Photography для камеры Intel® RealSense™ R200

$
0
0

Это перевод исходного содержимого. Он предоставляется для ознакомления, его полнота и точность не гарантируются.

Загрузить примеры кода ZIP 1.07MB

Содержание

Введение

В этом документе и в образце приложения я продемонстрирую использование камеры Intel® RealSense™ R200и функциональности Enhanced Photography, входящей в состав Intel® RealSense™ SDK.

Требования

Требования к оборудованию

  • Процессор Intel® Core™ 4-го поколения (на основе микроархитектуры Haswell)
  • 8 ГБ свободного места на жестком диске
  • Камера Intel RealSense R200
  • Порт USB * 3 для подключения камеры

Требования к программному обеспечению

  • 64-разрядная версия операционной системы Microsoft * 8.1 или более поздней версии
  • Microsoft Visual Studio * 2010–2015 с последней версией пакета обновления
  • Microsoft .NET * 4.0 Framework для разработки на C#
  • Пакет Intel RealSense SDK, который можно загрузить здесь

Примечание. Этот конкретный пример проекта был создан в Visual Studio 2015 с помощью последнего выпуска .NET.

Структура проекта

В этом примере приложения я отделил функциональность Intel RealSense SDK от кода уровня графического пользовательского интерфейса, чтобы разработчикам было удобнее сосредоточиться на функциональности, относящейся к расширенным возможностям съемки Enhanced Photography камеры R200. Для этого я создал следующие классы-оболочки C#.

  • RSStreaming. Оболочка для поточной функциональности Intel RealSense SDK.
  • RSEnhancedPhotography. Оболочка для функциональности Enhanced Photography Intel RealSense SDK.

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

Структура проекта содержит и другие элементы, помимо описанных здесь. Я подробнее разберу все файлы исходного кода и их работы далее в этом документе.

Я создаю собственные события, чтобы продемонстрировать, как в наибольшей возможной степени отделить функциональность Intel RealSense SDK от исходного кода графического пользовательского интерфейса. Такое решение мне представляется более «чистым» по сравнению с передачей целой формы в класс, чтобы этот класс смог получить доступ к свойствам в форме.

Кроме того, имейте в виду, что этот пример приложения вовсе не является эталоном идеального программного кода. Проверок во время выполнения почти нет, отсутствуют блоки try/catch. Я стремился сделать простой и понятный пример с ясным кодом, поэтому старался по возможности избавить код от дополнительных конструкций.

Формы в примере приложения не слишком изящны, но вполне выполняют свою задачу: демонстрируют, как использовать Enhanced Photography.

Структура проекта Visual Studio

На приведенном выше рисунке показано решение в Visual Studio 2015. Различные папки содержат следующее.

  • Forms.Различные формы WinForms, демонстрирующие разные функции Enhanced Photography.
  • Source.Исходный код, распространяемый вместе с проектом.
  • Source\CustomEventArgs.Содержит классы, производные от собственного класса EventArgs.
  • MainForm.CS.Основная форма приложения.

Простая общая схема последовательности

При запуске примера приложения отображается форма FormMain. В этой форме можно начать поточную передачу, нажав кнопку Streaming . Когда эта кнопка нажата, приложение запускает поточную передачу, используя функциональность класса RSStreaming.

Класс RSStreaming постоянно обновляет форму FormMain, вызывая ее внутреннее событие OnNewStreamingSample. Это делается для каждого кадра, поступающего с камеры.

Можно остановить поточную передачу, нажав кнопку Stop Streaming . После этого поточная передача просто прекращается, нет никаких других доступных команд, кроме как снова включить ее. Если же нажать кнопку Photo , данные изображения сохраняются на диск и поточная передача прекращается. После остановки поточной передачи и сохранения фотографии на диске становятся активными кнопки изменения фотографии. С их помощью можно выбрать один из диалогов Enhanced Photography, демонстрирующий возможности, реализованные в этом примере приложения.

Если выбрать одно из диалоговых окон Enhanced Photo, загружается и используется пример изображения, сохраненный на диске. Более подробно это поясняется далее в документе.

Разбор кода

В следующих разделах описываются все приложение и ход его работы, приводится описание различных классов.

Общий обзор файлов исходного кода и формы

Формы

FormDepthEnhance. Демонстрирует использование двух разных параметров качества глубины для показа данных глубины. Пользователь может выбрать низкое или высокое качество.

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

FormDepthRefocus. В этой форме показано, как щелкнуть в любой точке изображения и сделать изображение резким в этом месте, а остальная часть изображения размывается. Можно щелкнуть в любом месте изображения; место щелчка становится новой точкой фокусировки. Можно настроить имитируемую диафрагму объектива камеры, передвигая ползунок.

FormDepthResize. Здесь показана функциональность изменения размера: можно увеличить изображение глубины до размера цветного изображения.

FormMeasure. Здесь показано, как использовать функции измерения Enhanced Photography для получения значений расстояния, точности и достоверности.

FormMain. Это основная форма приложения. В ней пользователь может включить поточную передачу данных с камеры Intel RealSense, остановить поточную передачу и сделать снимок. Затем к полученному снимку можно применять различные функции Enhanced Photography.

Исходный код

RSEnhancedPhotography.CS. Это класс-оболочка, в который заключена вся функциональность Enhanced Photography камер Intel RealSense. Назначение этого класса в том, чтобы отделить как можно больше функций камеры Intel RealSense от уровня графического пользовательского интерфейса. Этот класс использует настраиваемые события для публикации данных в клиентском приложении. Класс RSEnhancedImageArg получает новое изображение, которое необходимо показать.

RSPaintUtil.CS. Это статический вспомогательный класс, использующийся для отрисовки точек щелчков мыши и линий в элементах управления PictureBox на C#.

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

RSStreaming.CS.Это класс-оболочка потока данных с камеры Intel RealSense. Он передает поток данных и публикует событие для клиента. Событие использует класс RSSampleArg для хранения данных, которые будут использоваться клиентом.

RSUtility.CS.Это статический класс, содержащий исходный код. Реализованная в нем функциональность не принадлежит ни к одному определенному классу.

Код Source\CustomEventArgs

RSEnhancedImageArg.Расширяет EventArgs, содержит объект PXCMImage. Этот объект будет содержать изображение, измененное с помощью функциональности Enhanced Photography в составе Intel RealSense SDK. Это изображение отображается в отдельных элементах управления PictureBox WinForms.

RSMeasureArg.CS.Расширяет EventArgs, содержит данные измерения, возвращенные функциональностью Enhanced Photography. Эти данные используются в форме WinForm FormMeasure, чтобы сообщить пользователю данные измерений.

RSSampleArg.CS.Расширяет EventArgs, содержит объект PXCMCapture.Sample. Этот объект содержит последний кадр, снятый камерой. Он используется для поточной передачи данных и для их отображения в форме WinForm FormMain.

Подробный анализ

Теперь я перейду к описанию вспомогательных классов, поддерживающих формы. Я считаю, что лучше узнать, как работает базовый код, а не только сосредоточиться на работе форм. Начнем с первого класса, RSStreaming.

Совсем мелкие подробности, такие как функции получения и задания, я не буду рассматривать, они совершенно понятны. Я не стану описывать и любые другие очевидные вещи..

RSStreaming

RSStreaming — класс-оболочка для поточной передачи Intel RealSense SDK. Этот класс не слишком сложный. Задача — привести простой пример поточной передачи данных с камеры Intel RealSense. Она может передавать поток изображения, а также сделать снимок и передать и то, и другое в клиент с помощью событий.

 

public event EventHandler<RSSampleArg> OnNewStreamingSample;

Как уже было сказано выше в этом документе, я использую события, чтобы отправлять данные клиентскому приложению (в формы). RSStreaming отправляет данные клиенту (в данном случае — в FormMain) с помощью события OnNewStreamingSample. Оно берет один параметр, RSSampleArg, который будет содержать самую последнюю выборку с камеры.

 

public bool Initialized

Флаг простого метода получения, указывающий, был ли инициализирован класс.

 

public bool IsStreaming

Простой флаг получения указывает, что класс в настоящее время ведет поточную передачу данных.

 

public void StartStreaming( )

Общая функция, которую клиент использует для запуска поточной передачи данных с камеры. Проверяет, был ли класс инициализирован должным образом. Если да, то вызывает функцию InitCamera() для инициализации камеры.

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

Мой подход отличается: я использую функцию StreamFrames в PXCMSenseManager. Она заставляет SenseManager запускать свой собственный внутренний поток и отправлять данные с помощью обработки событий. Это осуществляется путем назначения объекта PXCMSenseManager.Handler функции. Подробнее об этом — ниже в описании функции InitCamera().

 

private void InitCamera( )

InitCamera — закрытая функция, инициализирующая камеру и поточную передачу. Сначала мы создаем объекты PXCMSenseManager и PXCMSession. Затем нам нужна информация об устройстве (камере), которую мы получаем с помощью статической функции RSUtility GetDeviceByType(), передавая ей сеанс и нужный тип камеры.

Затем я создаю два объекта PXCMVideoModule.DataDesc, один — для потока цветного изображения, другой — для потока глубины. Затем я настраиваю каждый поток. После настройки потоков я даю PXCMSenseManager команду включить потоки.

Как было сказано в описании функции StartStreaming(), я использую подход на основе событий для управления передачей и получением данных. Для этого я создаю и инициализирую объект обработчика событий PXCMSenseManager.Handler и назначаю его функции OnNewSample. Каждый раз, когда камера снимает новый кадр, вызывается обработчик событий OnNewSample.

Затем я инициализирую SenseManager, отправляю его в объекте обработчика и даю команду использовать этот объект и его обработчик событий.

 

private pxcmStatus OnNewSample( int mid, PXCMCapture.Sample sample )

OnNewSample — обработчик событий для объекта PXCMSenseManager.Handler.

 

Параметры

  • Mid.Идентификатор потока. Если с помощью функции EnableVideoStream[s] запрошено несколько потоков, то это PXCCapture.CUID+0 или PXCCapture.CUID+1...
  • PXCMCapture.Sample. Образец изображения с камеры.

Когда эта функция вызывается, я получаю изображение из аргумента Sample и помещаю его в новый объект RSSampleArg, затем вызываю событие OnNewStreamingSample для этого класса. После этого событие уведомляет клиент FormMainо том, что новое изображение готово к показу.

Высвобождаем кадр и возвращаем нужный pxcmStatus, который в данном случае не используется.

 

public void StopStreaming( )

Прекращает поточную передачу, закрывая потоки и вызывая Dispose().

 

private void Dispose( )

Высвобождает ресурсы для сборки мусора.

 

RSEnhancedPhotography

Класс RSEnhancedPhotography был создан с целью заключить всю функциональность Enhanced Photography в один удобный для использования класс. Он работает по принципу событий. После обработки изображения создается событие, возвращающее только что созданное изображение или данные измерения клиентскому приложению или классу.

 

public RSEnhancedPhotography( PXCMPhoto photo )

Конструктор инициализирует некоторые глобальные переменные, используемые в классе. Единственный входной параметр — исходная фотография, снятая в главной форме. Он полностью инициализирован с данными изображения и используется для инициализации локального объекта _colorPhoto.

 

public void Dispose( )

Высвобождает память для сборщика мусора.

 

public void SendOriginalImage( )

Возвращает исходное изображение вызывающему приложению с помощью события OnImageProcessed.

 

public void MeasurePoints( RSPoints points )

MeasurePoints получает заполненный объект RSPoints. Сначала я проверяю, что в этом объекте действительно есть две точки: начальная и конечная. После этой проверки создается объект MeasureData, который отравляется в объекты PXCMEnhancedPhoto функции MeasureDistance.

Затем я беру данные из наполненного объекта measureData и наполняю объект RSMeasureArg. Обратите внимание на параметр (mesaureData.distance/10), преобразующий значение в сантиметры. После наполнения объекта arg я отправляю его клиенту посредством события OnImageMeasured.

 

public void RefocusOnPoint( RSPoints point, float aperture = 50 )

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

RefocusOnPoint работает точно так же. Эта функция дает возможность менять точку фокусировки на изображении.

Разумеется, для настроек настоящей диафрагмы не подойдут значения в диапазоне от 0 до 100, но для нашего примера они вполне сгодятся. Если хотите, преобразуйте их в соответствующие значения шкалы диафрагмы и отправьте мне обновленный код.

RefocusOnPoint использует функцию DepthRefocus класса PXCMEnhancedPhotos для создания нового изображения с новым фокусом глубины, используя исходную цветную фотографию, точку, в которой зафиксирован щелчок пользователя, и значение диафрагмы. Получив PXCMPhoto, я получаю исходное изображение, вызвав QueryReferenceImage() и предоставив PXCMImage экземпляру RSEnahncedImageArg. После этого нужно лишь передать его обратно клиентскому приложению с помощью события OnImageProcessed.

 

public void DepthEnhancement( PXCMEnhancedPhoto.DepthFillQuality quality )

Улучшает или изменяет качество глубины изображения между двумя значениями: высоким или низким. Качество указывается параметром DepthFillQuality.

Сначала нужно инициализировать локальное изображение PXCMPhoto, вызвав функцию EnhanceDepth в PXCMEnhancedPhoto, предоставив исходное изображение PXCMPhoto и нужное качество.

Затем, чтобы инициализировать PXCMImage, я использую QueryDepthImage в enhancedPhoto, чтобы получить только что созданное изображение глубины.

После этого я создаю новый объект RSEnhancedImageArg для отправки клиенту с помощью OnImageProcessed.

 

public void DepthResize( )

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

Сначала мне нужна информация о размере с цветной фотографии. Для этого я запрашиваю исходный объект PXCMPhoto, указанный в конструкторе. Затем я создаю экземпляр объекта PhotoUtils, содержащего функцию DepthResize. Получив размер исходного изображения, я сохраняю значения ширины и высоты в требуемом объекте PXCMSizeI32.

Далее следует несложный процесс: нужно дать PXCMEnhancedPhoto команду на изменение размера изображения, вызвав функцию DepthResize и указав объект PXCMPhoto и нужный размер.

После изменения размера все происходит обычным образом. Создаем изображение, опросив enhancedPhoto, наполняем RSEnhancedArg и отправляем его клиенту с помощью OnImageProcessed.

 

public void PastOnPlane( RSPoints points )

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

Сначала нужно убедиться в наличии двух допустимых точек, это необходимо для функциональности.

Затем загружаем изображение, которое нужно вставить, с помощью функции LoadBitmap в RSUtility.

Основным объектом для этого является класс PXCMEnhancedPhoto.Paster. Это новый класс в выпуске R5. В классе Paster есть функция PasteOnPlane, которая раньше была в классе PXCMEnhancedPhoto, а теперь перемещена в этот новый класс.

В этой функции я проверяю, что значение, возвращенное из PastOnPlane, отлично от null. Дело в том, что у нас нет гарантии, что функции PasteOnPlane удалось успешно выполнить действие. Например, если поверхность между двумя точками не плоская, функция не сработает нужным образом. Я просто хочу убедиться в том, что не использую объект null.

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

 

RSUtility

RSUtility — статический вспомогательный класс, содержащий функциональность, не относящуюся ни к каким прочим классам.

public static PXCMCapture.DeviceInfo GetDeviceByType( PXCMSession session, PXCMCapture.DeviceModel deviceType )

Это вспомогательная функция, предназначенная для получения подробной информации об устройстве, в данном случае — о камере R200. Эта функциональность продемонстрирована во множестве примеров RealSense.

Сначала мы задаем фильтр, указав, что нам нужен датчик в качестве основной группы, затем в качестве подгруппы мы указываем датчик видеозаписи.

В одной системе может быть несколько устройств, поэтому необходимо последовательно пройти все возможные устройства. Для каждой итерации я наполняю текущие данные PXCMSession.ImplDesc в объекте currentGroup. Если нет ошибки, переходим к следующему шагу, на котором наполняем объект PXCMCapture.

Подготовив объект PXCMCapture, я перебираю различные устройства, подключенные к этому объекту. Проверяю, совпадает ли информация о текущем устройстве с нужной нам камерой. Если да, цикл прерывается. Если нет, переходим к информации о следующем устройстве, подключенном к PXCMCapture, пока не будут проверены все устройства.

Когда устройство найдено, мы возвращаем его клиенту, которым в данном случае является объект RSStreaming.

 

public static Bitmap ToRGBBitmap( PXCMCapture.Sample sample )

Полиморфная функция просто вызывает ToRGBBitmap(изображение PXCMImage), передавая ему изображение примера аргумента.

 

public static Bitmap ToRGBBitmap( PXCMImage image )

Простая функция, использующая функциональность объектов PXCMImage для получения растровых данных с помощью объекта PXCMImage.ImageData. Данные извлекаются, сохраняются в растровом объекте .NET и возвращаются клиенту.

 

public static PXCMImage LoadBitmap( PXCMSession session )

Эта функция используется для поддержки PasteOnPlanes. Она загружает заранее заданный растровый рисунок в объект PXCMImage и возвращает его клиенту.

Сначала она получает путь к файлу и проверяет наличие файла. Если его нет, она возвращает значение null. Если файл существует, она создает новый растровый объект .NET, загружая его из файла.

Объект PXCMImage.ImageInfo используется для хранения базовой информации о растровом рисунке. Он используется при создании объекта PXCMImage. Это спецификации изображения, которое мы создадим.

Затем нам нужен объект PXCMImage.ImageData, содержащий данные фактического растрового рисунка. Объект .NET BitmapData создается и инициализируется с данными, описывающими формат и структуру нужных нам данных.

Дополнительные сведения о работе Bitmap.Lockbits см. по адресу https://msdn.microsoft.com/en-us/library/5ey6h79d(v=vs.110).aspx.

Объект PXCMImage высвобождает доступ к данным изображения, чтобы освободить использованную память; растровое изображение разблокируется, PXCMImage возвращается клиенту.

 

public static int GetDepthAtClickPoint( PXCMPhoto photo, PXCMPointI32 point )

Эта функция принимает PXCMPhoto и PXCMPointI32.

 

public static bool SavePhoto( PXCMSession session, PXCMCapture.Sample sample )

Сохраняет фотографию на диск. Использует этот сеанс для создания нового объекта PXCMPhoto с функциональностью сохранения на диск. Объект PXCMPhoto использует импорт из примера предварительного просмотра, чтобы импортировать данные изображения в себя. Узнает, существует ли файл; если да, то удаляет его и сохраняет файл.

 

public static PXCMPhoto OpenPhoto( PXCMSession session )

Простая функция: проверяет, существует ли фотография XDM на жестком диске; если да, использует объект PXCMSession для создания PXCMPhoto. Затем объект photo загружает XDM-файл. Затем функция возвращает PXCMPhoto клиенту.

 

RSPaintUtil

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

Это удобная отправная точка. Если есть, создает новый объект .NET Point, указывая значения x, y начальной точки.

Вызывает функцию DrawCircle, чтобы нарисовать круг вокруг точки щелчка.

 

static public void DrawTwoPointsAndLine( RSPoints points, PaintEventArgs e )

Проверяет, что обе точки действительны, и создает два новых объекта .NET Point. Эта функция рисует круги в этих точках, вызывая DrawCircle для каждой точки. Затем между ними рисуется линия с помощью DrawLine.

 

static private void DrawCircle( Point p, PaintEventArgs e )

Эта функция рисует круг вокруг объекта .Net Point с координатами x, y. Это осуществляется путем создания нового объекта Pen. Чтобы нарисовать круг, нужен прямоугольник. Он определяет размер круга, который необходимо нарисовать. Для этого я создал функцию, которая рисует ограничивающий прямоугольник. После создания прямоугольника я использую функцию DrawEllipse и аргументы события рисования, чтобы нарисовать круг размером с прямоугольник.

 

static private void DrawLine( Point pointA, Point pointB, PaintEventArgs e )

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

 

static public Rectangle BuildBoundingRectangle( Point p )

Создает объект прямоугольника .NET, центром которого является точка с координатами x, y в p. Для этого создается новый объект Rectangle. Я хотел, чтобы ограничительная рамка имела размер 10 x 10 пикселей. Значение 10 x 10 я выбрал произвольно.

 

RSPoints

RSPoints — простая оболочка для управления двумя разными возможными точками. Точки показывают место, где пользователь щелкнул фотографию PXCMPhoto, которая отображается в элементе управления .NET PictureBox.

Он использует два объекта PXCMPointI32, которые представляют начальную и конечную точки. В некоторых случаях экземпляру RSPoints потребуется только начальная точка, например для функциональности RefocusOnPoint. В других случаях две действительные точки необходимы для различных функций, таких как MeasurePoints, где нужны начальная и конечная точка.

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

 

public RSPoints( )

Конструктор включает режим одной точки, затем вызывает ResetPoints, чтобы обнулить все значения x, y.

 

public void AddPoint( int x, int y )

Это приблизительно то же самое, что добавить объект в массив или в список. Тем не менее, как видите, здесь нет ни массива, ни списка. Всего две точки. Я решил сделать этот класс подобным списку, поэтому решил добавить массив для точек. Хорошо ли продуман этот класс? Возможно, не очень, но пока меня это не слишком тревожит: это всего лишь поддерживающий класс, он делает то, что мне требуется, а прочее не столь важно.

В режиме одной точки AddPoints всегда заменяет начальную точку. Это осуществляется с помощью объекта ResetPoints.

Если мы работаем с режимом одной точки, то мне нет необходимости добавлять другие точки. Лучше очистить существующую начальную точку и задать новую.

 

RSSampleArg

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

 

public RSSampleArg( PXCMCapture.Sample sample )

Конструктор инициализирует локальный объект PXCMCapture.Sample _sample класса с этим параметром.

 

public PXCMCapture.Sample Sample

Простой метод получения возвращает локальный объект PXCMCapture.Sample.

 

RSEnhancedImageArg

RSEnhancedImageArg наследует от EventArgs. Этот класс предназначен для использования с RSEnhancedPhotography. После того как RSEnhancedPhotography завершает изменение изображения, создается экземпляр RSEnhancedImageArg, он наполняется только что созданным изображением и отправляется клиенту посредством класса событий, на которые подписан клиент.

 

public RSEnhancedImageArg( PXCMImage image )

Конструктор форм инициализирует единственную переменную в этом классе — объект PXCMImage.

 

public PXCMImage EnhancedImage

Простой метод получения возвращает экземпляр PXCMImage.

 

RSMeasureArg

RSMeasureArg наследует от EventArgs. Это событие используется в функции MeasurePoints классов RSEnhancedPhotography. После вычисления расстояния функцией MeasurePoints я использую экземпляр этого класса для сохранения в нем возвращаемых данных расстояния, достоверности и точности. После наполнения этого объекта он используется с объектом Event для отправки данных клиентскому приложению.

 

public RSMeasureArg(float distance, float confidence, float precision)

Параметры

  • Число с плавающей запятой. Измеренное расстояние между двумя точками.
  • Число с плавающей запятой. Уровень достоверности измерения в SDK.
  • Число с плавающей запятой. Уровень точности в SDK.

Конструктор наполняет локальные данные параметрами ввода.

 

public float Distance

Простой метод получения возвращает расстояние между двумя точками.

 

public float Confidence

Простой метод получения возвращает уровень достоверности, вычисленный при обработке расстояния между двумя точками в SDK.

 

public float Precision

Простой метод получения возвращает уровень точности, вычисленный при обработке расстояния между двумя точками в SDK.

 

FormMain

FormMain — это основная форма приложения. С ее помощью пользователь может включить и остановить поточную передачу, а также сделать снимок, который будет использован другими формами для различных функций Enhanced Photography.

В этой форме используется объект RSStreamingRGB для поточной передачи данных с камеры. После этого данные отображаются в элементе управления .NET PictureBox с помощью вспомогательного объекта Intel RealSense SDK под названием D2D1Render.

Форма получает обновления от RSStreamingRGB путем подписки на событие OnNewStreamingSample RSStreaming.

 

public MainForm( )

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

 

private void rsRGBStream_NewSample( object sender, RSSampleArg sampleArg )

Обработчик событий для объекта RSStreamingRGB. Проверяет, нужно ли просматривать цветное изображение и передает в объект _render соответствующую выборку.

Затем проверяет, нужно ли сделать новый снимок; если нужно, использует RSUtility, чтобы сохранить фотографию на диск.

 

private void btnStream_Click( object sender, EventArgs e )

Обработчик событий при нажатии кнопки Stream. Дает объекту RSStreamingRGB команду на начало поточной передачи, задает кнопки согласно состоянию приложения.

 

private void btnStopStream_Click( object sender, EventArgs e )

Обработчик событий кнопки Stop Streaming вызывает функцию StopStreaming.

 

private void btnTakeDepthPhoto_Click( object sender, EventArgs e )

Обработчик событий для кнопки снимка. Задает флагу снимка значение true, чтобы обработчик событий поточной передачи сохранил текущее изображение на диск, затем дает форме команду остановить поточную передачу.

 

private void EnableEnhancedPhotoButtons( bool enable )

Устанавливает кнопки в соответствии с состоянием приложения с помощью значения включения.

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

Внутри функции StartStreaming в RSStreaming вы увидите строку кода.

_senseManager.StreamFrames( false );

Эта строка кода (встроенного в Intel RealSense SDK) на самом деле образует новый поток. Из-за этого нужно выразить эту функциональность с помощью многопоточного синтаксиса.

Сначала нужно проверить, требуется ли вызвать поле группы, окружающее различные кнопки улучшений. Это необходимо для работы с элементами управления Windows в многопоточных приложениях. Если это нужно, то следует создать новый делегат. В данном случае я создаю экземпляр делегата EnableEnhancedButtons, созданного в верхней части этого файла исходного кода. При создании экземпляра делегата необходимо указать имя функции, которую нужно вызвать. В данном случае это та же самая функция EnableEnhancedPhotobuttons. После создания делегата мы даем форме команду его вызвать и отправляем исходное логическое значение.

Когда делегат вызывает функцию, она на этот раз не пройдет тест InvokeRequired и попадет в инструкцию else, включающую поле группы вокруг кнопок улучшения изображения. Поле группы будет либо включено, либо отключено в зависимости от значения в логической переменной.

 

private void EnableStreamButtons( bool enable )

Это работает так же, как EnableEnhancedPhotoButtons, но с одним отличием: для включения и отключения используются разные элементы управления.

 

private void StopStreaming( )

Проверяет, что объект RSStreaming правильно инициализирован. Если да, вызывает функцию остановки поточной передачи. При этом прекращается поток данных с камеры и закрывается созданный ранее поток ЦП.

Затем я соответствующим образом задаю кнопки.

 

private void btnExit_Click( object sender, EventArgs e )

Обработчик событий нажатия кнопки Exit. Вызывает функцию Close() формы.

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

Обрабатывает событие форм FormClosing. Проверяет, что объект RSStreaming правильно инициализирован. Если да, останавливает поточную передачу.

 

private void btnDepthResize_Click( object sender, EventArgs e )
private void btnDepthEnhance_Click( object sender, EventArgs e )
private void btnRefocus_Click( object sender, EventArgs e )
private void btnPasteOnPlane_Click( object sender, EventArgs e )
private void btnBlending_Click( object sender, EventArgs e )

Я сгруппировал все эти функции с одним пояснением. Они все делают одно и то же, за исключением того, что каждая функция инициализирует разную форму. В каждой функции я создаю новый объект сеанса, необходимый для функции RSUtility.OpenPhoto. Функция OpenPhoto открывает изображение, которое было создано и сохранено на диске. После получения фотографии я создаю новый объект формы, передаю ему фотографию, затем отображаю форму. Все достаточно просто.

 

private void btn_MouseEnter( object sender, EventArgs e )

Обработчик событий наведения указателя мыши на кнопки Start Streaming, Take Photo или Stop Streaming. Я получаю кнопку, на которую был наведен указатель, затем изучаю ее поле Tag. Определив, на какую кнопку был наведен указатель, я задаю значение текста полосы инструментов, чтобы указать назначение каждой кнопки.

 

private void btn_MouseLeave( object sender, EventArgs e )

Задает пустую строку в качестве текста полосы.

 

FormMeasure

FormMeasure демонстрирует, как использовать возможности измерения в Enhanced Photography. Экземпляр RSEnhancedPhotography обменивается данными с функциями Enhanced Photography в Intel RealSense SDK.

 

public FormMeasure( PXCMPhoto photo )

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

 

private void InitStatStrip( )

Создает записи по умолчанию для полосы состояния. Задает значения пустым строкам и 0, 0 для положений x, y.

 

private void rsEnhanced_OnImageMeasured(object sender, RSMeasureArg e)

Обработчик событий для события OnImageMeasured объекта RSEnhancedPhotography. Принимает RSMeasuredArg, содержащий информацию об измерении. Обновляет текстовые значения полосы состояния.

 

private void pictureBox1_MouseClick( object sender, MouseEventArgs e )

Обработчик событий щелчка мыши в поле с изображением. Обработчик событий сначала пытается определить, сколько щелчков мыши выбрано. Если нет начальной точки, мы знаем, что пользователь впервые щелкнул поле изображения/фотографии. В этом случае следует добавить точку щелчка. Если есть допустимая начальная точка, нужно проверить существование конечной точки. Если она не существует, добавьте ее.

После определения начальной и конечной точек я обновляют точки в полосе состояния, вызвав UpdatePointsStatus.

Получив допустимые точки (начальную и конечную), можно вызвать их в функцию MeasurePoints(…) в RSEnhancedPhoto, передав объект точек. Больше эти точки не нужны, поэтому я очищаю их, вызвав функцию ResetPoints() объекта RSPoint.

После этого я вызываю invalidate для picturebox, чтобы нарисовать точки на экране. Помните, что эта функция будет вызвана вне зависимости от измерения. Это дает возможность всегда видеть место щелчка.

 

private void UpdatePointStatus( )

Обновляет текстовые значения двух точек полосы состояния; в полосе состояния отображаются координаты щелчка изображения.

 

private void pictureBox1_MouseMove( object sender, MouseEventArgs e )

Обработчик событий движения мыши; просто отслеживает положение указателя мыши, когда он перемещается по изображению. Обновляет значения x, y мыши полосы состояния.

 

private void pictureBox1_Paint( object sender, PaintEventArgs e )

Обработчик событий рисования в элементе управления picturebox. Он отвечает за рисование двух кнопок и линии между ними на изображении.

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

 

private void Cleanup( )

Очищает ресурсы.

 

private void btnExit_Click( object sender, EventArgs e )

Обработчик событий нажатия кнопки Exit вызывает закрытие формы.

 

private void FormMeasure_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия форм. Очистка вызовов для высвобождения ресурсов.

 

FormDepthEnhance

В этой форме показано, как можно улучшить изображение глубины; в элементе управления picturebox отображается улучшенное изображение. Он может показывать изображение с низким качеством или с высоким качеством.

 

public FormDepthEnhance( PXCMPhoto photo )

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

 

private void rdo_Click( object sender, System.EventArgs e )

Обработчик событий выбора одной из двух кнопок переключателя. Вызывает функцию DepthEnhancement(…) в RSEnhancedPhoto, передавая значение, указывающее высокое или низкое качество.

 

private void _rsEnhanced_OnImageProcessed( object sender, RSEnhancedImageArg e )

Обработчик событий OnImageProcessed, когда RSEnhancedPhotography отправляет событие. Обновляет элемент управления picturebox с помощью вспомогательного объекта renderer.

 

private void btnExit_Click( object sender, System.EventArgs e )

Обработчик событий нажатия кнопки Exit вызывает закрытие формы.

 

private void Cleanup( )

Обнулите объекты, чтобы задействовать сборку мусора.

 

private void FormDepthScaling_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия формы. Принудительно очищает переменные.

 

FormDepthResize

Эта форма демонстрирует изменение размера изображения глубины. В этом случае его размер изменяется до размера цветного изображения из объекта PXCMPhoto.

 

public FormDepthResize( PXCMPhoto photo )

Конструктор форм. Как и другие конструкторы форм, инициализирует переменные, используемые формой, и задает обработчик событий OnImageProcessed.

 

private void btnResize_Click( object sender, System.EventArgs e )

Обработчик событий изменения размера кнопки вызывает функцию DepthResize(…) в RSEnahancedPhoto.

 

private void _rsEnhanced_OnImageProcessed( object sender, RSEnhancedImageArg e )

Обработчик событий OnImageProcessed изменяет размер picturebox и обновляет изображение, отображаемое с помощью вспомогательного объекта renderer.

 

private void btnExit_Click( object sender, System.EventArgs e )

Обработчик событий нажатия кнопки Exit. Закрытие формы.

 

private void Cleanup( )

Обнуляет объекты, чтобы их смог убрать сборщик мусора.

 

private void FormDepthResize_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия формы вызывает Cleanup.

 

FormDepthRefocus

FormDepthRefocus демонстрирует возможности изменения фокусировки с помощью Enhanced Photography в Intel RealSense SDK. Когда пользователь щелкает изображение в произвольном месте, место щелчка становится точкой фокусировки изображения: в этой точке изображение становится резким, а в остальной части теряет фокусировку.

Для фокусировки мощно щелкнуть изображение в произвольном месте, а ползунок позволяет имитировать изменение диафрагмы камеры.

 

public FormDepthRefocus( PXCMPhoto photo )

Конструктор форм инициализирует переменные, используемые формой. Регистрирует объекты OnImageProcessed для функции и задает элемент управления picturebox.

 

private void pictureBox1_MouseClick( object sender, MouseEventArgs e )

Обработчик событий щелчка для элемента управления picturebox. Задает начальной точке объектов точек координаты щелчка мыши, вызывает RefocusOnPoint(…). RSPoints ResPoints() удаляет значения начальной точки и производит сброс объекта.

 

private void tbAperture_Scroll( object sender, System.EventArgs e )

Обработчик событий прокрутки. Получает значение прокрутки, задает текстовое значение формы, представляющее значение прокрутки, затем вызывает функцию RefocusOnPoint, передавая ему на этот раз второй параметр: значение диафрагмы.

 

private void _rsEnhanced_OnImageProcessed( object sender, RSEnhancedImageArg e )

Обработчик событий для события OnImageProcessed RSEnhancedObjects. Использует вспомогательный класс renderer для обновления элемента управления picturebox.

 

private void btnExit_Click( object sender, System.EventArgs e )

Обработчик событий нажатия кнопки Exit. Закрытие формы.

 

private void Cleanup( )

Обнуляет объекты, чтобы их смог убрать сборщик мусора.

 

private void FormDepthResize_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия формы вызывает Cleanup.

 

FormDepthPasteOnPlane

В этой форме демонстрируется следующая возможность: пользователь может щелкнуть плоскую поверхность на изображении, и второе изображение появится на этой плоскости. Пользователь щелкает две точки на плоской поверхности. Если функциональность Intel RealSense SDK может определить поверхность, то на эту поверхность вставляется внешнее изображение.

 

public FormDepthPasteOnPlane( PXCMPhoto photo )

Конструктор форм инициализирует переменные, используемые формой. Регистрирует объекты OnImageProcessed для функции и задает элемент управления picturebox.

 

private void _rsEnhanced_OnImageProcessed( object sender, RSEnhancedImageArg e )

Обработчик событий для события OnImageProcessed RSEnhancedObjects. Использует вспомогательный класс renderer для обновления элемента управления picturebox.

 

private void pictureBox1_MouseClick( object sender, MouseEventArgs e )

Обработчик событий щелчка мыши в поле с изображением. Обработчик событий сначала пытается определить, сколько щелчков мыши выбрано. Если нет начальной точки, мы знаем, что пользователь впервые щелкнул поле изображения/фотографии. В этом случае следует добавить точку щелчка. После добавления точки нужно обнулить элемент управления picturebox, чтобы на изображении можно было нарисовать точку щелчка.

Если есть допустимая начальная точка, нужно проверить существование конечной точки. Если она не существует, добавьте ее.

Получив допустимые точки (начальную и конечную), можно вызвать их в функцию MeasurePasteOnPlane(…) в RSEnhancedPhoto, передав объект точек. Больше эти точки не нужны, поэтому я очищаю их, вызвав функцию ResetPoints() объекта RSPoint.

 

private void btnExit_Click( object sender, System.EventArgs e )

Обработчик событий нажатия кнопки Exit. Закрытие формы.

 

private void Cleanup( )

Обнуляет объекты, чтобы их смог убрать сборщик мусора.

 

private void FormDepthPasteOnPlane_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия формы вызывает Cleanup.

 

FormDepthBlending

FormDepthBlending работает аналогично вставке на плоскость. Разница в том, что после встраивания изображения им можно управлять, регулируя поворот вокруг вертикальной, поперечной и продольной осей, смещение вдоль оси Z и масштаб, для чего в форме предусмотрены соответствующие ползунки.

 

public FormDepthBlending( PXCMPhoto photo )

Конструктор форм инициализирует переменные, используемые формой. Регистрирует объекты OnImageProcessed для функции и задает элемент управления picturebox.

 

private void pictureBox1_MouseClick( object sender, MouseEventArgs e )

Обработчик событий для щелчков мышью элемента управления picturebox. Проверяет, что в объекте точек есть всего одна точка — начальная точка. Это единственная точка, необходимая для этой функциональности. Я записываю точки, а затем вызываю Blend(), чтобы смешать внешнее изображение с PXCMPhoto.

 

private void Blend( )

Получает значения с каждого ползунка, создает нужный массив поворота, затем вызывает функцию DepthBlend в составе RSEnhancedPhotograpy и передает ей все параметры.

 

private void tbBlend_Scroll( object sender, EventArgs e )

Обработчик событий для полос прокрутки. Вызывает Blend().

 

private void _rsEnhanced_OnImageProcessed( object sender, RSEnhancedImageArg e )

Обработчик событий для события OnImageProcessed RSEnhancedObjects. Использует вспомогательный класс renderer для обновления элемента управления picturebox.

 

private void btnExit_Click( object sender, System.EventArgs e )

Обработчик событий нажатия кнопки Exit. Закрытие формы.

 

private void Cleanup( )

Обнуляет объекты, чтобы их смог убрать сборщик мусора.

 

private void FormDepthBlending_FormClosing( object sender, FormClosingEventArgs e )

Обработчик события закрытия формы вызывает Cleanup.

Заключение

В этом документе и в примере приложения я показал, как реализовать некоторые функции Enhanced Photography, предоставляемые камерой и пакетом SDK. Надеюсь, эта статья вам понравилась и пригодилась. Спасибо за внимание.

Об авторе

Рик Блэкер (Rick Blacker) — опытный инженер по программному обеспечению; уже много лет занимается созданием решений для приложений на основе баз данных. Недавно Рик перешел в команду, занимающуюся технологией Intel RealSense, и помогает пользователям осваивать эту технологию.

Учебное руководство: перечисление модулей и камер

$
0
0

Аннотация

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

Учебное руководство

Обнаружение камер, подключенных к системе, и определение возможностей этих камер можно упростить с помощью перечисления устройств. В Intel® RealSense™ SDK 2016 R1 предоставляется механизм с помощью PXCSession::ImplDescи PXCCapture::DeviceInfo, благодаря которому разработчики могут получать информацию, такую как понятное имя устройства, поддерживаемые модули и т. д.

В этом учебном руководстве показаны классы Intel RealSense SDK, необходимые для инициализации и последующего перечисления модулей и устройств.

Инициализация

Пример инициализации основных обработчиков Intel RealSense SDK реализован, чтобы дать возможность создавать PXCSession в любой момент работы приложения.

int main(int argc, char *argv[])
try
{
    PXCSession *pSession;
    PXCSession::ImplDesc *pDesc;
    PXCCapture *pCapture;
    PXCSenseManager *pSenseManager;

    // Initialize
    pSession = PXCSession::CreateInstance();
    pDesc = new PXCSession::ImplDesc();

    pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;
    pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE;

Перечисление

Перечисление модулей и устройств осуществляется путем последовательного перебора модулей PXCSession::ImplDesc и получения понятного измени. Затем выполняется перебор PXCCapture::DeviceInfo и опрос устройства. Таким способом можно опросить модули и возможности устройств для всех камер, подключенных к системе.

        // Enumerate Devices
    std::string temp;

// iterating over the present modules
    for (int m = 0; ; m++)
    {
        PXCSession::ImplDesc desc2;
        if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)
        {
            break;
        }
        //temp = format("Module[%d]:  %d", m, desc2.friendlyName);
        wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());
        std::cout << "Module["<< m << "]:  "<< str.c_str() << std::endl;

        PXCCapture *pCap;
        pSession->CreateImpl<PXCCapture>(&desc2, &pCap);

        // interating over the devices
        for (int d = 0; ; d++)
        {
            PXCCapture::DeviceInfo dinfo;
            if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)
            {
                break;
            };
            wstring ws(dinfo.name); string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;

            /*wstring ws(dinfo.orientation);    string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;

            wstring ws(dinfo.model);    string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;*/

        }
}

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

Заключение

Перечисление камер — важный этап в работе любого приложения, в котором может потребоваться выбрать определенную камеру из нескольких подключенных к системе. В этом учебном руководстве представлена простая схема перечисления камер для разработчиков, желающих встроить в свое приложение необходимую логику выбора после идентификации определенной камеры и ее возможностей. Полный пример использования приведен в приложении 1 к этому учебному руководству.

Об авторе

Руди Казабон (Rudy Cazabon) — участник программы Intel Software Innovator и опытный технический специалист в области игровой графики и компьютерного зрения.

Ресурсы

Документация к Intel RealSense SDK

Руководство разработчика по методам обнаружения камер Intel® RealSense™

Написание кода сразу для двух камер — камеры переднего обзора Intel RealSense

Приложение 1. Пример исходного кода

#include <windows.h>

#include <iostream>
#include <string>
#include <cstdio>
//
#include "pxcbase.h"
#include "pxcsensemanager.h"
#include "pxcmetadata.h"
#include "service/pxcsessionservice.h"

#include "pxccapture.h"
#include "pxccapturemanager.h"

using namespace std;

int main(int argc, char *argv[])
try
{
    PXCSession *pSession;
    PXCSession::ImplDesc *pDesc;
    PXCCapture *pCapture;
    PXCSenseManager *pSenseManager;

    // Initialize
    pSession = PXCSession::CreateInstance();
    pDesc = new PXCSession::ImplDesc();

    pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;
    pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE;

    // Enumerate Devices
    std::string temp;

    for (int m = 0; ; m++)
    {
        PXCSession::ImplDesc desc2;
        if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)
        {
            break;
        }
        //temp = format("Module[%d]:  %d", m, desc2.friendlyName);
        wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());
        std::cout << "Module["<< m << "]:  "<< str.c_str() << std::endl;

        PXCCapture *pCap;
        pSession->CreateImpl<PXCCapture>(&desc2, &pCap);

        // print out all device information
        for (int d = 0; ; d++)
        {
            PXCCapture::DeviceInfo dinfo;
            if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)
            {
                break;
            };
            wstring ws(dinfo.name); string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;

            /*wstring ws(dinfo.orientation);    string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;

            wstring ws(dinfo.model);    string str(ws.begin(), ws.end());
            std::cout << "Device["<< d << "]:  "<< str.c_str() << std::endl;*/

        }
    }


    cin.clear();
    cout << endl << "Press any key to continue...";
    cin.ignore();

    return 0;
}
catch (const char *c)
{
    std::cerr << "Program aborted: "<< c << "\n";
    MessageBox(GetActiveWindow(), (LPCWSTR)c, L"FAIL", 0);
}
catch (std::exception e)
{
    std::cerr << "Program aborted: "<< e.what() << "\n";
    MessageBox(GetActiveWindow(), (LPCWSTR)e.what(), L"FAIL", 0);
}

Головная гарнитура Helios использует технологию Intel® RealSense™ для помощи людям с нарушениями зрения

$
0
0

Наша работа и мотивация

Цель проекта HELIOS* — расширение и дополнение возможностей человеческого восприятия за счет современных технологий зрения.

В исследовании, опубликованном Всемирной организацией здравоохранения, говорится о том, что около 285 миллионов человек в мире страдают нарушениями зрения: насчитывается 39 миллионов слепых и 246 миллионов человек с ослабленным зрением.

Мы считаем, что очень важно повысить мобильность, безопасность и возможности доступа к знаниям для людей с нарушениями зрения.

Мы используем компьютерное зрение, искусственный интеллект и технологию Intel® RealSense™, чтобы создать современные решения, способные помочь людям с нарушениями зрения в решении целого ряда повседневных проблем. Наш подход состоит в разработке интеллектуальной головной гарнитуры, помогающей людям с частичной или полной потерей зрения.

Модели и возможности головных гарнитур HELIOS

Головные гарнитуры HELIOS предоставляют ряд специальных возможностей для людей с нарушениями зрения, помогая им проще и увереннее выполнять различные действия и задачи.

HELIOS Light

Гарнитура HELIOS Light помогает людям с ослабленным зрением. С помощью технологий дополненной и виртуальной реальности гарнитура расширяет возможности визуального восприятия пользователей. Потоки цветного изображения и данных глубины, полученных от Intel RealSense, формируют адаптируемые визуальные подсказки, помогающие при выполнении разнообразных повседневных задач.

HELIOS Light 3D representation
Трехмерная модель HELIOS Light

HELIOS Touch

Гарнитура HELIOS Touch предназначена для людей с тяжелым нарушением зрения или с полной слепотой. В этом решении применяется интерфейс HTI для передачи пользователю визуальных данных посредством тактильных сигналов. За счет этого реализуются возможности ориентации в ближайшем пространстве и уклонения от препятствий.

HELIOS Touch 3D representation
Трехмерная модель HELIOS Touch

Основное назначение HELIOS — предоставить пользователю более полную информацию об окружающем пространстве, что существенно повышает свободу движения и безопасность пользователя.

Еще одна важная функция — возможность чтения текста без использования шрифта Брайля. Гарнитура HELIOS может читать содержимое книг, журналов и других печатных материалов, например меню в ресторанах.

Кроме того, HELIOS предоставляет новый уровень контекста для личного взаимодействия за счет распознавания лиц друзей и социальных сигналов.

Описание оборудования

Технология Intel® RealSense™

Камеры Intel® RealSense™ обеспечивают съемку в цвете и измерение расстояния. Благодаря этому система HELIOS получает высококачественные данные глубины и цветное изображение. Благодаря своей функциональности, производительности и компактности эти компоненты идеально подходят для интеграции в систему HELIOS.

Intel® RealSense™ camera R200. Learn more about it in this article
Камера Intel® RealSense™ R200. Дополнительные сведения см. в этой статье.

The Razer* Stargazer, which is a third-party version of the Intel® RealSense™ camera SR300.
Razer* Stargazer— версия камеры Intel® RealSense™ SR300 стороннего производителя

Тактильный интерфейс HTI*

HTI — аппаратный компонент HELIOS Touch, разработанный нашей командой. Он предназначен для преобразования визуальных данных в тактильные сигналы, обеспечивая дополнительный уровень информации, которая подается точно и ненавязчиво.

HTI test board
Тестовая плата HTI

Виртуальная реальность и открытый исходный код

Razer OSVR Hacker Development Kit — платформа виртуальной и дополненной реальности с широкими возможностями настройки. Это идеальный готовый компонент для HELIOS Light благодаря использованию открытого исходного кода, возможностям расширения и удачной конструкции оборудования.

Razer OSVR HDK
Razer OSVR HDK

Intel NUC

Последнее поколение компактных ПК Intel — мощная платформа для выполнения программных компонентов HELIOS в реальном времени с высокой производительностью, низким расходом электроэнергии и высокой мобильностью.

Intel® NUC
Intel® NUC

Программное обеспечение. Intel® RealSense™ SDK

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

В следующем примере кода показаны основные компоненты для разработки модуля преобразования текста в речь с помощью RealSense и UWP (универсальной платформы Windows):

        public async void StartRealSenseStreaming()

        {

            Status streamingStatus;



            // Set RealSense sample reader and bind SetOcrFrame event

            SampleReader sampleReader = SampleReader.Activate(senseManager);

            sampleReader.SampleArrived += SetOcrFrame;



            // Set RGB stream profile and device info filter

            Dictionary<StreamType, PerceptionVideoProfile> profiles = new Dictionary<StreamType, PerceptionVideoProfile>();

            profiles[StreamType.STREAM_TYPE_COLOR] = ColorProfile;

            sampleReader.EnableStreams(profiles);

            readers.Add(sampleReader);

            if (currentRealSenseDevice != null)

                senseManager.CaptureManager.FilterByDeviceInfo(currentRealSenseDevice.DeviceInfo);



            // Set streaming status message

            if ((streamingStatus = await senseManager.InitAsync()) == Intel.RealSense.Status.STATUS_NO_ERROR)

            {

                if ((streamingStatus = senseManager.StreamFrames()) == Intel.RealSense.Status.STATUS_NO_ERROR)

                {

                    StatusMessage = "Streaming started";

                }

                else

                {

                    StatusMessage = "Failed to stream: " + streamingStatus.ToString();

                }

            }

            else

            {

                StatusMessage = "Initialization failed: " + streamingStatus.ToString();

            }



            IsStreaming = true;

        }



        private void SetOcrFrame(Object module, SampleArrivedEventArgs args)

        {

            // Setting current frame for OCR processing

            Sample sample = args.Sample;

            if (sample == null) return;



            var localOcrFrame = sample.Color;

            if (localOcrFrame == null) return;



            lock (sample)

            {

                ocrFrame = localOcrFrame.SoftwareBitmap;

            }

        }


        private async void TextToSpeech()

        {

            // setup OCR engine for English

            OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(new Language("en"));



            // recognize text from the RealSense OcrFrame

            var ocrResult = await ocrEngine.RecognizeAsync(RealSense.OcrFrame);



            if (!String.IsNullOrEmpty(ocrResult.Text))

            {

                // setup speech synthesizer

                var voice = SpeechSynthesizer.AllVoices;

                using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())

                {

                    speechSynthesizer.Voice = voice.First(v => v.Gender == 0);

                    var voiceStream = await speechSynthesizer.SynthesizeTextToStreamAsync(ocrResult.Text);



                    // setup playback of voice synthesis

                    PlaybackVoice(voiceStream);

                }

            }

        }

Тестирование и проверка

Михай Леовенау (Mihai Leoveanu) обладает врожденным тяжелым нарушением зрения, но это не помешало ему стать выдающимся человеком.

Он убежденный оптимист и один из лучших учеников в своем выпускном классе. В настоящее время он работает над дипломным проектом, посвященным оснащению исторической достопримечательности — королевского двора Тырговиште— для повышения удобства в отношении специальных возможностей. Благодаря предполагаемым улучшениям туристы с нарушениями зрения смогут получить более полную информацию об этом историческом месте.

Михай стал первым испытателем нашей головной гарнитуры.

Mihai field testing HELIOS
Михай тестирует HELIOS в действии

Mihai reading with HELIOS
Михай читает с помощью HELIOS

В процессе экспериментов Михай предоставил отзывы обо всех использованных им возможностях системы HELIOS. Он естественным образом воспринял новые источники информации и уже через несколько минут смог успешно пользоваться головной гарнитурой для получения более точной информации об окружающем пространстве.

Заключение

Результаты разработки и тестирования весьма обнадеживающие. Для пользователей значительно упрощаются такие задачи, как восприятие окружающего мира и чтение без использования шрифта Брайля. При дальнейшем развитии система HELIOS станет незаменимым и очень полезным помощником для людей с нарушениями зрения.

Об авторах

Сильвиу-Тудор Сербан (Silviu-Tudor Serban), Кристиан Драгомир (Cristian Dragomir) и Андрей Нистор (Andrei Nistor) — эксперты по технологии Intel RealSense, обладающие опытом работы в области компьютерного зрения, искусственного интеллекта, разработки программного обеспечения и Интернета вещей. Дополнительные сведения см. на сайтах Helios Visionи Intel Devmesh.


Учебное руководство по управлению светодиодами с помощью Robotics Development Kit

$
0
0

Управление контактами GPIO на плате UP в составе комплекта Intel® RealSense™ Robotics Development Kit для управления электрической цепью со светодиодом.

Что вы узнаете

В этом учебном руководстве демонстрируется управление контактами GPIO на простом примере, аналогичном написанию простейшей программы «Hello World»: путем настройки платы UP так, чтобы можно было мигать внешним светодиодом.

Плата UP в составе Robotics Development Kit

Комплект Intel® RealSense™ Robotics Development Kit (RDK)состоит из камеры глубины Intel® RealSense™ R200 и платы Aaeon* UP. Плата UP в этой системе является вычислительным ядром. Для подключения внешних устройств эта плата оборудована 40-контактной клеммой ввода-вывода, показанной на рис. 1. На плате UP размещено в общей сложности 28независимых контактов GPIO, выведенных на клемму ввода-вывода. Для платы UP разработаны драйверы платформы ядра Ubuntu 14.04, обеспечивающие нумерацию контактов GPIO в Linux в диапазоне от 0 до 27 с эмуляцией возможностей платы Raspberry Pi.

Доступ к аппаратным GPIO в этом учебном руководстве будет осуществляться на низком уровне с помощью Linux sysfs. При помощи Sysfs пользователи Linux (или код в пользовательском пространстве) могут взаимодействовать с устройствами на уровне системы (ядра).

Для этого учебного руководства не нужны никакие особые библиотеки, поскольку используется интерфейс sysfs.

Важно!Обратите внимание, что номера Linux GPIOна рис. 1 отличаются и от номеров физических контактов, и от разводки на плате UP. Номера Linux GPIO назначаются в соответствии со схемой нумерации GPIO Raspberry Pi BCM.

Для сравнения с разводкой на плате Raspberry Pi посетите сайт http://pinout.xyz

Как зажечь светодиод с помощью платы UP

Достаточно настроить плату UP в составе RDK согласно руководству по быстрому запуску From Zero to Hero: Getting up and running with the Intel RealSense Robotic Development Kit, и все готово для работы над первым настоящим проектом. Мы будем управлять включением светодиода с помощью языка программирования C и контактов GPIO на плате UP.

Что вы узнаете

  • Вы соберете простейшую электрическую схему и подключите ее к контактам GPIO платы UP.

Что понадобится

  • 1 небольшой светодиод любого цвета.
  • 1 резистор на 50 Ом.
  • Одножильный провод небольшого сечения.
  • Макетные зажимы или зажимы типа «крокодил» (или и те, и другие) для фиксации контактов.

Да будет свет!

Перед написанием кода следует ознакомиться с нумерацией контактов на плате UP и собрать простую электрическую цепь. Для начала мы просто включим светодиод, используя контакт 3,3 В и контакт заземления на плате UP. Схема нашей электрической цепи такова:


Рис. 2

Перед началом работы отключите плату UP. Если работать с ней во включенном состоянии, существует риск короткого замыкания, а этого следует избегать, особенно если учесть, что это наш первый проект.

  • Исходя из наличных деталей, соберите электрическую цепь либо на монтажной плате, либо с помощью зажимов-«крокодилов».
  • Контакт 1 (+3,3 В) должен быть подключен к длинной ножке светодиода (анод). Этот контакт подает напряжение 3,3 В. В отличие от контактов GPIO на плате UP этот контакт не является программируемым: невозможно им управлять с помощью программного обеспечения.
  • Подключите короткую ножку светодиода к резистору. Затем подключите второй контакт резистора к контакту 6 (заземление) на плате UP.

Еще раз проверьте, как все подключено. Когда все будет готово, электрическая цепь должна выглядеть так:


Рис. 3

Включите плату UP. Светодиод должен сразу же загореться.

Управление светодиодом с помощью программного кода

Итак, простейшая электрическая цепь проверена, теперь пора переключить положительный провод с постоянно включенного контакта 3,3 В на один из программируемых контактов GPIO. Вот как будет выглядеть схема:


Рис. 4

  • Снова выключите плату UP перед тем, как менять что-либо в подключениях.
  • Перенесите положительный провод с контакта 1 на контакт 7.

Когда все будет готово, электрическая цепь должна выглядеть так:


Рис. 5

Исходный код для управления миганием

Приведенный ниже пример исходного кода заставит светодиод мигать.

#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define IN   0
#define OUT  1

#define LOW  0
#define HIGH 1

#define PIN  24 /* physical pin 18 */
#define POUT 4  /* physical pin 7  */

static int GPIOExport(int pin);
static int GPIOUnexport(int pin);
static int GPIODirection(int pin, int dir);
static int GPIORead(int pin);
static int GPIOWrite(int pin, int value);

int main(int argc, char *argv[])
{
	int repeat = 9;

	/*
	 * Enable GPIO pins
	 */
	if (-1 == GPIOExport(POUT) || -1 == GPIOExport(PIN))
		return(1);

	/*
	 * Set GPIO directions
	 */
	if (-1 == GPIODirection(POUT, OUT) || -1 == GPIODirection(PIN, IN))
		return(2);

	do {
		/*
		 * Write GPIO value
		 */
		if (-1 == GPIOWrite(POUT, repeat % 2))
			return(3);

		/*
		 * Read GPIO value
		 */
		printf("I'm reading %d in GPIO %d\n", GPIORead(PIN), PIN);

		usleep(500 * 1000);
	}
	while (repeat--);

	/*
	 * Disable GPIO pins
	 */
	if (-1 == GPIOUnexport(POUT) || -1 == GPIOUnexport(PIN))
		return(4);

	return(0);
}

Int GPIOExport(int pin)
{
#define BUFFER_MAX 3
	char buffer[BUFFER_MAX];
	ssize_t bytes_written;
	int fd;

	fd = open("/sys/class/gpio/export", O_WRONLY);
	if (-1 == fd) {
		fprintf(stderr, "Failed to open export for writing!\n");
		return(-1);
	}

	bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
	write(fd, buffer, bytes_written);
	close(fd);
	return(0);
}

Int GPIOUnexport(int pin)
{
	char buffer[BUFFER_MAX];
	ssize_t bytes_written;
	int fd;

	fd = open("/sys/class/gpio/unexport", O_WRONLY);
	if (-1 == fd) {
		fprintf(stderr, "Failed to open unexport for writing!\n");
		return(-1);
	}

	bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
	write(fd, buffer, bytes_written);
	close(fd);
	return(0);
}

Int GPIODirection(int pin, int dir)
{
	static const char s_directions_str[]  = "in\0out";

#define DIRECTION_MAX 35
	char path[DIRECTION_MAX];
	int fd;

	snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/direction", pin);
	fd = open(path, O_WRONLY);
	if (-1 == fd) {
		fprintf(stderr, "Failed to open gpio direction for writing!\n");
		return(-1);
	}

	if (-1 == write(fd, &s_directions_str[IN == dir ? 0 : 3], IN == dir ? 2 : 3)) {
		fprintf(stderr, "Failed to set direction!\n");
		return(-1);
	}

	close(fd);
	return(0);
}

Int GPIORead(int pin)
{
#define VALUE_MAX 30
	char path[VALUE_MAX];
	char value_str[3];
	int fd;

	snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
	fd = open(path, O_RDONLY);
	if (-1 == fd) {
		fprintf(stderr, "Failed to open gpio value for reading!\n");
		return(-1);
	}

	if (-1 == read(fd, value_str, 3)) {
		fprintf(stderr, "Failed to read value!\n");
		return(-1);
	}

	close(fd);

	return(atoi(value_str));
}

Int GPIOWrite(int pin, int value)
{
	static const char s_values_str[] = "01";

	char path[VALUE_MAX];
	int fd;

	snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin);
	fd = open(path, O_WRONLY);
	if (-1 == fd) {
		fprintf(stderr, "Failed to open gpio value for writing!\n");
		return(-1);
	}

	if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1)) {
		fprintf(stderr, "Failed to write value!\n");
		return(-1);
	}

	close(fd);
	return(0);
}

Если файл с исходным кодом называется blink.c, можно скомпилировать код с помощью следующей команды:

gcc –Wall –o blink blink.c

Заключение

В этом учебном руководстве по работе с платой UP создается простейшая электрическая схема; плата UP и программа на языке C, использующая механизм Linux sysfs, управляют работой светодиода, который должен мигнуть 10 раз.

В следующем учебном руководстве в этой серии мы будем регулировать яркость светодиода с помощью данных глубины, поступающих от камеры R200 и межплатформенного API Intel® RealSense™, для чего нам придется несколько переработать и электрическую съему, и программу на C.

Как начать разработку решений для автоматизированного вождения автомобилей

$
0
0

От безопасных дорог до комфортных поездок на работу — автоматизированное вождение призвано изменить к лучшему жизнь обычных людей и всего общества.

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

 



Основы автомобильного движения

Vehicle sensing traffic lights and pedestrian

На рисунке показан водитель без рук на рулеУровни автоматизированного вождения

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

Полностью автоматизированное вождение— водитель становится пассажиром, полагаясь на встроенный интеллект автомобиля.

 

 

Облачная средаЦентр обработки данных

Данные, создаваемые одним автоматизированным автомобилем, схожи с объемом информации, генерируемым почти 3000 человек. Центр обработки данных будет иметь важное значение для хранения, обмена и защиты огромного объема данных, генерируемых алгоритмами углубленного изучения, и для выбора места такого автоматизированного автомобиля на дороге.

 

5G 5G

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

 

Глаза Интерфейс человек-компьютер

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

  • Управление медиа-данными

  • Абсолютная доступность и возможности подключения

  • Системы безопасности и облачные подключения

  • Интерфейс человек-компьютер, гарантирующий надежное взаимодействие водителя и автомобиля

 

Аппаратные средстваВстроенные в автомобиль вычислительные возможности

С развитием автоматизированных автомобилей все больше будут использоваться всевозможные датчики, данные и вычислительные мощности. Уже сейчас автомобиль с помощью датчиков генерирует почти один гигабайт данных в секунду. Созданные корпорацией Intel, энергоэффективные процессоры и специальные программируемые массивы шлюзов (FGPA) предназначены для обеспечения высокой производительности в расчете на ватт потребляемой энергии.

 


 

Решения для автоматизации вождения

 

Vehicle sensing traffic in blind spotФормирование безаварийного стиля вожденияe

Сложность обучения систем автомобиля и навигации посредством изучения окружающей обстановки требует существенных мощностей процессоров. Для формирования "органов чувств"автомобиля и принятия им верных решений необходимы алгоритмы углубленного изучения и способы контроля окружающей обстановки.

 


Для создания безопасных и автономных автомобилей необходимо следующее:

  1. Основы углубленного изучения для алгоритмов систем всесторонней помощи при вождении.
     
  2. Возможность обработки огромных объемов данных об окружающей среде.
     
  3. Способность изучения существующей обстановки.
    • ​​Доступ к разработкам типовых методов компьютерного зрения
    • Смешанная обработка данных, получаемых из различных камер
    • Методы распознавания объектов в видеоданных и их отслеживания
Комплект Intel® Deep Learning SDK 
Предназначен для решения алгоритмов и обработки данных с помощью следующих инфраструктур:

   •   Intel® Distribution for Caffe — популярное в сообществе пользователей приложение для распознавания изображений. (GitHub*)

   •  Intel® Software Optimization for Theano* — библиотека Python*, используемая для создания и обучения специальных моделей. (GitHub)

Получить SDK
Комплект Intel® Computer Vision SDKдля решения визуальных проблем.

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

 

Экран компьютера с демонстрацией программирования алгоритмовОбработка огромных объемов данных

Автоматизированный автомобиль формирует, использует и обрабатывает огромное количество данных. Вам потребуются инструменты для ускорения и оптимизации обработки данных.

 

Библиотека Intel® Data Analytics Acceleration Library(Intel® DAAL)— Создавайте решения для совершенствования производительности систем машинного обучения, в особенности, для зависимых от временных факторов данных сетей автомобильных контроллеров (CAN).

Intel® MPI Library— Данная библиотека предоставляет аналитику распределенных вычислительных систем (многокомпьютерных) и используется для моделирования повышения производительности центра обработки данных автоматизированного вождения.

Эти инструментальные средства доступны в комплекте Intel® Parallel Studio XE.

 

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

Для устройств в автоматизированном автомобиле, как на приборной панели, так и в багажнике, требуется простой и наращиваемый способ программирования. Используя массив специальных программируемых шлюзов, вы можете:

  • Пользоваться преимуществами приложения OpenCL™, способного выполнять оптимизацию кода ядра и создавать цельный образ FPGA за одно действие
  • Применять анализатор производительности, демонстрирующий возможности ядра, наряду с составлением подробного отчета об оптимизации
  • Запускать эмулятор для быстрой и простой отладки функциональных возможности ядра
Все эти функции доступны в комплекте Intel® FPGA SDK для технологии OpenCL™.

 

Перегруженный центр обработки данных с многочисленными экранами, демонстрирующими трафик на дорогеУстраняйте узкие места и недостатки

 

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

 

Средства ускорения и анализа данных

Intel® Trace Analyzer и Intel Trace Collector— графическое средство, позволяющее создать наглядное представление данных и анализ загрузки вашего центра обработки данных.

Intel® Distribution for Python* — используется для совершенствования производительности кода в автоматизированном центре обработки данных.

Эти инструментальные средства доступны в комплекте Intel® Parallel Studio XE.

Библиотека Intel® Math Kernel Library (Intel® MKL)— ускоряет математическую обработку и процедуры нейронных сетей для повышения производительности вычислительных систем автомобиля.

Анализатор Intel® VTune™ Amplifier— содержит дополнительные инструменты анализа, такие как мониторинг производительности всех процессоров в автоматизированном автомобиле, а также мощные инструменты для настройки приложений OpenCL™ и графических процессоров.

Эти инструментальные средства доступны в комплекте Intel® System Studio 2017.

 

Футуристический взгляд на приборную панель автомобиляПодключите автомобиль к водителю

Автоматизированному автомобилю необходимо взаимодействие с водителем и "осмысление"данных, которые он получает от различных датчиков. Эти данные нуждаются в своевременной и эффективной обработке.

 

Intel® Integrated Performance Primitives (Intel® IPP)  — набор высококачественных, готовых к использованию, низкоуровневых компоновочных блоков. Они представляют собой готовые решения для обработки в автоматизированном автомобиле изображений, сигналов и данных.

Эти инструментальные средства доступны в комплекте Intel® System Studio 2017.

 



Ближайшее и уже не такое далекое будущее

Мы стремимся перенести наше представление об автоматизированном автомобиле на совершенно новый уровень с помощью надежных и быстрых инструментальных средств для разработчиков.
 

Технический обзор комплекта Intel® GO™ Automotive Software Development Kit (SDK)

Этот комплект призван объединить существующие средства и расширить их инструментарий с помощью новейшей технологии автоматизированного вождения автомобиля. Состав первой версии:

  • Новый комплект Intel® Computer Vision SDK
  • Интегрированный комплект Intel® Deep Learning SDK
  • Средство маркировки данных датчиков

Зарегистрироваться

 

 

Инструкции по удалению веб-компонента Intel® RealSense™ SDK

$
0
0

В корпорации Intel принято решение о прекращении маркетинга и разработки веб-компонента Intel® RealSense™, а также связанных с ним примеров кода и приложений. Другие компоненты, в особенности, комплект Intel® RealSense™ SDK версий 2016-R2 и 2016-R3, не затрагивается этим решением.

Так как это приложение имеет уязвимость в системе безопасности одной из своих зависимостей, всем клиентам рекомендуется удалить такие компоненты из своих систем.

Служба Intel PSIRT опубликовала на сайте www.intel.com/securityрекомендации по безопасности, INTEL-SA-00066, с подробной информацией о возможном воздействии на используемые системы и объявляет о немедленном прекращении поддержки веб-компонента Intel® RealSense™.

Это уведомление и относящиеся к нему действия вступают в силу с 1 февраля 2017 г.

Инструкции по удалению в ОС Windows® 10:

  1. Используйте настройки Microsoft Windows или функцию поиска для перехода в диалог "System (Система) -> Apps & Features (Программы и компоненты)".
  2. Удалите два компонента.
    1. Intel(R) Technology Access
    2. Intel® RealSense™ SDK Web Runtime

Инструкции по удалению в ОС Windows 7*:

  1. Перейдите в диалог Windows "Пуск -> Панель управления -> Программы и компоненты".
  2. Удалите два компонента в списке установленных программ.
    1. Intel® RealSense™ SDK Web Runtime
    2. Intel(R) Technology Access

Новые возможности управления: Intel® RealSense™ и GestureWorks Fusion*

$
0
0

Веление времени: развитие управления с помощью жестов

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

Управление с помощью жестов достаточно интенсивно развивается в области игр, а технология Intel® RealSense™ — одна из передовых разработок в этом направлении. Интеграция управления жестами в настольные ПК была вопросом времени. Привычная клавиатура и мышь были дополнены расширенной системой голосовых команд и жестов. Представьте все доступные возможности. Можно запустить или остановить воспроизведение фильма, произнеся соответствующие команды вслух, а для приостановки и перемотки достаточно простого набора жестов. Также можно управлять сложным трехмерным объектом в системе автоматического проектирования на большом настенном экране с помощью рук, передавая различные элементы модели коллегам.

Такова концепция компании Ideum из города Корралес, шт. Нью-Мексико, США. Эта компания создает современные системы взаимодействия с пользователями. Компания была образована свыше 15 лет назад и занималась проектированием и внедрением мультисенсорных столов, киосков и настенных панелей. Решения этой компании используются в ведущих учреждениях, в том числе в Чикагском музее естественной истории им. Филда, в Смитсоновском музее поселений американских индейцев, в музее современного искусства в Сан-Франциско. Для работы над решением GestureWorks Fusion * разработчики Ideum решили задействовать технологию Intel RealSense.

В программе GestureWorks Fusion специалисты Ideum стремятся совместить удобство и простоту управления с помощью жестов и голоса с возможностью управления широким набором приложений для настольных ПК, начиная с воспроизведения поточного мультимедиа. Вопросы и возможности, с которыми столкнулись разработчика Ideum, можно считать общими для всех новшеств в области взаимодействия человека и компьютера.

В этом примере описываются решение GestureWorks и использование многорежимного ввода для создания мощной и интуитивной системы, способной интерпретировать жесты и голосовые команды. Показано, как разработчики Ideum использовали Intel® RealSense™ SDKи новый режим Cursor, позволяющий им быстро и удобно взаимодействовать с традиционными приложениями, разработанными для клавиатуры и мыши. Кроме того, в статье описываются проблемы, с которыми столкнулись проектировщики и разработчики, и описываются подходы к решению этих проблем при помощи сочетания технологий Intel и Ideum.

Представляем GestureWorks Fusion *

GestureWorks Fusion — это приложение, использующее камеру Intel® RealSense™ SR300для получения многорежимного ввода, например жестов и голосовых команд. В первоначальной версии этого программного продукта пользователи могут интуитивно управлять работой веб-сайтов для воспроизведения поточного видео, таких как YouTube *. Используя традиционные элементы управления графического пользовательского интерфейса, пользователи могут воспроизводить, приостанавливать, перематывать видео, не дотрагиваясь до мыши, клавиатуры и экрана. Благодаря прямой обратной связи система очень удобна в использовании и освоении.

GestureWorks Fusion* makes it fun and easy to enjoy streaming video web sites, such as YouTube*, using intuitive voice and gesture commands on systems equipped with an Intel® RealSense™ camera SR300.
GestureWorks Fusion * дает возможность удобно и интересно использовать веб-сайты поточного видео, например YouTube *, используя для управления интуитивные голосовые команды и жесты, если система оборудована камерой Intel® RealSense™ SR300.

Камера Intel RealSense SR300 является усовершенствованием камеры Intel RealSense F200, которая в свое время была одной из первых и самых компактных камер со встроенными модулями съемки двухмерного изображения и глубины. Как и в модели F200, в камере Intel RealSense SR300 реализована возможность съемки цветного изображения высокой четкости с разрешением 1080p и расширенные возможности трехмерной съемки, причем увеличена допустимая дальность действия. Вместе с микрофоном эта камера является идеальным решением для отслеживания головы и рук, а также для распознавания лица. «В камере Intel RealSense SR300 нас привлекает то, что эта камера может делать все это одновременно, очень быстро и исключительно надежно», — поясняет Пол Лейси (Paul Lacey), технический директор компании Ideum и руководитель группы разработки GestureWorks.

Решение GestureWorks Fusion опирается на возможности и наработки двух существующих продуктов компании Ideum: GestureWorks Core и GestureWorks Gameplay 3. GestureWorks Gameplay 3 — это приложение для Microsoft Windows *, обеспечивающее сенсорное управление в популярных играх на ПК. Пользователи могут создавать собственные сенсорные элементы управления, обмениваться ими с другими пользователями или загружать элементы управления, созданные сообществом.

GestureWorks Core — это система многорежимного взаимодействия, проводящая полный трехмерный анализ жестов головы и рук и поддерживающая взаимодействие с помощью мультисенсорного ввода и голоса. В GestureWorks Core SDK представлено свыше 300 готовых жестов и поддерживаются наиболее распространенные языки программирования, в том числе C++, C#, Java * и Python *.

Изначально программа GestureWorks Fusion была разработана для работы с Google Chrome * и Microsoft Internet Explorer * под управлением Microsoft Windows 10. При этом предполагается, что GestureWorks Fusion будет работать с любыми системами, оборудованными камерой Intel RealSense. Компания также планирует развить свою систему, чтобы она смогла работать с широким набором приложений, в том числе с играми, офисными приложениями и программами для презентаций.

Проблемы и решения

Специалисты Ideum столкнулись с несколькими проблемами, стремясь сделать решение GestureWorks интуитивным и удобным в использовании, особенно для новых пользователей. Разработчики уже обладали опытом создания мультисенсорных столов и стеновых панелей для общественных учреждений и знали, что пользователей раздражает, если техника работает не так, как они ожидают. Опираясь на этот опыт, проектировщики решили сделать жесты как можно более простыми и сосредоточиться на наиболее привычном поведении.

GestureWorks* Fusion features a simple set of gestures that map directly to the application user interface, offering touchless access to popular existing applications.
В GestureWorks * Fusion используется простой набор жестов, напрямую связанных с пользовательским интерфейсом приложения; реализуется доступ к популярным существующим приложением без использования традиционного или сенсорного интерфейса.

Следующий набор затруднений возник в связи с ограничениями в операционной системе и в браузере. Так, современные веб-браузеры не оптимизированы для многорежимного ввода. Из-за этого затрудняется определение, к примеру, фокуса ввода пользователя, то есть места на экране, с которым пользователь намеревается взаимодействовать. При этом также нарушается плавность перемещения между разными сегментами интерфейса и даже переключения с одного веб-сайта на другой. В то же время стало очевидно, что невозможно просто отказаться от прокрутки и щелчков, эти операции являются основополагающими для рабочего стола, они используются практически во всех современных приложениях.

Более того, для интерфейсов такого типа важна возможность интуитивно включать и отключать управление при помощи жестов. Человек интуитивно понимает, какие жесты являются значимыми и в каких обстоятельствах. Приложению, в отличие от человека, для анализа жестов требуется контекст. В GestureWorks Fusion достаточно поднять руку в поле зрения камеры, чтобы включить интерфейс управления с помощью жестов. Если рука выходит из поля зрения камеры, интерфейс жестов исчезает; такой подход аналогичен отображению дополнительной информации при наведении указателя мыши.

Сам по себе многорежимный ввод связан с определенным проблемами программирования, повлиявшими на архитектуру и реализацию программ Ideum. Например, в приложении Ideum для каждого жеста предусмотрена голосовая команда, из-за чего могут возникать конфликты. «Многорежимный ввод нуждается в тщательной проработке для достижения успеха», — поясняет Лейси.

Не менее важным фактором оказалось и время отклика, оно должно соответствовать уже существующим стандартам, заданным для мышей и клавиатур (в противном случае резко возрастает трудоемкость всех операций для пользователя, которому приходится постоянно корректировать ввод). Это означает, что время отклика должно быть не более 30 мс, а в идеале — 6 мс. Этот показатель Лейси называет «Святым Граалем взаимодействия человека и компьютера».

И наконец, разработчики Ideum столкнулись с проблемой индивидуальной настройки. В приложении GestureWorks Fusion настройка по большей части осуществляется неявно, «за кадром». «Система автоматически адаптируется и изменяется, постепенно повышая удобство работы по мере использования продукта», — поясняет Лейси.

Использование Intel® RealSense™ SDK

Разработчики получают доступ к возможностям камеры Intel RealSense SR300 посредством пакета Intel RealSense SDK, который представляет собой стандартный интерфейс для обширной библиотеки алгоритмов обнаружения и распознавания шаблонов. Эти алгоритмы включают ряд полезных функций, таких как распознавание лица, распознавание жестов и речи, переработку текста в речь.

Система разделена на набор модулей, при помощи которых разработчики могут сосредоточиться на различных аспектах взаимодействия. Некоторые компоненты, такие как интерфейс SenseManager, обеспечивают координацию общих функций, в том числе отслеживание лица и рук, и управляют конвейером многорежимного управления, включая управление вводом-выводом и обработкой. Прочие элементы, такие как интерфейсы Capture и Image, позволяют разработчикам отслеживать работу камеры и работать с отснятыми изображениями. Интерфейсы HandModule, FaceModule и AudioSource предоставляют доступ к отслеживанию лица и рук, к звуковому вводу.

Intel RealSense SDK упрощает интеграцию благодаря поддержке множества стилей и методик написания программного кода. Предусмотрены оболочки для нескольких распространенных языков программирования, платформ и игровых движков, C++, C#, Unity *, Processing и Java. В Intel RealSense SDK также обеспечивается ограниченная поддержка браузерных приложений с JavaScript *. Пакет Intel RealSense SDK упрощает реализацию сложных алгоритмов взаимодействия человека с компьютером; благодаря этому пакету разработчики могут сосредоточиться на повышении удобства пользователей, а не на написании кода алгоритмов распознавания жестов и речи.

«Благодаря решениям Intel значительно снижается стоимость разработки, — отмечает Лейси. — Технологии Intel принимают на себя важную часть работы, они гарантируют ввод и распознавание жестов, что существенно упрощает задачи разработчиков, дает им возможность с уверенностью заниматься новыми проектами по взаимодействию между человеком и компьютером».

Работа над решением

При создании GestureWorks Fusion разработчики Ideum применили ряд новых методик. Рассмотрим, к примеру, проблему определения фокуса пользователя. Для устранения этой проблемы было решено использовать новый режим Cursor, впервые появившийся в Intel RealSense SDK 2016 R1 для Windows. В режиме Cursor доступен быстрый и точный способ отслеживать одну точку, которая соответствует общему положению руки. Благодаря этому система получает возможность поддерживать небольшой набор жестов, таких как щелчки, открытие и закрытие ладони, вращение в любую сторону. В режиме Cursor проблема фокуса пользователя решена: система интерпретирует ввод жестами таким же образом, как ввод мышью.

Using the ingenious Cursor Mode available in the Intel® RealSense™ SDK, developers can easily simulate common desktop actions such as clicking a mouse.
Используя встроенный режим Cursor в Intel® RealSense™ SDK, разработчики могут без труда имитировать распространенные действия по управлению рабочим столом, например щелчок мыши.

Используя эти жесты, пользователи могут с высокой точностью и уверенностью перемещаться в приложении и управлять его работой «на весу», не прикасаясь к клавиатуре, мыши и экрану. Режим Cursor помогает и в других областях. «Мы обнаружили, помимо прочего, что не все жестикулируют одинаково», — заявил Лейси. Режим Cursor помогает сопоставлять схожие жесты с одним и тем же контекстом, что способствует повышению общей надежности работы.

Разработчики также подчеркнули простоту внедрения режима Cursor в существующие прототипы, что позволило выпустить новые версии GestureWorks Fusion всего за несколько часов: потребовалось добавить лишь несколько строк кода. Например, в GestureWorks режим Cursor используется для получения координат изображения указателя и для синтезирования событий мыши, как показано в следующем фрагменте кода.

// Get the cursor image coordinates
PXCMPoint3DF32 position = HandModule.cursor.QueryCursorPointImage();

// Synthesize a mouse movement
mouse_event (
   0x0001,
                                   // MOUSEEVENTF_MOVE
   (uint)(position.x previousPosition.x),     // dx
   (uint)(position.y previousPosition.y),     // dy
   0,
                               // dwData flags empty
   0                                          // dwExtraInfo flags empty
};

...


// Import for calls to unmanaged WIN32 API
[DllImport("user32.dll", CharSet = CharSet.Auto,
   CallingConvention = CallingConvention.StdCall)]

public static extern void mouse_event(uint dwFlags, uint dx, uint dy,
   uint cButtons, int dwExtraInfo);

После этого можно быстро определить, в каком окне находится фокус, с помощью стандартного API Windows.

// Get the handle of the window with focus

IntPtr activeWindow = GetForegroundWindow();

// Create a WINDOWINFO structure object

WINDOWINFO info = new WINDOWINFO(); GetWindowInfo(activeWindow, ref info);

// Get the actiive window text to compare with pre-configured controllers
StringBuilder builder = new StringBuilder(256);
GetWindowText(activeWindow, builder, 256);

...

// Import for calls to unmanaged WIN32 API
[DllImport("user32.dll")]

static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]

static extern int GetWindowText(IntPtr hWnd, StringBuilder builder,
   int count);

В режиме Cursor отслеживание работает вдвое быстрее, чем отслеживании всей руки, при этом вдвое ниже потребление электроэнергии. «Удобство использования — это формирование ожидаемых результатов как можно более предсказуемым образом, — поясняет Лейси. — Когда достигнут очень высокий уровень уверенности в жестах, это позволяет сосредоточиться на доработке других областей взаимодействия с пользователями; это также способствует снижению стоимости разработки и позволяет добиться более значительных результатов, затратив меньше ресурсов».

Для поддержки многорежимного ввода в GestureWorks используется API распознавания речи корпорации Майкрософт (Microsoft SAPI), содержащий компоненты, отсутствующие в Intel RealSense SDK, например частичные гипотезы. Это позволяет сопровождать каждый жест соответствующей голосовой командой, как показано в следующем фрагменте кода.

IspRecognizer* recognizer;
ISpRecoContext* context;

// Initialize SAPI and set the grammar

...


// Create the recognition context
recognizer>CreateRecoContext(&context);

// Create flags for the hypothesis and recognition events
ULONGLONG recognition_event = SPFEI(SPEI_RECOGNITION) |
   SPFEI(SPEI_HYPOTHESIS);

// Inform SAPI about the events to which we want to subscribe context>SetInterest(recognition_event, recognition_event);

// Begin voice recognition
<recognition code …>

Для распознавания намерений пользователей применяется распараллеливание, что позволяет взаимодействовать и предоставлять обратную связь практически одновременно при скорости 60 кадров в секунду. «Эффективное использование многопоточной обработки дало нам возможность снизить время реагирования, — заявляет Лейси. — Многопоточность расширила наши возможности, мы смогли добиться результатов, в осуществимости которых мы даже не были уверены, причем с поддержанием низкого уровня задержек».

Разработчики Ideum также постарались полнее описать и формализовать взаимодействие на основе жестов, разработав расширенный XML-сценарий конфигураци, который назвали языком разметки жестов — Gesture Markup Language (GML). Используя GML, удалось создать полную библиотеку жестов, которую можно использовать для решения проблем взаимодействия между человеком и компьютером. Благодаря этому разработчикам удалось избежать чрезмерной сложности алгоритмов распознавания жестов, поскольку диапазон ввода при отслеживании движений и мультисенсорном управлении может охватывать тысячи разновидностей.

«Влияние многорежимного взаимодействия вместе с камерой Intel RealSense можно описать одним словом: контекст, — отметил Лейси. — Мы получаем возможность распознавать новый уровень контекста, открывающий принципиально новые возможности взаимодействия человека с компьютером».

Дальнейшие действия

Разработчики Ideum планируют развивать GestureWorks Fusion, добавить поддержку дополнительных приложений, в том числе офисных пакетов, графических приложений и систем автоматизированного проектирования, в которых для управления виртуальными объектами будут использоваться трехмерные жесты. Приложение GestureWorks может также работать на планшетах, поддерживающих технологию Intel RealSense, в домашних развлекательных системах и даже в автомобилях, а также вместе с другими технологиями — в решениях, резко отличающихся от традиционных настольных ПК и ноутбуков.

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

«В ходе работы над GestureWorks Fusion нам удалось обнаружить новые способы взаимодействия в современной среде, — поясняет Лейси. — Впрочем, вне зависимости от среды должна быть возможность просто управлять устройством с помощью жестов и речи и выбирать нужные последовательности действий, не сталкиваясь с необходимостью управлять устройством традиционным образом, как компьютером».

Ресурсы

Посетите сайт Intel Developer Zone, чтобы приступить к работе с технологией Intel RealSense.

Узнайте больше о компании Ideum, разработавшей GestureWorks.

Загрузите пакет Intel® RealSense™ SDK по адресу https://software.intel.com/en-us/intel-realsense-sdk .

Обзор процессора Intel® Core™ 6-го поколения (Skylake)

$
0
0

Введение

Процессоры Intel® Core™ 6-го поколения (Skylake) появились в 2015 году. Благодаря целому ряду усовершенствований на уровне ядра, «системы на кристалле» и на уровне платформы, по сравнению с 14-нм процессором предыдущего поколения (Broadwell), процессор Skylake пользуется огромной популярностью в устройствах самых разных типов, предназначенных для работы, творчества и игр. В этой статье приводится обзор основных возможностей и усовершенствований Skylake, а также новые модели использования, такие как пробуждение по голосовым командам и вход в систему по биометрическим данным в ОС Windows* 10.

Архитектура Skylake

Процессоры Intel Core 6-го поколения производятся по 14-нм технологии с учетом более компактного размера процессора и всей платформы для использования в устройствах разных типов. При этом также повышена производительность архитектуры и графики, реализованы расширенные средства безопасности. На рис. 1 показаны эти новые и улучшенные возможности. Фактическая конфигурация в устройствах ОЕМ-производителей может различаться.

Рисунок 1.Архитектура Skylake и сводка усовершенствований [1].

Основные направления развития процессоров

Производительность

Повышение производительности напрямую обусловлено предоставлением большего количества инструкций исполняющему блоку: за каждый тактовый цикл выполняется больше инструкций. Такой результат достигается за счет улучшений в четырех категориях [Ibid].

  • Улучшенный внешний интерфейс. Благодаря более точному предсказанию ветвления и повышенной вместимости увеличивается скорость декодирования инструкций, упреждающая выборка работает быстрее и эффективнее.
  • Улучшенное распараллеливание инструкций. За каждый такт обрабатывается больше инструкций, при этом параллельное выполнение инструкции улучшено благодаря более эффективной буферизации.
  • Улучшенные исполняющие блоки (ИБ). Работа исполняющих блоков улучшена по сравнению с прежними поколениями за счет следующих мер:
    • Укорочены задержки.
    • Увеличено количество ИБ.
    • Повышена эффективность электропитания за счет отключения неиспользуемых блоков.
    • Повышена скорость выполнения алгоритмов безопасности.
  • Улучшенная подсистема памяти. В дополнение к улучшению внешнего интерфейса, параллельной обработке инструкций и исполняющих блоков усовершенствована и подсистема памяти в соответствии с пропускной способностью и требованиями производительности перечисленных выше компонентов. Для этого использованы следующие меры:
    • Повышенная пропускная способность загрузки и сохранения.
    • Улучшенный модуль упреждающей выборки.
    • Хранение на более глубоком уровне.
    • Буферы заполнения и обратной записи.
    • Улучшенная обработка промахов страниц.
    • Повышенная пропускная способность при промахах кэша второго уровня.
    • Новые инструкции управления кэшем.

Рисунок 2.Схема микроархитектуры ядра Skylake

На рис. 3 показано улучшение параллельной обработки в процессорах Skylake по сравнению с процессорами прежних поколений (Sandy Bridge — второе, а Haswell — четвертое поколение процессоров Intel® Core™).

Рисунок 3.Улучшенное распараллеливание по сравнению с прежними поколениями процессоров

Благодаря усовершенствованиям, показанным на рис. 3, производительность процессора возросла на 60 % по сравнению с ПК пятилетней давности, при этом перекодирование видео осуществляется в 6 раз быстрее, а производительность графической подсистемы выросла в 11 раз.

Рисунок 4.Производительность процессора Intel® Core™ 6-го поколения по сравнению с ПК пятилетней давности

  1. Источник: корпорация Intel. На основе результатов процессоров Intel® Core™ i5-6500 и Intel® Core™ i5-650 в тесте SYSmark* 2014.
  2. Источник: корпорация Intel. На основе результатов процессоров Intel® Core™ i5-6500 и Intel® Core™ i5-650 в тесте Handbrake с QSV.
  3. Источник: корпорация Intel. На основе результатов процессоров Intel® Core™ i5-6500 и Intel® Core™ i5-650 в тесте 3DMark* Cloud Gate.

Подробные результаты сравнения производительности настольных ПК и ноутбуков см. по следующим ссылкам:

Производительность настольных компьютеров: http://www.intel.com/content/www/us/en/benchmarks/desktop/6th-gen-core-i5-6500.html

Производительность ноутбуков: http://www.intel.com/content/www/us/en/benchmarks/laptop/6th-gen-core-i5-6200u.html

Экономия электроэнергии

Настройка ресурсов на основе динамического потребления

В устаревших системах используется технология Intel® SpeedStep® для балансировки производительности и расхода электроэнергии с помощью алгоритма подключения ресурсов по запросу. Этот алгоритм управляется операционной системой. Такой подход неплох для постоянной нагрузки, но неоптимален при резком повышении нагрузки. В процессорах Skylake технология Intel® Speed Shift передает управление оборудованию вместо операционной системы и дает возможность процессору перейти на максимальную тактовую частоту примерно за 1 мс, обеспечивая более точное управление электропитанием[3].

Рисунок 5.Сравнение технологий Intel® Speed Shift и Intel® SpeedStep®

На приведенном ниже графике показана скорость реагирования процессора Intel® Core™ i5 6200U с технологией Intel Speed Shift по сравнению с технологией Intel SpeedStep.

  • Скорость реагирования выросла на 45 %.
  • Обработка фотографий на 45 % быстрее.
  • Построение графиков на 31 % быстрее.
  • Локальные заметки на 22 % быстрее.
  • Средняя скорость реагирования выросла на 20 %.

[Согласно результатам теста WebXPRT* 2015 компании Principled Technologies*, в котором измеряется производительность веб-приложений в целом и в отдельных областях, таких как обработка фотографий, создание заметок, построение графиков. Дополнительные сведения см. на сайте www.principledtechnologies.com.]

Дополнительная оптимизация электропитания достигается за счет динамической настройки ресурсов на основе их потребления: путем снижения мощности неиспользуемых ресурсов с помощью ограничения мощности векторных расширений Intel® AVX2, когда они не используются, а также с помощью снижения потребляемой мощности при бездействии.

Мультимедиа и графика

Видеоадаптер Intel® HD Graphics воплощает целый ряд усовершенствований с точки зрения обработки трехмерной графики, обработки мультимедиа, вывода изображения на экран, производительности, электропитания, возможности настройки и масштабирования. Это весьма мощное устройство в семействе встроенных в процессор графических адаптеров (впервые появившихся в процессорах Intel® Core™ второго поколения). На рис. 6 сравниваются некоторые из этих усовершенствований, обеспечивающих повышение производительности графики более чем в 100 раз[2].

[Пиковое значение FLOPS шейдера при частоте 1 ГГц]

Рисунок 6.Возможности графической подсистемы в разных поколениях процессоров

Рисунок 7.Улучшение обработки графики и мультимедиа в разных поколениях

Микроархитектура 9-го поколения

Графическая архитектура 9-го поколения аналогична микроархитектуре графики 8-го поколения процессоров Intel® Core™ Broadwell (5-го поколения), но улучшена с точки зрения производительности и масштабируемости. На рис. 8 показана блок-схема микроархитектуры поколения 9[8], состоящей из трех основных компонентов.

  • Экран.С левой стороны.
  • Вне среза. L-образная часть в середине. Включает поточный обработчик команд, глобальный диспетчер потоков и графический интерфейс (GTI).
  • Срез.Включает исполняющие блоки (ИБ).

По сравнению с 8-м поколением микроархитектура 9-го поколения отличается более высокой максимальной производительностью на 1 Вт, повышенной пропускной способностью и отдельным контуром электропитания/тактов для компонента вне среза. Это позволяет более эффективно управлять электропитанием в таких режимах использования, как при воспроизведении мультимедиа. Срез является настраиваемым компонентом. Например, GT3 поддерживает до двух срезов (каждый срез с 24 исполняющими блоками), GT4 (Halo) может поддерживать до 3 срезов (цифра после букв GT означает количество исполняющих блоков на основе их использования: GT1 поддерживает 12 исполняющих блоков, GT2 — 24, GT3 — 48, а GT4 — 72 исполняющих блока). Архитектура допускает настройку в достаточно широких пределах, чтобы использовать минимальное количество исполняющих блоков в сценариях с низкой нагрузкой, поэтому потребление электроэнергии может составлять от 4 до более чем 65 Вт. Поддержка API графических процессоров 9-го поколения доступна в DirectX* 12, OpenCL™ 2.x, OpenGL* 5.x и Vulkan*.

Рисунок 8.Архитектура графических процессоров 9-го поколения

Подробнее об этих компонентах см. по адресу (ссылка IDF https://software.intel.com/sites/default/files/managed/c5/9a/The-Compute-Architecture-of-Intel-Processor-Graphics-Gen9-v1d0.pdf)

В число усовершенствований и возможностей обработки мультимедиа входят следующие[2]:

  • Потребление менее 1 Вт, потребление 1 Вт при проведении видеоконференций.
  • Ускорение воспроизведения необработанного видео с камеры (в формате RAW) с помощью новых функций VQE для поддержки воспроизведения видео RAW с разрешением до 4K60 на мобильных платформах.
  • Новый режим New Intel® Quick Sync Video с фиксированными функциями (FF).
  • Поддержка широкого набора кодеков с фиксированными функциями, ускорение декодирования с помощью ГП.

На рис. 9 показаны кодеки графического процессора поколения 9.

Примечание.Поддержка кодеков мультимедиа и обработки может быть доступна не во всех ОС и приложениях.

Рисунок 9.Поддержка кодеков процессорами Skylake

В число усовершенствований и возможностей работы экрана входят следующие:

  • Смешение, масштабирование, поворот и сжатие изображения.
  • Поддержка высокой плотности пикселей (разрешение свыше 4K).
  • Поддержка передачи изображения по беспроводному подключению с разрешением вплоть до 4K30.
  • Самостоятельное обновление (PSR2).
  • CUI X.X — новые возможности, повышенная производительность.

В процессорах Intel® Core™ I7-6700K предусмотрены следующие возможности для геймеров (см. рис. 10). Также поддерживается технология Intel® Turbo Boost 2.0, технология гиперпоточности Intel® и возможность разгона. Прирост производительности по сравнению с ПК пятилетней давности достигает 80 %. Дополнительные сведения см. на этой странице: http://www.intel.com/content/www/us/en/processors/core/core-i7ee-processor.html

  1. Источник: корпорация Intel. На основе результатов процессоров Intel® Core™ i7-6700K и Intel® Core™ i7-875K в тесте SPECint*_rate_base2006 (коэффициент копирования 8).
  2. Источник: корпорация Intel. На основе результатов процессоров Intel® Core™ i7-6700K и Intel® Core™ i7-3770K в тесте SPECint*_rate_base2006 (коэффициент копирования 8).
  3. Описываемые возможности доступны в отдельных сочетаниях процессоров и наборов микросхем. Предупреждение. Изменение тактовой частоты и/или напряжения может: (i) привести к снижению стабильности системы и снижению срока эксплуатации системы и процессора; (ii) привести к отказу процессора и других компонентов системы; (iii) привести к снижению производительности системы; (iv) привести к дополнительному нагреву или к другим повреждениям; (v) повлиять на целостность данных в системе. Корпорация Intel не тестирует и не гарантирует работу процессоров с техническими параметрами, отличными от установленных.

Рисунок 10.Возможности процессоров Intel® Core™ i7-6700K

Масштабируемость

Микроархитектура Skylake — это настраиваемое ядро: единая конструкция для двух направлений, одно — для клиентских устройств, другое — для серверов без ущерба для требований по мощности и производительности обоих сегментов. На рис. 11 показаны различные модели процессоров и их эффективность с точки зрения мощности для использования в устройствах разного размера и разных типов — от сверхкомпактных Compute Stick до мощных рабочих станций на основе Intel® Xeon®.

Рисунок 11.Доступность процессоров Intel® Core™ для различных типов устройств

Расширенные возможности безопасности

Расширения Intel® Software Guard Extensions (Intel® SGX): Intel SGX — это набор новых инструкций в процессорах Skylake, дающий возможность разработчикам приложений защищать важные данные от несанкционированных изменений и доступа посторонних программ, работающих с более высоким уровнем прав. Это дает приложениям возможность сохранять конфиденциальность и целостность конфиденциальной информации [1], [3]. Skylake поддерживает инструкции и потоки для создания безопасных анклавов, позволяя использовать доверенные области памяти. Дополнительные сведения о расширениях Intel SGX см. на этой странице: https://software.intel.com/en-us/blogs/2013/09/26/protecting-application-secrets-with-intel-sgx

Расширения защиты памяти Intel® (Intel® MPX): Intel MPX — новый набор инструкций для проверки переполнения буфера во время выполнения. Эти инструкции позволяют проверять границы буферов стека и буферов кучи перед доступом к памяти, чтобы процесс, обращающийся к памяти, имел доступ лишь к той области памяти, которая ему назначена. Поддержка Intel MPX реализована в Windows* 10 с помощью встроенных функций Intel MPX в Microsoft Visual Studio* 2015. В большинстве приложений C/C++ можно будет использовать Intel MPX: для этого достаточно заново скомпилировать приложения, не изменяя исходный код и связи с устаревшими библиотеками. При запуске библиотек, поддерживающих Intel MPX, в системах, не поддерживающих Intel MPX (процессоры Intel® Core™ 5-го поколения и более ранних), производительность никак не изменяется: ни повышается, ни снижается. Также можно динамически включать и отключать поддержку Intel MPX [1], [3].

Мы рассмотрели усовершенствования и улучшения архитектуры Skylake. В следующем разделе мы рассмотрим компоненты Windows 10, оптимизированные для использования преимуществ архитектуры Intel® Core™.

Новые возможности Windows 10

Возможности процессоров Intel Core 6-го поколения дополняются возможностями операционной системы Windows 10. Ниже перечислены некоторые основные возможности оборудования Intel и ОС Windows 10, благодаря которым платформы Intel® под управлением Windows 10 работают эффективнее, стабильнее и быстрее[3].

Ϯ Ведется совместная работа Intel и Майкрософт для реализации дальнейшей поддержки в Windows.

Рисунок 12.Возможности Skylake и Windows* 10

Кортана

Голосовой помощник Кортана корпорации Майкрософт доступен в Windows* 10 и дает возможность управлять компьютером с помощью голоса после произнесения ключевой фразы «Привет, Кортана!». Функция пробуждения по голосовой команде использует конвейер обработки звука на ЦП для повышения достоверности распознавания, но можно передать эту функцию на аппаратный цифровой сигнальный процессор звука со встроенной поддержкой Windows 10[3].

Windows Hello*

С помощью биометрического оборудования и Microsoft Passport* служба Windows Hello поддерживает различные механизмы входа в систему с помощью распознавания лица, отпечатков пальцев или радужки глаз. Система без установки каких-либо добавочных компонентов поддерживает все эти возможности входа без использования пароля. Камера переднего обзора Intel® RealSense™ (F200/SR300) поддерживает биометрическую проверку подлинности на основе распознавания лица[3].

Рисунок 13.Windows* Hello с технологией Intel® RealSense™

Фотографии на рис. 13 показывают, как реперные точки, обнаруженные на лице камерой F200, используются для идентификации пользователя и входа в систему. На основе расположения 78 реперных точек на лице создается шаблон лица при первой попытке пользователя войти в систему с помощью распознавания лица. При следующей попытке входа сохраненное расположение реперных точек, полученное камерой, сравнивается с сохраненным шаблоном. Возможности службы Microsoft Passport в сочетании с возможностями камеры позволяют добиться уровня безопасности с показателями ложного допуска в систему в 1 из 100 000 случаев и ложного отказа в допуске в 2–4 % случаев.

Ссылки

  1. Intel’s next generation microarchitecture code-named Skylake by Julius Mandelblat: http://intelstudios.edgesuite.net/idf/2015/sf/ti/150818_spcs001/index.html
  2. Next-generation Intel® processor graphics architecture, code-named Skylake, by David Blythe: http://intelstudios.edgesuite.net/idf/2015/sf/ti/150818_spcs003/index.html
  3. Intel® architecture code-named Skylake and Windows* 10 better together, by Shiv Koushik: http://intelstudios.edgesuite.net/idf/2015/sf/ti/150819_spcs009/index.html
  4. Skylake for gamers: http://www.intel.com/content/www/us/en/processors/core/core-i7ee-processor.html
  5. Intel’s best processor ever: http://www.intel.com/content/www/us/en/processors/core/core-processor-family.html
  6. Skylake Desktop Performance Benchmark: http://www.intel.com/content/www/us/en/benchmarks/desktop/6th-gen-core-i5-6500.html
  7. Skylake Laptop Performance Benchmark: http://www.intel.com/content/www/us/en/benchmarks/laptop/6th-gen-core-i5-6200u.html
  8. The compute architecture of Intel® processor graphics Gen9: https://software.intel.com/sites/default/files/managed/c5/9a/The-Compute-Architecture-of-Intel-Processor-Graphics-Gen9-v1d0.pdf

Учебное руководство: Использование технологии Intel® RealSense™ в Unreal Engine* 3. Часть 2

$
0
0

Download PDF 854 KB

GoTutorial: Использование технологии Intel® RealSense™ в Unreal Engine* 3. Часть 1 

В первой части мы создали простую карту игры со структурой костей лица в редакторе Unreal 3. Здесь, во второй части, мы покажем, как использовать возможности Intel RealSense SDKв игре на движке Unreal.

Настройка Visual Studio 2010 для образца игры

Приведенные ниже действия настраивают ваш файл карты в качестве карты по умолчанию для примера игры путем редактирования файла INI.

  1. Перейдите в папку \ExmapleGame\Config.
  2. Откройте файл DefaultEngine.ini и отредактируйте его, как показано ниже.

[URL]

MapExt=umap

Map=test.umap

LocalMap=BLrealsense_Map.umap

TransitionMap=BLrealsense_Map.umap

EXEName=ExampleGame.exe

DebugEXEName=DEBUG-ExampleGame.exe

GameName=Example Game

GameNameShort=EG

  1. Откройте файл ExampleEngine.ini и отредактируйте его, как показано ниже.

    [URL]

    Protocol=unreal

    Name=Player

    Map=test.umap

    LocalMap=BLrealsense_Map.umap

    LocalOptions=

    TransitionMap=BLrealsense_Map.umap

    MapExt=umap

    EXEName=ExampleGame.exe

    DebugEXEName=DEBUG-ExampleGame.exe

    SaveExt=usa

    Port=7777

    PeerPort=7778

    GameName=Example Game

    GameNameShort=EG

  2. Откройте файл проекта или решения UE3 Visual Studio в папке \Development\Src – UE3.sln либо откройте UE3.sln в Visual Studio.

    Рисунок 1. Microsoft Visual Studio* 2010.

  3. Соберите и запустите приложение, как описано ранее. Появится начальное окно Unreal и ваша игра.

Использование системы координат в Unreal Engine

Перед компоновкой с Intel® RealSense™ SDKважно понять систему координат в Unreal.

Положение отслеживается по осям X-Y-Z (см. классы Origin и RotOrigin в исходном коде UE3), а поворот — по эйлеровым углам (P-Y-R) и кватернионам (дополнительные сведения см. в статье https://en.wikipedia.org/wiki/Quaternion for more detail). 


Рисунок 2. Система координат

У кватерниона поворота вокруг поперечной оси — один скалярный множитель и три векторных множителя.

Для преобразования эйлеровых углов в кватернионы

Углы X-Y-Z

Автоматическое расширение установки отладчика в Visual Studio 2010 (необязательно)

Символы отладки массива структуры костей, расположения и поворота изначально были зашифрованы и не отображаются в Visual Studio в доступном для чтения виде. Для просмотра символов отладки выполните перечисленные ниже действия.

  1. Найдите файл Autoexp.dat.
     

    В Visual Studio под управлением 64-разрядной версии Windows 7 он находится в папке C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger.

  2. Найдите сценарий отладки и откройте его.
     

    Папка UE3\ Development/External/Visual Studio Debugging/AUTOEXP.DAT_addons.txt

  3. Скопируйте все разделы [AutoExpand] и [Visualizer] в файл Autoexp.dat.

Включение поддержки Intel® RealSense™ SDK в Unreal Engine 3

В этом разделе описываются изменения в Unreal Engine 3, связанные с Intel RealSense SDK. Эти изменения необходимо применить после установки Intel RealSense SDK и Depth Camera Manager. API отслеживания реперных точек на лице и положения головы в Intel RealSense SDK используются для обработки выражения лица и движения головы персонажа. Отслеживание положения головы осуществляется интуитивно, поскольку значения поворота вокруг продольной, поперечной и вертикальной осей можно использовать в Unreal Engine 3 без дополнительных изменений. Отслеживание реперных точек на лице выполняется несколько сложнее.


Рисунок 3.Повороты вокруг трех осей

Intel RealSense SDK предоставляет 76 отслеживаемых точек на лице. Для каждого выражения лица (например, для подмигивания или открытого рта) у соответствующих точек есть определенный диапазон значений. Например, если глаз закрыт, то расстояние между точками 12 и 16 будет близко к 0, а при открытом глазе это расстояние будет больше 0, причем оно будет различаться у разных людей.

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


Рисунок 4.Реперные точки на лице и их номера в Intel® RealSense™ SDK

<UE3> — папка, в которую установлен UE3. Необходимо изменить следующие четыре файла.

  • <UE3>\Development\Src\UnrealBuildTool\Configuration\UE3BuildConfiguration.cs
  • <UE3>\Development\Src\UnrealBuildTool\Configuration\UE3BuildWin32.cs
  • <UE3>\Development\Src\Engine\Inc\UnSkeletalMesh.h
  • <UE3>\Development\Src\Engine\Src\UnSkeletalComponent.cpp

UE3BuildConfiguration.cs (необязательно)

public static bool bRealSense = true;

Важные для RealSense коды заключены во фразу «#if USE_REALSENSE». Это предложение используется для определения фразы «#if USE_REALSENSE» в файле UE3BuildWin32.cs. Если изменить код, указав значение false, ссылка на соответствующий код RealSense не будет задействована при компиляции. Это необязательно.

UE3BuildWin32.cs

if (UE3BuildConfiguration.bRealSense)
{
SetupRealSenseEnvironment();
}
void SetupRealSenseEnvironment()
{
      GlobalCPPEnvironment.Definitions.Add("USE_REALSENSE=1");
      String platform = (Platform == UnrealTargetPlatform.Win64 ? "x64" : "Win32");

      GlobalCPPEnvironment.SystemIncludePaths.Add("$(RSSDK_DIR)/include");
      FinalLinkEnvironment.LibraryPaths.Add("$(RSSDK_DIR)/lib/" + platform);

      if (Configuration == UnrealTargetConfiguration.Debug) {
           FinalLinkEnvironment.AdditionalLibraries.Add("libpxc_d.lib");
      } else {
           FinalLinkEnvironment.AdditionalLibraries.Add("libpxc.lib");
      }
}

Определение USE_REALSENSE, которое будет использовано для включения или отключения Intel RealSense SDK в исходном коде (необязательно).

Поскольку Unreal Engine 3 работает на основе makefile, необходимо добавлять файл заголовка Intel RealSense SDK и путь к библиотеке в раздел include проекта и в путь к библиотекам.

UnSkeletalMesh.h

#if USE_REALSENSE
	PXCFaceData* faceOutput;
	PXCFaceConfiguration *faceConfig;
	PXCSenseManager *senseManager;

	void InitRealSense();
	void ReleaseRealSense();
#endif

Это часть объявления классов и функций Intel RealSense SDK. Фрагмент, отвечающий за работу со структурой костей, находится в разделе UpdateSkelPos() файла UnSkeletalComponent.cpp.

UnSkeletalComponent.cpp

#if USE_REALSENSE
	#include "pxcfacedata.h"
	#include "pxcfacemodule.h"
	#include "pxcfaceconfiguration.h"
	#include "pxcsensemanager.h"

	FLOAT rsEyeMin = 6;
	FLOAT rsEyeMax = 25;

	FLOAT rsMouthMin = 5;
	FLOAT rsMouthMax = 50;

	FLOAT rsMouthWMin = 40;
	FLOAT rsMouthWMax = 70;

	FLOAT chMouthMin = -105;
	FLOAT chMouthMax = -75;
……
#endif

Включите файлы заголовков Intel RealSense SDK. Определяет минимальные и максимальные значения пользователя и игровых персонажей. Начинается с rs (значение пользователя) или с ch (значение игрового персонажа). Эти значения должны изменяться в соответствии с внешним видом пользователя и игрового персонажа. Например, при моргании определяется расстояние при открытом и при закрытом глазе, и в соответствующей пропорции эти данные применяются к персонажу игры.

void USkeletalMeshComponent::Attach()
{
……
#if USE_REALSENSE
	senseManager = NULL;
	InitRealSense();
#endif

Функция Attach() вызывает функцию InitRealSense() для инициализации классов, относящихся к Intel RealSense SDK и настройки камеры.

#if USE_REALSENSE
void USkeletalMeshComponent::InitRealSense() {
	if (senseManager != NULL) return;

	faceOutput = NULL;

	senseManager = PXCSenseManager::CreateInstance();
	if (senseManager == NULL)
	{
 // обнаружена ошибка
	}

	PXCSession *session = senseManager->QuerySession();
	PXCCaptureManager* captureManager = senseManager-> QueryCaptureManager();

Функция InitRealSense() указывает, какая камера будет использоваться, и создает соответствующие экземпляры классов для распознавания лиц.

void USkeletalMeshComponent::UpdateSkelPose( FLOAT DeltaTime, UBOOL bTickFaceFX )
{
……
#if USE_REALSENSE
if (senseManager->AcquireFrame(false) >= PXC_STATUS_NO_ERROR) {
	faceOutput->Update();
	int totalNumFaces = faceOutput->QueryNumberOfDetectedFaces();
	if (totalNumFaces > 0) {

Функция UpdateSkelPose() используется для отслеживания положения головы и реперных точек на лице.

// Голова
FVector v(yaw, roll, pitch);

LocalAtoms(6).SetRotation(FQuat::MakeFromEuler(v));
LocalAtoms(6).NormalizeRotation();

Отслеживание положения головы осуществляется интуитивно, поскольку значения поворота вокруг продольной, поперечной и вертикальной осей из Intel RealSense SDK можно использовать без каких-либо дополнительных изменений и вычислений.


Рисунок 5. Реперные точки на лице и номера, используемые при различных выражениях лица (мимика рта, открытые или закрытые глаза)

Для моргания используются реперные точки 12, 16 и 20, 24, а для мимики рта — 47, 51, 33, 39 (подробности реализации зависят от предпочтений разработчиков).

// Рот
FLOAT mouthOpen = points[51].image.y - points[47].image.y;
mouth = chMouthMax - (mouthOpen - rsMouthMin) * mouthRatio;

mouthOpen = points[47].image.x - points[33].image.x;
rMouthWOpen = chMouthWMin + (mouthOpen - rsMouthWMin) * mouthWRatio;

mouthOpen = points[39].image.x - points[47].image.x;
lMouthWOpen = chMouthWMin + (mouthOpen - rsMouthWMin) * mouthWRatio;

cMouth = chMouthCMax - (mouthOpen - rsMouthWMin) * mouthCRatio;
// Левый глаз
FLOAT eyeOpen = points[24].image.y - points[20].image.y;
lEyeInner = chEyeInnerMin + (eyeOpen - rsEyeMin) * innerEyeRatio;
lEyeOuter = chEyeOuterMin + (eyeOpen - rsEyeMin) * outerEyeRatio;
lEyeUpper = chEyeUpperMin + (eyeOpen - rsEyeMin) * upperEyeRatio;
// Правый глаз
eyeOpen = points[16].image.y - points[12].image.y;
rEyeInner = chEyeInnerMin + (eyeOpen - rsEyeMin) * innerEyeRatio;
rEyeOuter = chEyeOuterMin + (eyeOpen - rsEyeMin) * outerEyeRatio;
rEyeUpper = chEyeUpperMin + (eyeOpen - rsEyeMin) * upperEyeRatio;
rEyeLower = chEyeLowerMin + (eyeOpen - rsEyeMin) * lowerEyeRatio;

BN_Lips_Corner_R, BN_Lips_Corner_L, BN_Jaw_Dum используются для мимики рта, а BN_Blink_UpAdd, BN_Blink_Lower, BN_Blink_Inner, BN_Blink_Outer — для моргания. (Номера всех костей см. в разделе «Структура костей лица в примерах персонажей».)

// Рот
FVector m(90, 0, mouth);
LocalAtoms(59).SetRotation(FQuat::MakeFromEuler(m));

LocalAtoms(57).SetTranslation(FVector(mouthWXZ[2], rMouthWOpen, mouthWXZ[3])); // Правая сторона
LocalAtoms(58).SetTranslation(FVector(mouthWXZ[4], lMouthWOpen * -1, mouthWXZ[5])); // Левая сторона

// Левый глаз
LocalAtoms(40).SetTranslation(FVector(eyeXY[0], eyeXY[1], lEyeUpper)); // Верхняя часть
LocalAtoms(41).SetTranslation(FVector(eyeXY[2], eyeXY[3], lEyeLower)); // Нижняя часть
LocalAtoms(42).SetTranslation(FVector(eyeXY[4], eyeXY[5], lEyeInner)); // Внутренняя часть
LocalAtoms(43).SetTranslation(FVector(eyeXY[6], eyeXY[7], lEyeOuter)); // Внешняя часть

// Правый глаз
LocalAtoms(47).SetTranslation(FVector(eyeXY[8], eyeXY[9], rEyeLower)); // Нижняя часть
LocalAtoms(48).SetTranslation(FVector(eyeXY[10], eyeXY[11], rEyeOuter)); // Внешняя часть
LocalAtoms(49).SetTranslation(FVector(eyeXY[12], eyeXY[13], rEyeInner)); // Внутренняя часть
LocalAtoms(50).SetTranslation(FVector(eyeXY[14], eyeXY[15], rEyeUpper)); // Верхняя часть
void USkeletalMeshComponent::ReleaseRealSense() {
	if (faceOutput)
		faceOutput->Release();

	faceConfig->Release();
	senseManager->Close();
	senseManager->Release();
}

Закройте и высвободите все экземпляры соответствующих классов Intel RealSense SDK.

Структура костей лица в примерах персонажей

В этом примере лицо состоит из 58 костей. На рисунке каждый прямоугольник соответствует одной кости. Ниже следует полный список наименований костей.


Рисунок 6.Наименования костей

Заключение

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

Об авторах

Чангйин Ким (Chunghyun Kim) — инженер по разработке приложений в отделе Intel Software and Services корпорации Intel. Он занимается оптимизацией игр и графики в архитектуре Intel®.

Питер Хонг (Peter Hong) — инженер по разработке приложений в отделе Intel Software and Services корпорации Intel. Его специализация — применение Intel RealSense SDK для отслеживания лица и рук, трехмерного сканирования и других целей.

Дополнительные сведения

Epic Unreal Engine
https://www.unrealengine.com

Intel RealSense SDK
http://software.intel.com/realsense

Часть 1

Интеграция настройки Intel® AMT в консоль управления

$
0
0

Сложность профилей настройки технологии Intel® Active Management (Intel® AMT)зависит от задействованных компонентов. При интеграции Intel AMT в консоль управления прежде всего необходимо определить, какие компоненты должна поддерживать консоль.

Изучить различные варианты настройки можно в мастере ACU. Эта программа входит в состав загружаемого пакета Intel® Setup and Configuration Software (Intel® SCS). Дополнительные сведения о доступных вариантах см. в документации к Intel SCS, входящей в состав загружаемого пакета Intel SCS.

Интеграция настройки на основе хоста в консоль

Чаще всего при интеграции в консоль используется настройка на основе хоста. В этом методе применяется ОС хоста (Windows* 7 или более поздней версии) и сценарий для проведения настройки.

В этой статье показано, как мастер ACU создает образец профиля настройки. Профиль предоставляет нужный XML-код, поэтому консоль может создавать и шифровать настройку для развертывания на устройствах Intel AMT.

Примечание. Если консоль создает XML-файл профиля, следует зашифровать этот файл с помощью программы SCSEncryption.exe перед развертыванием на устройстве Intel AMT. Если не использовать шифрование, файл будет отправлен клиенту в виде обычного текста, при этом все пароли в файле profile.xml будут уязвимы.

Для автоматизации процесса настройки нужно создать файл profile.xml и сценарий, выполняющий настройку. Вот основные действия.

  1. Скопируйте папку Configurator и файл profile.xml из папки загрузки SCS в расположение, доступное для клиента Intel AMT (в локальную папку, в сетевую папку, на USB-накопитель и т. д.).
  2. Откройте командную строку с правами администратора, перейдите в папку acuconfigи выполните следующую команду: "acuconfig.exe configamt <profile.xml> /decryptionpassword <PASSWORD>"
  3. Настройка считается успешной при выходе программы с кодом 0.

Настройка на основе хоста, как описано выше, обладает одним существенным недостатком: невозможно настроить устройство Intel AMT в режим управления администратора. Незначительно изменив профиль настройки, можно организовать доступ микропрограммы к серверу установки и настройки, к сертификату подготовки. Дополнительные сведения о режиме управления администратора и режиме управления клиента см. в разделе Установка и настройка интеграции Intel vPro.

Использование мастера ACU

Мастер ACU поддерживает несколько методов настройки устройств Intel AMT. В рамках этой статьи нам нужен лишь один из способов для получения нашего образца XML-файла. Чтобы создать файл profile.xml с помощью мастера ACU, выполните следующие действия.

  1. Создайте профиль. Для этого откройте мастер ACU и выберите Создать параметры для настройки нескольких систем. option.
  2. Откроется окно Intel® AMT Configuration Utility: Profile Designer.
  3. Щелкните зеленый плюс.
  4. Когда откроется мастер профилей настройки, нажмите кнопку Далее.
  5. Когда откроется окно дополнительных параметров мастера профилей настройки, нажмите кнопку Далее.
  6. Откроется окно системных параметров мастера профилей настройки.
    1. Введите пароль RFB, если включено шифрование (не обязательно).
      1. RFB — это протокол удаленного кадрового буфера, он также называется RFB5900. Если включить пароль RFB, можно будет использовать стандартное средство просмотра VNC, использующее порт 5900, вместо средства просмотра VNC, предназначенного для Intel AMT, которое также использует порт 16994 или 16995.
    2. Введите пароль в поле Использовать следующий пароль для всех систем.
    3. Для изменения параметров сети нажмите кнопку Задать... button.
      1. Если в ОС хоста включен протокол DHCP, изменения не требуются. Обратите внимание на изменения, которые необходимы, если в ОС используется статический IP-адрес.
      2. Нажмите кнопку Отмена.
    4. Нажмите кнопку Далее.
  7. Откроется окно «Мастер профилей настройки — готово».
    1. Введите нужное имя профиля, например «profile».
    2. Зашифруйте XML-файл, добавив и подтвердив пароль.
    3. Нажмите кнопку Готово.
  8. Откроется окно Intel® AMT Configuration Utility: Profile Designer.
    1. Обратите внимание на путь к профилю, показанный на экране.
      1. Он должен выглядеть примерно так: <имя пользователя>\documents\SCS_Profile.
    2. Закройте мастер ACU.

Примечание. Подробные инструкции по использованию мастера ACU см. в документации в загружаемом пакете Intel® SCS.

 

Использование файла Profile.xml

Итак, у нас есть зашифрованный файл profile.xml. Теперь нужно расшифровать этот файл, чтобы раскрыть параметры настройки, с помощью программы SCSEncryption.exe, входящей в состав загружаемого пакета Intel SCS. После расшифровки можно будет открыть файл в программе просмотра XML и увидеть XML-теги.

Синтаксис расшифровки:

>SCSEncryption.exe Decrypt <имя входного файла> <пароль> /Output <имя выходного файла>

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

Выбор режима управления

В процессе настройки устройство Intel AMT будет переведено в один из двух режимов: режим управления клиента или режим управления администратора. Основное различие заключается в том, что в режиме управления клиентатребуется согласие пользователядля операций перенаправления, а в режиме управления администратора оно не нужно.

Согласие пользователя

Функция согласия пользователей обеспечивает дополнительный уровень безопасности для удаленных пользователей. Требуется отправка кода согласия пользователя, если возникает необходимость перенаправления или управления удаленным клиентом. Например, доступ через удаленный KVM-коммутатор или выполнение команды IDEr считается операцией перенаправления, а получение состояния электропитания или перезагрузка не считаются такими операциями.

Дополнительные ресурсы

Заключение

При управлении устройствами, поддерживающими Intel AMT, одной из наиболее важных задач является настройка. Процесс настройки достаточно прост при использовании ACUconfig.exe, но процесс создания профиля требует более подробного рассмотрения.

С помощью ACUWizard.exe можно создать образец файла profile.xml, демонстрирующий возможности создания динамических консольных профилей, поэтому нет необходимости использовать какой-либо определенный статический профиль. Это дает нам возможность управлять устройствами Intel AMT в более широких пределах, настраивать согласие пользователей, беспроводные профили, списки управления доступом Active Directory и т. д.

Об авторе

Джо Остер (Joe Oster) работает в корпорации Intel с 2006 года, он занимается технологиями Intel® vPro™ и Intel AMT. Свободное время он проводит на ферме своей семьи или управляет дронами и радиоуправляемыми самолетами.


Data Plane Development Kit (DPDK): приступая к работе

$
0
0

Базовые сведения

Для быстрой обработки пакетов требуется обнаруживать битовые шаблоны и быстро (со скоростью работы канала) принимать решения о нужных действиях на основе наличных битовых шаблонов. Эти битовые шаблоны могут принадлежать одному из нескольких заголовков, присутствующих в пакете, которые, в свою очередь, могут находиться на одном из нескольких уровней, например Ethernet, VLAN, IP, MPLS или TCP/UDP. Действия, определяемые по битовым шаблонам, могут различаться — от простого перенаправления пакетов в другой порт до сложных операций перезаписи, для которых требуется сопоставление заголовка пакета из одного набора протоколов с другими. К этому следует добавить функции управления трафика и политик трафика, брандмауэры, виртуальные частные сети и т. п., вследствие чего сложность операций, которые необходимо выполнять с каждым пакетом, многократно возрастает.

Чтобы добиться работы на ожидаемом уровне производительности при скорости канала 10 Гбит/с и размере пакета в 84 байта, процессор должен обрабатывать 14,88 миллиона пакетов в секунду. Оборудование общего назначения было недостаточно мощным для обработки пакетов с такой скоростью. Поэтому в большинстве рабочих сетевых систем обработкой пакетов в каналах данных занимаются контроллеры ASIC и сетевые процессоры NPU. К очевидным недостаткам такого подхода относятся: недостаточная гибкость, высокая стоимость, длительные циклы разработки, зависимость от определенного поставщика. Тем не менее, благодаря доступности более быстрых и дешевых ЦП и программных ускорителей, таких как Data Plane Development Kit (DPDK), можно переложить эту нагрузку на оборудование общего назначения.

Что такое Data Plane Development Kit?

DPDK — это набор библиотек и драйверов для быстрой обработки пакетов. Можно превратить процессор общего назначения в собственный сервер пересылки пакетов, не приобретая дорогостоящие коммутаторы и маршрутизаторы.

DPDK обычно работает под управлением Linux*, хотя существует версия некоторых компонентов DPDK для FreeBSD*. DPDK — это проект с открытым исходным кодом, распространяющийся по лицензии BSD. Самые поздние исправления и дополнения, предоставленные сообществом, доступны в основной ветви.

DPDK не является набором сетевых протоколов и не реализует такие функции, как перенаправление уровня 3, IPsec, брандмауэр и т. д. При этом в дереве включены различные примеры приложенийдля помощи в разработке таких компонентов.

Поддержка и службы предоставляются несколькими компаниями, включая Intel.

DPDK дает возможность:

  • принимать и отправлять пакеты с использованием наименьшего количества циклов ЦП (обычно не более 80 циклов);
  • разрабатывать алгоритмы быстрой записи пакетов (наподобие tcpdump);
  • запускать быстрые стеки сторонних разработчиков.

Производительность некоторых функций обработки пакетов составляет миллионы кадров в секунду при использовании 64-байтовых пакетов с сетевыми платами PCIe*.

Использование Data Plane Development Kit

Чтобы приступить к работе с DPDK, выполните следующие действия:

  1. Если у вас нет Linux, загрузите virtual box и установите машину Linux.
  2. Загрузите последнюю версию DPDK с помощью одной из команд в зависимости от используемого ядра Linux.
    wget www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
    или
    sudo apt-get www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
    или
    yum install www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
  3. Распакуйте ZIP-файл DPDK.
    tar zxvf dpdk-2.1.0.tar.gz
  4. Изучите исходный код.
    cd dpdk-2.1.0
    Чтобы ознакомиться с содержанием каталогов, посмотрите видео Глава 1: структура каталогов DPDK, сценарии и настройка DPDKв курсе Network Builder University Введение в DPDK.

  5. Проверьте конфигурацию ЦП.
    cd tools
    ./cpu_layout.py


    Образец вывода
  6. Проверьте конфигурацию сетевых адаптеров.

    stack@nde01 tools]$ ./dpdk_nic_bind.py --status
    Network devices using DPDK-compatible driver
    ============================================
    0000:03:00.0 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused=
    0000:03:00.1 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused=

    Network devices using kernel driver
    ===================================
    0000:05:00.0 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f0 drv=i40e unused=igb_uio
    0000:05:00.1 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f1 drv=i40e unused=igb_uio
    0000:07:00.0 'I350 Gigabit Network Connection' if=eno1 drv=igb unused=igb_uio *Active*
    0000:07:00.1 'I350 Gigabit Network Connection' if=eno2 drv=igb unused=igb_uio


    Other network devices
    =====================
    <none>
  7. Настройте DPDK:
    setup.sh — полезная программа, помогающая скомпилировать DPDK и настроить систему. Для запуска этой программы нужны права root. В каталоге tools введите:

    ./setup.sh

    В результате вы получите примерно следующее:

    [stack@nde01 tools]$ ./setup.sh
    ------------------------------------------------------------------------------
    RTE_SDK exported as /admin/software_installfiles/dpdk-2.1.0
    ------------------------------------------------------------------------------
    ----------------------------------------------------------
    Step 1: Select the DPDK environment to build
    ----------------------------------------------------------
    [1] i686-native-linuxapp-gcc
    [2] i686-native-linuxapp-icc
    [3] ppc_64-power8-linuxapp-gcc
    [4] tile-tilegx-linuxapp-gcc
    [5] x86_64-ivshmem-linuxapp-gcc
    [6] x86_64-ivshmem-linuxapp-icc
    [7] x86_64-native-bsdapp-clang
    [8] x86_64-native-bsdapp-gcc
    [9] x86_64-native-linuxapp-clang
    [10] x86_64-native-linuxapp-gcc
    [11] x86_64-native-linuxapp-icc
    [12] x86_x32-native-linuxapp-gcc

    ----------------------------------------------------------
    Step 2: Setup linuxapp environment
    ----------------------------------------------------------
    [13] Insert IGB UIO module
    [14] Insert VFIO module
    [15] Insert KNI module
    [16] Setup hugepage mappings for non-NUMA systems
    [17] Setup hugepage mappings for NUMA systems
    [18] Display current Ethernet device settings
    [19] Bind Ethernet device to IGB UIO module
    [20] Bind Ethernet device to VFIO module
    [21] Setup VFIO permissions

    ----------------------------------------------------------
    Step 3: Run test application for linuxapp environment
    ----------------------------------------------------------
    [22] Run test application ($RTE_TARGET/app/test)
    [23] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

    ----------------------------------------------------------
    Step 4: Other tools
    ----------------------------------------------------------
    [24] List hugepage info from /proc/meminfo
    ----------------------------------------------------------
    Step 5: Uninstall and system cleanup
    ----------------------------------------------------------
    [25] Uninstall all targets
    [26] Unbind NICs from IGB UIO or VFIO driver
    [27] Remove IGB UIO module
    [28] Remove VFIO module
    [29] Remove KNI module
    [30] Remove hugepage mappings

    [31] Exit Script
    Option:

    Нужно выбрать параметр и настроить.

    1. На шаге 1 требуется выбрать сборку среды DPDK. Можно выбрать x86_64-native-linuxapp-gcc; это вариант 10.
    2. На шаге 2 нужно настроить среду приложения Linux.Параметр 13— загрузка последней версии модуля IGB UIO и компиляция последней версии драйвера IGB UIO. IGB UIO — это модуль ядра DPDK, работающий с перечислением PCI и обрабатывающий прерывания состояния ссылок в пользовательском режиме (вместо ядра). Также требуется поддержка выделения сверхкрупных страниц, например страниц 2 МБ для NUMA, параметр 17. Параметр 18— отображение текущих параметров Ethernet, как на шаге 6 выше. С помощью параметра 19,удалите привязку нужного сетевого адаптера от драйвера ядра Linux и привяжите его к установленному модулю IGB UIO с помощью параметра 13.

    Внимание!Не привязывайте к DPDK сетевой адаптер, используемый для внешних подключений, поскольку в этом случае будет утрачено подключение к устройству.

    Сведения об установке см. в видеоролике Глава 2: настройка DPDKв составе курса Network Builder University Введение в DPDK.

  8. Скомпилируйте образец приложения l2fwd. Это приложение перенаправления уровня 2, оно перенаправляет пакеты на основе MAC-адресов, а не IP-адресов.

    cd examples
    cd l2fwd
    export RTE_SDK=<папка установки dpdk>
    make
  9. Запустите образец приложения.

    Синтаксис: ./build/l2fwd -c COREMASK|-l CORELIST -n CHANNELS [options]

    ./build/l2fwd –c 0x3 –n 4 -- -p 0x3

    -c (шестнадцатеричная битовая маска ядер, нужно запустить одно)
    , например –c Ox3означает запуск на обоих ядрах, поскольку двоичное 11 = 0x3

    -n (количество каналов памяти)
    , например –n 4означает запуск на всех четырех каналах, доступных на процессоре Intel Xeon

    -p (маска порта)
    -p 0x3означает запуск на обоих портах, привязанных к dpdk, поскольку двоичное 11 = 0x3  

    В нашем тестировании этот образец приложения перенаправляет все пакеты, поступающие на порт 0, в порт 1 и наоборот. После запуска он переключается в цикл опрашивания, где опрашивает оба порта и обновляет статистику, например количество принятых и отправленных пакетов, каждые 10 секунд (см. на последнем снимке экрана ниже). На первом снимке экрана показан уровень EAL (уровень абстракции среды), проходящий через все логические ядра, которые связаны с физическими ядрами. На втором снимке экрана показаны устройства PCI/сетевые карты, привязанные к DPDK (драйвер IGB UIO, см. шаги 7 -> 2 выше) и использующие по этой причине драйвер rte_ixgbe_pmd (это драйвер опрашиваемого режима DPDK), а также сетевые карты, не находящиеся под управлением DPDK. На снимке экрана 3 показано одно логическое ядро, выделенное для каждого физического порта.



Подробные сведения о вариантах выполнения см. в разделе Глава 3: компиляция и запуск образца приложенияв курсе Network Builder University Введение в DPDK.

В образце приложения показана базовая функциональность перенаправления уровня 2. Если нужно измерить производительность DPDK, ознакомьтесь с курсом Intel Network Builder University Использование DPPD PROX, в котором Люк Провост, технический руководитель отдела Network Platforms Group корпорации Intel, измеряет производительность виртуальной сети с помощью DPPD (Data Plane Performance Demonstrator) Prox, чтобы помочь разработчикам программного обеспечения понять и использовать эти инструменты.

Заключение

DPDK — программный ускоритель, работающий в пользовательском пространстве в обход ядра Linux и предоставляющий доступ к сетевым адаптерам, ЦП и памяти для приложений, обрабатывающих пакеты. В этой статье приводится пошаговая инструкция по загрузке DPDK 2.1.0 на платформе Linux с компиляцией, настройкой и запуском образца приложения.

Для лучшего понимания терминов, использованных в приведенных выше видеороликах, и для изучения возможностей и программ DPDK ознакомьтесь со следующими ресурсами:

  • DPDK 101. В этом курсе Intel Network Builders University Эндрю Дигнан, инженер по приложениям для платформ в корпорации Intel, рассказывает о DPDK (на основе версии 2.1), в том числе о лицензировании, принципах обработки пакетов, библиотеках компонентов DPDK, проблемах с памятью в архитектуре Intel® и о настройке DPDK с точки зрения работы с памятью.
  • DPDK 201. В этом курсе Intel Network Builders University MJay, ведущий инженер по платформам в корпорации Intel, рассказывает о DPDK и описывает концепцию устройства DPDK (на основе версии 2.1), основные компоненты и причины их создания, а затем рассказывает о том, как разрабатывались образцы приложений.

Есть вопрос? Задайте его на форуме SDN/NFV.

Об авторе

Суджата Тибервала (Sujata Tibrewala) — менеджер сетевого сообщества и разработчик-евангелист в корпорации Intel. Она занималась разработкой сетевого программного обеспечения, а сейчас занимается технологиями, предназначенными для оптимизации распространенного сетевого оборудования с использованием SDN и NFV.

Как начать разработку решений для автоматизированного вождения автомобилей

$
0
0

От безопасных дорог до комфортных поездок на работу — автоматизированное вождение призвано изменить к лучшему жизнь обычных людей и всего общества.

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

 

Основы автомобильного движения

Уровни автоматизированного вождения

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

Полностью автоматизированное вождение — водитель становится пассажиром, полагаясь на встроенный интеллект автомобиля

Центр обработки данных

Данные, создаваемые одним автоматизированным автомобилем, схожи с объемом информации, генерируемым почти 3000 человек. Центр обработки данных будет иметь важное значение для хранения, обмена и защиты огромного объема данных, генерируемых алгоритмами углубленного изучения, и для выбора места такого автоматизированного автомобиля на дороге.

Мобильная связь 5G

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

Интерфейс человек-компьютер

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

  • Управление медиа-данными
  • Абсолютная доступность и возможности подключения
  • Системы безопасности и облачные подключения
  • Интерфейс человек-компьютер, гарантирующий надежное взаимодействие водителя и автомобиля

Встроенные в автомобиль вычислительные возможности

С развитием автоматизированных автомобилей все больше будут использоваться всевозможные датчики, данные и вычислительные мощности. Уже сейчас автомобиль с помощью датчиков генерирует почти один гигабайт данных в секунду. Созданные корпорацией Intel энергоэффективные процессоры и специальные программируемые массивы шлюзов (FGPA), а также программное обеспечение предназначены для обеспечения высокой производительности в расчете на ватт потребляемой энергии.

 

Решения для автоматизации вождения

Формирование безаварийного стиля вождения

Сложность обучения систем автомобиля и навигации посредством изучения окружающей обстановки требует существенных мощностей процессоров. Для формирования "органов чувств"автомобиля и принятия им верных решений необходимы алгоритмы углубленного изучения и способы контроля окружающей обстановки.

Для создания безопасных и автономных автомобилей необходимо следующее:

  1. Основы углубленного изучения для алгоритмов систем всесторонней помощи при вождении.
  2. Возможность обработки огромных объемов данных об окружающей среде.
  3. Способность изучения существующей обстановки.
    • Открытый доступ к аппаратным ускорителям для разработки общих механизмов компьютерного зрения
    • Смешанная обработка данных, получаемых из различных камер
    • Методы распознавания объектов в видеоданных и их отслеживание

 

Начните разработку программного обеспечения для автоматизированного вождения

Бета-версия комплекта Intel® GO™ Automotive SDK содержит полнофункциональный набор инструментальных средств для создания высокопроизводительных и энергоэффективных решений облачных платформ для автоматизированных автомобилей и центров обработки данных. Исследователи данных, разработчики систем и автоматизированных решений вождения могут использовать этот комплект для разработки и оптимизации производительности аппаратных компонентов, оптимизации систем и приложений, а также совершенствования датчиков восприятия и алгоритмов углубленного изучения. В составе комплекта несколько модулей процессов и инструментальных средств оптимизации, включая специализированные функции для разработки решений для автомобилей. Он также может быть сконфигурирован, чтобы разработчики могли загружать только то, что им нужно.

Подробнее

Примечание. Бета-версия комплекта для разработки доступна только для существующих клиентов-создателей решений автоматизированного вождения, сотрудничающих с корпорацией Intel. Разработчики могут запросить доступк комплекту. Хотя пока доступны не все инструментальные средства, большинство из можно загрузить по отдельности (например, Intel® System Studio, Intel® Distribution for Python, бесплатные библиотеки Intel® Performance Libraries и комплект Intel® Computer Vision SDK для инструментальных средств углубленного изучения). Корпорация Intel также работает над сертификацией в соответствии со стандартом ISO 26262 для приложений, для которых необходима сертификация функциональной безопасности (FuSa).¹

Разработка приложений для автомобилей

  • Подключите автомобиль к водителю
  • Ускорьте распространение датчиков и моделирование сред
  • Оптимизируйте производительность, меняйте и отлаживайте код
  • Ускоряйте подготовку к выпуску и проверку продукции

Автоматизированному автомобилю необходимо взаимодействие с водителем и "осмысление"данных, которые он получает от различных датчиков. Эти данные нуждаются в своевременной и эффективной обработке. Инструментальные средства комплекта Intel GO Automotive SDK для разработки программного обеспечения для автомобилей способствуют созданию, отладке, анализу и настройке кода, а также оптимизации систем и автоматизации тестирования. Во время создания кода для работы в автомобиле вы должны установить инструментальные средства комплектов SDK на рабочей станции на базе процессора Intel® (компьютер). Код компилируется на компьютере, который затем подключается и перемещает код в аппаратное обеспечение в автомобиле (цель).

К инструментальным средствам для разработки приложений для автомобилей относятся:

Intel® System Studio 2018 Beta Ultimate Edition — исчерпывающий комплект инструментальных средств и библиотек, способствующих разработке, отладке и настройке кода для целевых встраиваемых систем.

  • Несколько библиотек комплекта SDK работают совместно для:
    • Ускорения математических процессов и модулей нейронных сетей
    • Добавления высоко настраиваемых функций углубленного изучения и оптимизации разработки приложений автоматизированного вождения автомобилей
    • Предложения готовых решений, оптимизированных для аппаратных средств Intel® для обработки данных изображений и сигналов в автомобилях
  • Анализаторы и средства контроля оптимизируют эффективность памяти, отслеживают производительность гетерогенного оборудования в автономном автомобиле, совершенствуют энергопотребление и многое другое.
  • Компиляторы и отладчики повышают производительность приложений на архитектуре Intel®.

Библиотека Intel® Autonomous Driving Libraryимеет возможности потоковой обработки данных, алгоритмы и функции библиотек, к которым относятся машинное обучение, обработка сигналов и потоков, алгоритмы робототехники, линейная алгебра и многое другое.

Разработки для центров обработки данных

  • Создавайте наращиваемые многокомпьютерные приложения для управления и обслуживания различных данных
    машинное обучение
  • Наращивайте производительность, возможности обработки данных и многое другое с помощью программного обеспечения для центров обработки данных
    средства повышения производительности

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

  • Intel® Advisor: Используйте этот набор средств анализа для оптимизации векторизации и создания прототипов потоковой обработки данных.
  • Библиотека Intel® MPI Library: Эта библиотека используется для повышения производительности центров обработки данных во время моделирования решений вождения автомобилей и аналитики распределенных вычислений для обработки данных, собираемых в автомобилях.
  • Инструментарии Intel® Trace Analyzer и Intel® Trace Collector. Это графическое средство, позволяющее создать наглядное представление данных и анализ загрузки вашего центра обработки данных.
  • Intel® Distribution for Python*. Этот дистрибутив является неотъемлемой частью решения повышения производительности кода центров обработки данных, работающих на архитектуре Intel, в частности, для эмуляции решений для автоматизированного вождения автомобилей.

Дополнительные процессы автоматизированного вождения

Другие процессы и инструментальные средства комплекта Intel GO Automotive SDK призваны ускорить углубленное изучение, маркировку и визуализацию данных, и воспользоваться всеми преимуществами массивов Intel FPGA. К ним относятся:

  • Intel® FPGA SDK для технологии OpenCL™. Это инструментальное средство упрощает проектирование на основе FPGA и создание основных функций с аппаратным ускорением ядра для языка С в OpenCL™.
  • Инфраструктуры обучения углубленного обучения. Используйте популярные инфраструктуры обучения, такие как дистрибутив Intel® для ПО Caffe* и оптимизации Intel для TensorFlow* для создания моделей классификации и обработки.
  • Развертывание углубленного изучения. Оптимизируйте модели углубленного изучения для развертывания в автоматизированных автомобилях для последующей интеграции развернутых моделей в приложениях.
  • Средство Intel для маркировки/визуализации данных. Представление данных из автомобилей, поступающих по нескольким потокам из вашей системы обработки, на одном интуитивном экране с наименованием информации для создания сценариев обучения и моделирования. Менеджеры маркировки могут разделять работу групп для совместной маркировки в нескольких процессах.

ФункцииНачать

¹Замечание о планах развития. Вся приведенная информация может быть изменена без уведомления. Обратитесь к вашему представителю Intel для получения новейших спецификаций и планов развития продукции Intel.

Viewing all 357 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>