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

Технология Intel® RealSense™ в игре Ombre Fabula* с управлением жестами

$
0
0

Автор: Джон Тиррел (John Tyrrell)

OmbreFabula — прототип приложения, в котором объединены традиции европейских и азиатских театров теней. В этом приложении используется Intel® RealSense™ SDKдля создания интерактивной игры с тенями с управлением при помощи жестов. В процессе разработки команде создателей игры (Тьи Бинь Минь Нгуен (Thi Binh Minh Nguyen)и члены компании Prefrontal Cortex) пришлось преодолеть целый ряд затруднений. В частности, потребовалось добиться, чтобы камера Intel® RealSense™точно распознавала различные жесты руки с помощью собственных алгоритмов обнаружения BLOB. Потребовалось провести обширное тестирование с участием множества пользователей.


На начальном экране OmbreFabulaдемонстрируется открывающая сцена в бабушкином доме (его изображение размыто на фоне) перед началом восстановления ее зрения.

Проект OmbreFabulaзадумала Тьи Бинь Минь Нгуен (Thi Binh Minh Nguyen) в качестве учебного проекта для получения степени бакалавра. Затем с помощью компании дизайнеров-разработчиков Prefrontal Cortex этот проект был преобразован в интерактивную инсталляцию, работающую на ПК или ноутбуке, оборудованном камерой, направленной на пользователя. Минь объясняет, что возникло желание придать этому проекту новый интерактивный уровень, стереть границы между аудиторией и игроком.

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

Игра OmbreFabulaприняла участие в конкурсе Intel RealSense App Challenge 2014 года и заняла на нем второе место, уступив игре Ambassador.

Решения и проблемы

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

Создание пользовательского интерфейса

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


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

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

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

The UI of Ombre Fabula
Пользователь ведет руку вправо, чтобы вывести главного героя игры из бабушкиного дома.

Реализация отслеживания рук

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

Ombre Fabula Animal Shapes
Простые жесты руки позволяют создать кролика, птицу и дракона.

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

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

Ombre Fabula Recognize Gestures
На этом рисунке жесты птицы, дракона и кролика показаны с маркированными контурами рук, благодаря чему Ombre Fabulaраспознает разные жесты.

Сначала извлечь необходимые данные контуров из Intel RealSense SDK было непросто. Интеграция Unity* отлично подходит для отслеживания ладоней и пальцев, но непригодна для эффективного отслеживания контуров. Впрочем, ознакомившись с документацией и поработав с Intel RealSense SDK, разработчики научились извлекать подробные данные контуров, необходимые для распознавания нестандартных фигур.


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


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

Использование собственного алгоритма обнаружения BLOB

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

// Code snippet from official Intel "HandContour.cs" script for blob contour extraction

int numOfBlobs = m_blob.QueryNumberOfBlobs();
PXCMImage[] blobImages = new PXCMImage[numOfBlobs];

for(int j = 0; j< numOfBlobs; j++)
{
	blobImages[j] = m_session.CreateImage(info);


	results = m_blob.QueryBlobData(j,  blobImages[j], out blobData[j]);
	if (results == pxcmStatus.PXCM_STATUS_NO_ERROR && blobData[j].pixelCount > 5000)
	{
		results = blobImages[j].AcquireAccess(PXCMImage.Access.ACCESS_WRITE, out new_bdata);
		blobImages[j].ReleaseAccess(new_bdata);
		BlobCenter = blobData[j].centerPoint;
		float contourSmooth = ContourSmoothing;
		m_contour.SetSmoothing(contourSmooth);
		results = m_contour.ProcessImage(blobImages[j]);
		if (results == pxcmStatus.PXCM_STATUS_NO_ERROR && m_contour.QueryNumberOfContours() > 0)
		{
			m_contour.QueryContourData(0, out pointOuter[j]);
			m_contour.QueryContourData(1, out pointInner[j]);
		}
	}
}

Для получения данных контуров из IntelRealSenseSDKиспользуется код извлечения контуров.

После этого упрощенные данные обрабатывали алгоритмом $P Point-Cloud Recognizer*. Это свободно доступный алгоритм, часто использующийся для распознавания символов, таких как рукописные штрихи. Разработчики внесли в этот алгоритм некоторые незначительные доработки и добились его правильной работы в Unity, а затем применили его для определения формы рук в OmbreFabula. Алгоритм определяет (с вероятностью порядка 90 %), фигуру какого животного изображают руки пользователя, после чего распознанная фигура отображается на экране.

// every few frames, we test if and which animal is currently found
void DetectAnimalContour () {
	// is there actually a contour in the image right now?
	if (handContour.points.Count > 0) {
		// ok, find the most probable animal gesture class
		string gesture = DetectGestureClass();
		// are we confident enough that this is one of the predefined animals?
		if (PointCloudRecognizer.Distance < 0.5) {
			// yes, we are: activate the correct animal
			ActivateAnimalByGesture(gesture);
		}
	}
}

// detect gesture on our contour
string DetectGesture() {
	// collect the contour points from the PCSDK
	Point[] contourPoints = handContour.points.Select (x => new Point (x.x, x.y, x.z, 0)).ToArray ();

	// create a new gesture to be detected, we don't know what it is yet
	var gesture = new Gesture(contourPoints, "yet unknown");

	// the classifier returns the gesture class name with the highest probability
	return PointCloudRecognizer.Classify(gesture, trainingSet.ToArray());
}

// This is from the $P algorithm
// match a gesture against a predefined training set
public static string Classify(Gesture candidate, Gesture[] trainingSet) {
	float minDistance = float.MaxValue;
	string gestureClass = "";
	foreach (Gesture template in trainingSet) {
		float dist = GreedyCloudMatch(candidate.Points, template.Points);
		if (dist < minDistance) {
			minDistance = dist;
			gestureClass = template.Name;
			Distance = dist;
		}
	}
	return gestureClass;
}

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

Получение отзывов пользователей на раннем этапе с помощью тестирования и наблюдения

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

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


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

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

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

Игра OmbreFabulaоптимизирована для кратковременных игровых сеансов продолжительностью 6–10 минут. Люди, привлеченные для тестирования, отметили, что не возникает никакой усталости кистей и предплечий, поскольку пользователи естественным образом привыкли держать руки поднятыми в течение определенного времени.

Под капотом: инструменты и ресурсы

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

Intel RealSense SDK

Пакет Intel RealSense SDKиспользовали для сопоставления контуров рук, для чего очень пригодилась документация по отслеживанию контуров, входящая в состав SDK. Разработчики также использовали образцы Unity, предоставленные корпорацией Intel, когда сначала пробовали работать со встроенными возможностями отслеживания рук. Одного лишь отслеживания рук оказалось недостаточно, поэтому перешли к изображениям и реализовали собственный алгоритм отслеживания BLOB-объектов.

Программное обеспечение Unity

И Минь, и члены команды Prefrontal Cortex считают себя в первую очередь дизайнерами, им важно не тратить время на разработку платформ и написание кода, а быстро воплощать замыслы в действующие прототипы. В этом отношении платформа Unity позволила быстро создавать прототипы и переходить к дальнейшим этапам разработки. Кроме того, выяснилось, что набор инструментов Intel RealSense Unity в составе Intel RealSense SDK удобен в использовании и позволяет быстро приступить к работе.

$P Point-Cloud Recognizer

$P Point-Cloud Recognizer — это двухмерный программный алгоритм распознавания жестов, определяющий (с некоторым уровнем вероятности), в какую фигуру складываются штрихи ручки на бумаге или аналогичные графические данные. Этот алгоритм часто используется для быстрого создания прототипов в пользовательских интерфейсах с управлением жестами. Разработчики несколько изменили этот алгоритм и использовали его в Unity для определения фигуры, образованной руками пользователя, в OmbreFabula. Подсчитывая вероятность, алгоритм решает, какое из животных пытается изобразить пользователь, и приложение отображает соответствующее изображение животного.

Ombre Fabula Dragon
Чтобы появился дракон, нужно сложить две руки так, чтобы получились «челюсти», как показано на этом снимке экрана.

Ombre Fabula: что дальше?

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

Intel RealSense SDK: перспективы

Феликс Хербст (Felix Herbst) из команды Prefrontal Cortex твердо уверен в том, что системы управления с помощью жестов необходимо создавать с нуля, а попытки адаптировать существующие приложения к управлению с помощью жестов в большинстве случаев приведут к неудобству пользователей. Он подчеркивает важность анализа соответствующих сильных сторон всех возможных интерфейсов управления (включая и управление жестами) и выбор наиболее подходящей модели при разработке приложения.

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

О разработчиках

Минь Нгуен (Minh Nguyen)родилась во Вьетнаме и выросла в Германии. Она обладает значительным опытом работы и применяет современные технологии для создания интерактивных мультимедиарешений и игр. В настоящее время она учится в магистратуре Университета Бург Гибихенштайн в Германии по специальности «Дизайн мультимедиа и виртуальная реальность». Помимо учебы Минь под псевдонимом Tibimi участвует в работе над такими проектами, как Die besseren Wälder, игровой студии The Good Evil. Эта игра, созданная по мотивам известной театральной пьесы, призвана помочь детям и подросткам лучше узнать, что такое быть «другим».

Компания Prefrontal Cortex — это команда трех дизайнеров и разработчиков: Феликс Хербст (Felix Herbst), Пауль Кирстен (Paul Kirsten) и Кристиан Фрайтаг (Christian Freitag). Они создают самые невероятные решения, удивляющие и привлекающие пользователей. Среди их проектов — инсталляция Metaworlds*, посвященная созданию мира, интерактивная световая проекция [l]ichtbar на конференции Farbfest, инструмент Iterazer* для создания изображений с использованием мультисенсорного вода и игра Fight with Light* — шутер, управляемый движением глаз. Многопользовательская игра Weaver* этих разработчиков вышла в финал на конкурсе Intel App Innovation Contest 2013. Помимо этих экспериментальных проектов они создают интерактивные приложения для клиентов из различных отраслей, используя виртуальную и дополненную реальность.

И Минь, и разработчики Prefrontal Cortex намерены и далее использовать возможности технологий естественных интерфейсов, включая Intel RealSense.

Дополнительные ресурсы

Видео с демонстрацией OmbreFabula cм. здесь.

Для получения дополнительных сведений о создателях OmbreFabulaпосетите веб-сайты Минь Нгуен (Tibimi)и команды Prefrontal Cortex.

На сайте Intel® Developer Zone for Intel® RealSense™ разработчики найдут немало материалов, связанных с решениями Intel RealSense. Разработчики могут загрузить Intel RealSense SDKи Intel RealSense Developer Kit, а также ряд полезных учебных материалов по технологии Intel RealSense.


Версия 2016: новые возможности Intel® Media Server Studio

$
0
0

Кодирование 4K HEVC в реальном времени, стабильность декодирования AVC и MPEG2

Выпущена версия Intel® Media Server Studio 2016! В новой версии можно быстрее перекодировать высококачественное видео. 

В кодировщике HEVC в 1,1 раза повышена производительностьи на 10 % повышено качество. Intel® Media Server Studio помогает поставщикам решений перекодировки добиваться кодирования видео HEVC с разрешением 4K в реальном времени с пригодным для вещания качеством с помощью Intel® Visual Compute Accelerator на базе процессоров Intel® Xeon® E3 и некоторых процессоров Intel® Xeon® E51. Повышение стабильности декодирования AVC и MPEG2 позволяет обрабатывать ошибки в видеоматериалах. Подробные сведения о новых возможностях для перекодирования мультимедиа см. ниже.

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

Загрузить Media Server Studio 2016

Для зарегистрированных пользователей (требуется вход)  Для новых пользователей: получить бесплатно выпуск Community, ознакомиться с выпуском Pro или купить


 

Повышение производительности и качества HEVC (H.265) на 10 %, использование расширенного анализа на ГП, снижение объема данных

Professional Edition

  • Благодаря повышению производительности и качества на 10 % (по сравнению с предыдущей версией) поставщики решений мультимедиа могут кодировать видео 4KHEVCв реальном времени с пригодным для вещания качеством на некоторых платформах Intel Xeon E51с помощью программного решения Intel HEVC и Intel® Visual Compute Accelerator (Intel® VCA)1, применяя кодировщик HEVC с ускорением с помощью графического процессора (ГП).

  • Повышение производительности HEVCс ускорением на ГПза счет разгрузки циклических фильтров, таких как антиблочный фильтр (DBF) и адаптивное смещение выборки (SAO) на ГП (в прежних версиях эти фильтры выполнялись на ЦП).

Рисунок 1. В версии 2016 эффективность кодирования видео повышена на 10 % по сравнению с версией 2015 R7. В новой версии поддерживается не только кодирование в реальном времени видео с разрешением 4Kсо скоростью 30 кадров в секунду на некоторых процессорах Intel®Xeon®E5, но и кодирование в реальном времени видео с разрешением 1080pсо скоростью 50 кадров в секунду на платформах с процессорами Intel®Corei7 и XeonE3 предыдущего поколения**. Соотношение качества и производительности программного кодирования HEVCс ускорением на ГП для 8-битных видеоданных 4:2:0, 1080p. Базовый показатель качества соответствует стандарту ISOHM14 (0 %) и вычисляется с помощью кривых Y-PSNRBDRATE. Производительность — усредненная для четырех скоростей потока данных, от низкой (в среднем 3,8 МБ/с) до высокой (в среднем 25 МБ/с). Дополнительные сведения см. в информационном документе Высокое качество и производительность при использовании HEVC.

  • Благодаря усовершенствованиям Intel® VTune™ Amplifierразработчики смогут проще получать и интерпретировать данные об использовании ГП и о производительности приложений, оптимизированных для OpenCL* и Intel®MediaSDK. Поддерживается анализ распараллеливания нагрузки между ЦП и ГП, анализ использования ГП с аппаратными метриками, схема архитектуры ГП и многое другое.

  • Снижение объема данных при использовании кодека HEVC за счет кодирования на основе рабочих областей (ROI). Определенные рабочие области можно упаковывать с наименьшей степенью сжатия для сохранения наибольшей детализации по сравнению с другими областями. Эта функция повышает производительность приложений для видеоконференций. Для ее использования необходимо задать структуру mfxExtEncoderROI в приложении, чтобы указать разные рабочие области при кодировании. Это можно сделать при инициализации или во время выполнения.

  • Видеоконференции — более удобное проведение бизнес-конференций и сеансов видеосвязи с помощью особого режима HEVC с низкими задержками.

  • Новые возможности работы с разрешением 8K: не ограничивайте ваше приложение возможностью кодирования потоков с разрешением 4K. Кодек Intel HEVC в Media Server Studio 2016 поддерживает кодирование с разрешением 8K как программное, так и с ускорением с помощью ГП.

Усовершенствованное декодирование и перекодирование AVC (H.264) и MPEG2

Выпуски Community, Essentials, Pro

  • Усовершенствованная графика 5-го поколения и ускорители обработки мультимедиа вместе с собственными драйверами открывают возможность перекодирования до 16 потоков HDAVCс высоким качеством в реальном временина каждый процессор Intel Xeon E3 v4 (или с помощью Intel VCA)за счет применения аппаратного ускорения. 

  • До 12 потоков HD AVC на процессорах Intel® Core™ 4-го поколения с ГП Intel® Iris™**

  • Используйте повышенное качество кодирования AVC для BRefType MFX_B_REF_PYRAMID.

  • Декодер AVCи MPEG2 работает стабильнее: он способен обрабатывать поврежденные потоки и возвращать ошибки. Повышенная устойчивость декодирования AVC и MPEG2 обеспечивает стабильный вывод и безупречную обработку поврежденных видеоматериалов. Расширенные сообщения об ошибках помогут разработчикам удобнее находить и анализировать ошибки декодирования. 

Рисунок 2. В версии 2016 достигнут прирост производительности на 40 % по сравнению с версией 2015 в сценариях работы с H.264 за счет улучшенных алгоритмов планирования аппаратной нагрузки**. На этом рисунке показаны результаты кодирования нескольких потоков H.264 из одного исходного файла H.264 с ускорением с помощью Intel® Quick Sync Video с образцом кода multi_transcode (доступен в составе образцов кода). Каждая точка соответствует среднему значению для 4 потоков и 6 значений скорости данных; полоски погрешности показывают расхождение производительности для разных потоков и значений скорости данных. Параметр Target Usage со значением 7 (TU7) соответствует работе с наивысшей скоростью (и самым низким качеством). [Видеоматериалы с разрешением 1080p со скоростью 50 кадров в секунду получены из media.xiph.org/video/derf/: crowd_run, park_joy (30mbps input; 5, 7.1, 10.2, 14.6, 20.9, 30 mbps output; in_to_tree, old_town_cross 15 mbps input, 2.5, 3.5, 5.1, 7.3, 10.4, 15 mbps output).] Конфигурация: одновременное перекодирование AVC1→N с разной скоростью данных, 1080p, предустановка TU7, процессор Intel® Core™ i7-4770K с частотой 3,5 ГГц**. Количество каналов 1080p с различной скоростью данных.

Другие новые и улучшенные возможности

  • Усовершенствования в Intel® SDK для приложений OpenCL™для Windows включают новые возможности для разработки ядер.

  • Добавлена поддержка разностной предустановки качества уровня CTB для всех предустановок качества, т. е. для значений параметра Target Usage с 1 по 7 включительно для всех режимов управления скоростью данных (CBR, VBR, AVBR, ConstQP) и всех профилей (MAIN, MAIN10, REXT).

  • Поддержка кодирования потока IPPP..P, т. е. без B-кадров, с помощью обобщенного управления P- и B-кадрамидля приложений, в которых B-кадры удаляются с целью ограничения скорости потоков данных.

  • Кодирование H.264 напрямую работает с поверхностями с цветами ARGB (полученными с экрана или из игр) и YUY2, благодаря чему снижаются издержки на предварительную обработку (т. е. преобразование цветового пространства из RGB4 в NV12 для обработки в Intel® Media SDK), повышается производительность съемки с экрана.

Экономьте время, используя обновленные образцы кода

  • В образец sample_multi_transcode добавлены важные функции: расширенный конвейер включает несколько фильтров VPP, таких как композиция, удаление шума, детализация (обнаружение краев), управление кадровой скоростью (FRC), удаление чересстрочной развертки, преобразование цветового пространства (CSC).

  • В Sample_decode в пакете образцов для Linux поддерживается рендеринг видео с DRM, нужно использовать входной аргумент -rdrm. Образцы sample_decode и sample_decvpp объединены в образец decode с добавленными новыми фильтрами VPP, такими как удаление чересстрочной развертки и преобразование цветового пространства.

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

Выше описаны лишь некоторые, наиболее заметные функции и усовершенствования в Media Server Studio 2016. Посетите сайт продуктаи прочтите заметки к выпускам для получения дополнительных сведений.

  •  Заметки к выпускам Essential/Community Windows   Linux
  •  Заметки к выпуску Professional Edition:  Windows   Linux

1 Дополнительные сведения см. в разделе Технические характеристики.

**Базовая конфигурация: Intel® Media Server Studio 2016 Essentials по сравнению с версией 2015 R7, R4 под управлением Microsoft Windows* 2012 R2. Эталонная платформа Intel с процессором Intel® Core i7-4770K (84 Вт, 4 ядра, 3,5 ГГц, ГП Intel® HD Graphics 4600). Плата Intel Z87KL для настольных ПК с Intel Z87LPC, 16 ГБ ОЗУ (4 модуля UDIMM DDR3-1600 МГц по 4 ГБ), жесткий диск 1 ТБ, 7200 об./мин., SATA, включена технология Turbo Boost и гиперпоточность. Источник: внутренние измерения Intel по данным на январь 2016 г.

 

 

 

Высокая производительность и три ошибочных подхода, мешающих ее добиться

$
0
0

Download [PDF 1.2MB]

Введение

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

Ошибочный подход № 1. Недостаточное понимание технологий разработки

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

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

Это один из примеров ситуации, когда мы, разработчики, идем по неверному пути. Впрочем, таких путей немало. К примеру, когда я был моложе и только начинал знакомство с разработкой программного обеспечения, я старался во всем подражать моему начальнику: все, что он делал, казалось мне безупречным и безусловно правильным. Когда мне нужно было что-нибудь сделать, я смотрел, как то же самое делает начальник, и стремился как можно точнее повторить все его действия. Неоднократно бывало, что я просто не понимал, почему его подход работает, но разве это важно? Главное, что все работает!

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

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

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

JavaScript* и DOM

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

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

Рассмотрим еще один пример. Этот пример взят из материала: http://code.tutsplus.com/tutorials/10-ways-to-instantly-increase-your-jquery-performance--net-5551

На следующем рисунке показаны два равноценных фрагмента кода. Каждый из них создает список с 1000 элементов li. Код справа добавляет атрибут idк каждому элементу li, а код слева добавляет атрибут classк каждому элементу li.

Как видите, вторая часть фрагмента кода просто обращается к каждому из тысячи созданных элементов li. Я измерил скорость в браузерах Internet Explorer* 10 и Chrome* 48: среднее время выполнения кода, приведенного слева, составило 57 мс, а время выполнения кода, показанного справа, — всего 9 мс, существенно меньше. Разница огромна, притом что в данном случае она обусловлена лишь разными способами доступа к элементам.

К этому примеру стоит отнестись крайне внимательно. В этом примере есть еще немало интересных для анализа моментов, например порядок проверки селекторов (здесь это порядок справа налево). Если вы используете jQuery*, то почитайте и про контекст DOM. Сведения об общих принципах производительности селекторов CSS см. в следующей статье: https://smacss.com/book/selectors

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

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

После создания такого объекта создаются тысячи объектов с помощью этих двух способов. Если сравнить объем памяти, используемой этими объектами, вы заметите разницу в использовании областей памяти Shallow Size и Retained Size в Chrome. Подход, где используется прототип, задействует примерно на 20 % меньше памяти (20 КБ по сравнению с 24 КБ) в области Shallow Size и на 66 % меньше в области Retained Memory (20 КБ по сравнению с 60 КБ).

Для получения дополнительных сведений о характеристиках памяти Shallow Size и Retained Size см.

https://developers.google.com/web/tools/chrome-devtools/profile/memory-problems/memory-101?hl=en

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

LINQ

При подготовке к выступлению на конференции по описываемой теме я решил подготовить пример с серверным кодом. Я решил использовать LINQ*, поскольку LINQ получил широкое распространение в мире .NET для новых разработок и обладает значительным потенциалом для повышения производительности.

Рассмотрим следующий распространенный сценарий. На следующем рисунке показано два функционально равноценных фрагмента кода. Цель кода — создать список всех отделений и всех курсов для каждого отделения в школе. В коде под названием Select N+1 мы выводим список всех отделений, а для каждого отделения — список курсов. Это означает, что при наличии 100 отделений нам потребуется 1 + 100 вызовов к базе данных.

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

Таким образом, можно повысить производительность в сотни раз, просто избегая подхода Select N+1.

Рассмотрим менее очевидный пример.

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

В примере Code #1, где ожидается тип данных IEnumerable, запрос выполняется непосредственно перед выполнением Take<Employee>(10). Это означает, что при наличии 1000 сотрудников они все будут получены из базы данных, после чего из них будет выбрано 10.

В примере Code #2 запрос выполняется после выполнения Take<Employee>(10).
Из базы данных при этом извлекается всего 10 записей.

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

http://www.codeproject.com/Articles/832189/List-vs-IEnumerable-vs-IQueryable-vs-ICollection-v

SQL Server*

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

Тем не менее для повышения производительности можно применять и ряд общих принципов, например:

  • кластерные либо некластерные индексы;
  • правильный порядок инструкций JOIN;
  • понимание, когда следует использовать таблицы #tempи таблицы переменных;
  • использование представлений либо индексированных представлений;
  • использование заранее скомпилированных инструкций.

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

Изменение образа мышления

Итак, как мы, разработчики, должны изменить образ мышления, чтобы избегать ошибочного подхода № 1?

  • Перестаньте думать: «Я — разработчик интерфейсов» или «Я — разработчик внутреннего кода». Возможно, вы инженер, вы специализируетесь на какой-то одной области, но не используете эту специализацию, чтобы отгораживаться от изучения и других областей.
  • Перестаньте думать: «Пусть этим занимается специалист, потому что у него получится быстрее». В современном мире в ходу гибкость, мы должны быть многофункциональными ресурсами, мы должны изучать области, в которых наши знания недостаточны.
  • Перестаньте говорить себе: «Я этого не понимаю». Разумеется, если бы это было просто, то все уже давно стали бы специалистами. Не стесняйтесь тратить время на чтение, консультации и изучение. Это нелегко, но рано или поздно окупится.
  • Перестаньте говорить: «Мне некогда». Это возражение я могу понять. Так бывает нередко. Но однажды один коллега в Intel сказал: «Если тебе действительно интересно что-либо, то и время на это найдется». Вот эту статью я пишу, например, в субботу в полночь!

Ошибочный подход № 2. Предпочтение определенных технологий

Я занимаюсь разработкой на .NET с версии 1.0. Я в мельчайших подробностях знаю все особенности работы веб-форм, а также множества клиентских библиотек .NET (некоторые из них я самостоятельно изменил). Когда я узнал о выпуске Model View Controller (MVC), то не хотел его использовать: «Это нам не нужно».

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

Мне часто приходится слышать обсуждения, касающиеся либо связи LINQ с объектами в Entity Framework, либо хранимых процедур SQL при запросе данных. Люди настолько привыкли использовать одно или другое решение, что пытаются использовать их везде.

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

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

Изменение образа мышления

Как мы, разработчики, должны изменить образ мышления, чтобы избегать ошибочного подхода № 2:

  • Перестаньте говорить: «Этот способ всегда работал», «Мы всегда делали именно так» и т. д. Нужно знать и использовать и другие варианты, особенно если эти варианты в чем-то лучше.
  • Не пытайтесь использовать неподходящие решения! Бывает, что разработчики упорно пытаются применять какую-то определенную технологию, которая не дает и не может дать нужных результатов. Разработчики тратят много времени и сил, стараясь все же как-то доработать эту технологию, подогнать ее под результат, не рассматривая иных вариантов. Такой неблагодарный процесс можно назвать «попыткой натянуть сову на глобус»: это стремление ценой любых усилий приспособить существующее неподходящее решение вместо того, чтобы сосредоточиться на проблеме и отыскать другое, более изящное и быстрое решение.
  • «Мне некогда». Разумеется, у нас всегда не хватает времени на изучение нового. Это возражение я могу понять.

Ошибочный подход № 3.Недостаточное понимание инфраструктуры приложения

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

Отнюдь, все может быть вовсе не в порядке!

Задали ли вы себе следующие вопросы?

  • Пригодно ли приложение для работы в среде с балансировкой нагрузки?
  • Приложение будет размещено в облаке, где будет много экземпляров этого приложения?
  • Сколько других приложений работают на машине, для которой предназначено мое приложение?
  • Какие еще программы выполняются на этом сервере? SQL Server? Службы Reporting Services? Какие-либо расширения SharePoint*?
  • Где находятся конечные пользователи? Они распределены по всему миру?
  • Сколько пользователей будет у моего приложения в течение следующих пяти лет?

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

Давайте рассмотрим несколько возможных факторов, которые могут повлиять на производительность нашего приложения. Предположим, что пользователи находятся в разных странах мира. Быть может, приложение будет работать очень быстро, без каких-либо жалоб со стороны пользователей в США, но вот пользователи из Малайзии будут жаловаться на низкую скорость.

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

Возможна еще одна ситуация: предположим, что приложения работают на серверах, на которых одновременно запущена СУБД SQL Server и веб-сервер. В этом случае на одном физическом сервере выполняются одновременно две серверных системы с интенсивной нагрузкой на ЦП. Как решить эту проблему? Если мы говорим о приложении .NET на сервере Internet Information Services (IIS), то можно воспользоваться соответствием процессоров. Соответствие процессоров — это привязка одного процесса к одному или нескольким определенным ядрам ЦП компьютера.

К примеру, предположим, что на компьютере с четырьмя процессорами выполняется SQL Server и веб-сервер IIS.

Если позволить операционной системе решить, какой ЦП будет использоваться для SQL Server, а какой — для IIS, ресурсы могут распределяться по-разному. Возможно, что каждой серверной нагрузке будет назначено по два процессора.

А возможно, что все четыре процессора будут выделены только одной нагрузке.

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

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

Один из способов решить эту проблему — использовать «соответствие процессоров» для IIS и SQL. В этом случае мы сами решаем, сколько процессоров нужно для SQL Server, а сколько — для IIS. Для этого нужно настроить параметры в разделе «Соответствие процессоров» в категории ЦП в IIS и «маску соответствия» в базе данных SQL Server. Оба этих случая показаны на следующих рисунках.


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

Изменение образа мышления

Как мы, разработчики, должны изменить образ мышления, чтобы избегать ошибочного подхода № 3?

  • Перестаньте думать: «Это не моя работа». Мы, инженеры, должны стремиться расширять кругозор, чтобы предоставлять заказчикам наилучшее решение.
  • «Мне некогда». Разумеется, нам всегда некогда. Это самое распространенное обстоятельство. Выделение времени — то, что отличает успешного, опытного, выдающегося профессионала.

Не оправдывайтесь!

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

Но важно понимать, что хорошая работа — это не только написание хорошего кода. Мы все в определенное время использовали некоторые или все описанные ошибочные подходы.

Вот как их можно избежать.

  1. Выделяйте время, если нужно — с запасом. Когда у вас просят оценить сроки, необходимые для работы над проектом, не забудьте выделить время для исследования и тестирования, для подготовки выводов и принятия решений.
  2. Постарайтесь одновременно создать и личное приложение для тестирования. В этом приложении вы сможете пробовать разные решения перед их воплощением (или отказом от их воплощения) в разрабатываемом приложении. Мы все порой ошибаемся.
  3. Найдите людей, уже владеющих нужной технологией, и попробуйте программировать вместе. Поработайте со специалистом, который разбирается в инфраструктуре, когда он будет развертывать приложение. Это время будет потрачено с пользой.
  4. Избегайте переполнения стека! Большая часть моих проблем уже решена. Если просто копировать ответы, не анализируя их, вы в итоге получите неполное решение.
  5. Не считайте себя узким специалистом, не ограничивайте свои возможности. Разумеется, если вам удастся стать экспертом в какой-либо области, это замечательно, но вы должны уметь поддержать разговор на должном уровне и в том случае, если разговор касается областей, в которых вы пока не являетесь экспертом.
  6. Помогайте другим! Это, пожалуй, один из лучших способов обучения. Если вы помогаете другим решать их проблемы, то в конечном итоге вы сэкономите собственное время, поскольку уже будете знать, что делать, если столкнетесь с подобными проблемами.

См. также

Веселый и интересный блог Скотта Хансельмана (Scott Hanselman) о том, как лучше создавать код: разрабатывать самому или находить в Google.

http://www.hanselman.com/blog/AmIReallyADeveloperOrJustAGoodGoogler.aspx

Информация об объектах и прототипах:

http://thecodeship.com/web-development/methods-within-constructor-vs-prototype-in-javascript/

Об авторе

Александр Гарсия (Alexander García) — компьютерный инженер из филиала корпорации Intel в Коста-Рике. Он обладает 14-летним профессиональным опытом создания программного обеспечения. Сфера интересов Александра весьма разнообразна — от практики разработки программного обеспечения и безопасности программ до производительности, интеллектуального анализа данных и смежных областей.  В настоящее время Александр обладает ученой степенью магистра в области компьютерных наук.

 

RealPerspective: отслеживание движения головы с помощью технологии Intel® RealSense™

$
0
0

Code Sample

Введение

В RealPerspective используется технология Intel® RealSense™. В этом примере кода реализовано отслеживание движения головы для точного позиционирования в трехмерном пространстве.

Работая с системой, оборудованной камерой Intel® RealSense®, пользователь может управлять обзором в игре, поворачивая голову. Так наши технологии позволяют заглянуть в вирту­альный мир. Обычно для таких задач применялись цветные камеры или инфракрасные датчики[3], но камера Intel RealSense предоставляет данные о глубине сцены, поэтому с ней не требуется никакого дополнительного оборудования на пользователе.

В образце кода используется проецирование перспективы вне осей, описанное в работе Куима (Kooima)[1]. Входные данные — пространственные координаты X и Y лица, а также средняя глубина лица.

Сборка и развертывание

Для создания программы требуется пакет Intel® RealSense™ SDKи Intel RealSense Depth Camera Manager.

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

Загрузить SDK, среду выполнения SDK и Depth Camera Manager можно здесь: https://software.intel.com/ru-ru/intel-realsense-sdk/download

Unity

В проекте Unity для совместимости с пакетом SDK, установленным на компьютере, следует заменить файлы libpxcclr.unity.dllи libpxccpp2c.dll, находящиеся в папках проекта Libraries\x64 и Libraries\x86, на библиотеки DLL из папок bin\x64 и bin\x86 пакета Intel RealSense SDK.

Метод

Инициализация камеры Intel RealSense

При запуске Sense Manager инициализирует и настраивает модуль face для обнаружения лица (ограничивающий прямоугольник и глубина). После этого конвейер Sense Manager будет готов к приему данных.

Обработка ввода

Функция обработки ввода возвращает объект Vector3, нормализованный до 0 к 1, содержащий положение лица в трехмерном пространстве, полученное от камеры Intel RealSense. Если камера Intel RealSense недоступна, используются координаты мыши.

Координаты расположения лица X, Y и Z берутся из модуля face пакета Intel RealSense SDK. Плоские координаты X и Y лица отсчитываются от центра прямоугольника, в который вписано лицо, измеряются в пикселях. Координата Z лица — средняя глубина лица в миллиметрах. Эта функция не блокирует другие, поэтому, если данные недоступны, работа функции Update не будет задержана. В противном случае прежние матрицы перспективы и просмотра не изменяются.

Вычисление внеосевых параметров

Точки pa, pbи pcопределяют пространство экрана и задают размер экрана, его соотношение сторон и ориентацию в пространстве. Пространство экрана масштабируется на основе размера экрана и окна приложения. Наконец, n и fопределяют передний и задний планы. В Unity эти значения берутся из класса Camera.

Например, если комната имеет размер 16 на 9 единиц с соотношением сторон 16:9, то можно задать такие pa, pb, pc, чтобы комната занимала весь экран. Расстояние от paдо pbбудет шириной комнаты, 16 единиц, а расстояние от paдо pc — высота комнаты, 9 единиц. Дополнительные примеры см. в статье Роберта Куима (Kooima)[1].

Off-Axis Parameters

Вычисление внеосевых матриц

Назначение этой функции — возвращать внеосевую матрицу. Матрица проекции основывается на стандарте OpenGL* glFrustum. Последний этап — выравнивание направления взгляда с плоскостью XY и преобразование координат. Этот процесс аналогичен действиям камеры или матрицы просмотра в графическом конвейере.

Матрица проекции

Сначала вычисляются ортонормальные базисные векторы (vr, vu, vn) на основе пространства экрана. Впоследствии ортонормальные базисные векторы помогут спроецировать пространство экрана на передний план и создать матрицу, чтобы выровнять пространство отслеживания с плоскостью XY.

Off-Axis Matrices

Затем из плоскости экрана создаются векторы пространства экрана va, vbи vc.

Screen extents vectors

После этого на основе пространства экрана вычисляются стороны усеченной пирамиды l, r, bи t (путем проецирования базовых векторов на векторы пространства экрана для получения их расположения на плоскости), а затем уменьшаются на коэффициент расстояния от плоскости экрана до переднего плана. Это обусловлено тем, что стороны усеченной пирамиды определяют усеченную пирамиду, построенную на плоскости переднего плана.

Наконец, после вычисления сторон усеченной пирамиды значения подаются в функцию glFrustum для получения матрицы перспективной проекции. Поле обзора вычисляется по сторонам усеченной пирамиды[2].

Ориентация плоскости проекции

Эффект перспективного сокращения проекции работает только при исходном положении точки обзора. Поэтому первый шаг — выравнивание экрана с плоскостью XY. Матрица M создается для получения системы прямоугольных (декартовых) координат по базисным векторам (vr, vuи vn). Пространство экрана нужно выровнять с плоскостью XY, поэтому берется транспозиция матрицы M.

Сдвиг точки обзора

Аналогичным образом отслеживаемое положение глаза peнеобходимо переместить к усеченной пирамиде. Для этого используется матрица преобразования T.

Композиция

Вычисленные матрицы передаются обратно в структуру данных Camera в Unity.

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

В качестве тестового устройства использовалась система BRIX* Pro компании GIGABYTE Technology с процессором Intel® Core™ i7-4770R (выделение тепла — 65 Вт).

Издержки производительности в среднем весьма низки. На выполнение функции Update() требуется менее 1 мс. Около 0,5 мс необходимо для последовательно обнаруженных кадров с лицами, 0,2 мс — для кадров без лиц. Новые данные поступают каждые 33 мс.

Использование и дальнейшая работа

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

Возможные сценарии использования — игры жанра RTS (стратегии в реальном времени), MOBA (многопользовательская сетевая боевая арена), настольные игры, в которых пользователь может наблюдать за действиями и ходами, как при игре в шахматы. В симуляторах и играх с экспериментальной средой пользователь наблюдает действие и может выбрать наиболее удобный ракурс наблюдения за своими виртуальными персонажами с возможностью приближения для более подробного просмотра.

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

Справочные материалы

[1]: Роберт Куима (Kooima, Robert). Перспективное проецирование в целом. 2009.

[2]: OpenGL.org. Преобразования.

[3]: Джонни Ли (Johnny Lee). Отслеживание движений головы для систем виртуальной реальности с использованием Wii Remote. 2007.

Приложение

Требования

  • Система с Intel RealSense или камера SR300
  • Intel RealSense SDK 6.0 или более поздней версии
  • Intel RealSense Depth Camera Manager SR300 3.0 или более поздней версии
  • Microsoft Windows 8.1* или более поздней версии
  • Unity 5.3 или более поздней версии

Приводим данные и код в порядок: оптимизация и память, часть 1

$
0
0

В этой серии из двух статей говорится о том, как структура данных и памяти влияет на производительность. Предлагаются определенные действия для повышения производительности программного обеспечения. Даже простейшие действия, показанные в этих статьях, позволят добиться существенного прироста производительности. Многие статьи, посвященные оптимизации производительности программ, рассматривают распараллеливание нагрузки в следующих областях: распределенная память (например, MPI), общая память или набор команд SIMD (векторизация), но на самом деле распараллеливание необходимо применять во всех трех областях. Эти элементы очень важны, но память также важна, а про нее часто забывают. Изменения архитектуры программ и применение параллельной обработки влияют на память и на производительность.

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

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

Размещение данных

Рассмотрим три уровня, на которых могут находиться данные. Ближайшее место к исполняемым блокам — регистры процессора. Данные в регистрах можно обрабатывать: применять к ним умножение и сложение, использовать их в сравнениях и логических операциях. В многоядерном процессоре у каждого ядра обычно есть собственный кэш первого уровня (L1). Можно очень быстро перемещать данные из кэша первого уровня в регистр. Может быть несколько уровней кэша, но обычно кэш последнего уровня (LLC) является общим для всех ядер процессора. Устройство промежуточных уровней кэша различается для разных моделей процессоров; эти уровни могут быть как общими для всех ядер, так и отдельными для каждого ядра. На платформах Intel поддерживается согласованная работа кэша в пределах одной платформы (даже при наличии нескольких процессоров). Перемещение данных из кэша в регистр осуществляется быстрее, чем получение данных из основной памяти.

Схематическое расположение данных, близость к регистрам процессора и относительное время доступа показаны на рис. 1. Чем ближе блок находится к регистру, тем быстрее перемещение и тем короче задержка при поступлении данных в регистр для выполнения. Кэш — самая быстрая память с наименьшими задержками. Следующая по скорости — основная память. Может быть несколько уровней памяти, хотя о многоуровневом устройстве памяти мы поговорим во второй части этой статьи. Если страницы памяти размещаются в виртуальной памяти файла подкачки на жестком диске или твердотельном накопителе, скорость существенно снижается. Традиционная архитектура MPI с отправкой и получением данных по сети (Ethernet, Infiniband и т. д.) обладает большими задержками, чем получение данных в локальной системе. Скорость при перемещении данных из удаленной системы с доступом по MPI может различаться в зависимости от используемого способа подключения: Ethernet, Infiniband, Intel® True Scale или Intel® Omni Scale.

Рисунок 1. Скорость доступа к памяти, относительные задержки при доступе к данным

Ближайшее место к исполняемым блокам — регистры процессора. В силу количества регистров и задержек, связанных с загрузкой данных в регистры, а также из-за размера очереди операций с памятью невозможно использовать каждое значение в регистрах однократно и подавать данные достаточно быстро, чтобы все исполняемые блоки были полностью заняты. Если данные находятся близко к исполняемому блоку, желательно многократно использовать эти данные перед тем, как они будут вытеснены из кэша или удалены из регистра. Некоторые переменные существуют только в виде переменных регистров и никогда не хранятся в основной памяти. Компилятор превосходно распознает, когда лучше использовать переменную только в регистре, поэтому не рекомендуется использовать ключевое слово registerв C/C++. Компиляторы сами достаточно хорошо распознают возможности оптимизации и могут игнорировать ключевое слово register.

Разработчик должен проанализировать код, понять, как используются данные и сколько времени они должны существовать. Спросите себя: «Нужно ли создавать временную переменную?», «Нужно ли создавать временный массив?», «Нужно ли хранить столько временных переменных?». В процессе повышения производительности нужно собрать метрику производительности и сосредоточить усилия на приближении данных к модулям или ветвям кода, в которых на выполнение кода тратится значительное время. В число популярных программ для получения данных производительности входит Intel® VTune™ Amplifier XE, gprof и Tau*.

Использование и многократное использование данных

Для понимания этого этапа отлично подходит пример с умножением матриц. Умножение матриц A = A + B*C для трех квадратных матриц n х n можно представить тремя простыми вложенными циклами for, как показано ниже.

for (i=0;i<n; i++)                      // line 136
   for (j = 0; j<n; j++)                // line 137
     for (k=0;k<n; k++)                 // line 138
         A[i][j] += B[i][k]* C[k][j] ;  // line 139

Основная проблема с таким порядком заключается в том, что он содержит операцию приведения матрицы (строки 138и 139). Левая часть строки 139 — одиночное значение. Компилятор частично развернет цикл в строке 138, чтобы в наибольшей степени заполнить регистры SIMD и образовать 4 или 8 произведений из элементов B и C, необходимо сложить эти произведения в одно значение. Сложение 4 или 8 произведений в одну позицию — это операция приведения, которая не использует производительность параллельных вычислений и не использует все регистры SIMD с наибольшей эффективностью. Можно повысить производительность параллельной обработки, если свести к минимуму или вовсе исключить операции приведения. Если в левой части строки внутри цикла находится одно значение, это указывает на возможное приведение. Путь доступа к данным для одной итерации строки 137показан ниже на рис. 2 (i,j=2).

Рисунок 2. Упорядочение; единственное значение в матрице A

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

for (i=0;i<n; i++)                    // line 136
   for (k = 0; k<n; k++)              // line 137new
     for (j=0;j<n; j++)               // line 138new
       a[i][j] += b[i][k]* c[k][j] ;  // line 139

После этого происходит смежное обращение к элементам А и С.


Рисунок 3. Обновленный порядок со смежным доступом

Первоначальный порядок ijk — это метод скалярного умножения. Скалярное умножение двух векторов используется для вычисления значения каждого элемента матрицы А. Порядок ikj — это операция saxpy (A*X+Y одинарной точности) или daxpy (A*X+Y двойной точности). Произведение одного вектора на константу прибавляется к другому вектору. И скалярное произведение, и операции A*X+Y являются процедурами BLAS уровня 1. При порядке ikjне требуется приведение. Подмножество строки матрицы C умножается на скалярное значение матрицы B и прибавляется к подмножеству строки матрицы A (компилятор определит размер подмножеств в зависимости от размера используемых регистров SIMD — SSE4, AVX или AVX512). Доступ к памяти для одной итерации цикла 137newпоказан выше на рис. 3 (вновь i,j=2).

Исключение приведения в скалярном умножении — значительное повышение производительности. При уровне оптимизации O2 и компилятор Intel, и gcc* создают векторизованный код, использующий регистры SIMD и исполняемые блоки. Кроме того, компилятор Intel автоматически меняет местами циклы jи k. Убедиться в этом можно в отчете компилятора об оптимизации, который можно получить с помощью параметра компилятора opt-report (-qopt-reportв Linux*). Отчет об оптимизации по умолчанию выводится в файл filename.optrpt. В этом случае отчет об оптимизации содержит следующие фрагменты текста.

LOOP BEGIN at mm.c(136,4)
   remark #25444: Loopnest Interchanged: ( 1 2 3 ) --> ( 1 3 2 )

Отчет также показывает, что переупорядоченный цикл был векторизован.

LOOP BEGIN at mm.c(137,7)
    remark #15301: PERMUTED LOOP WAS VECTORIZED
 LOOP END

Компилятор gcc (версия 4.1.2-55) не переупорядочивает циклы автоматически. Об изменении порядка должен позаботиться разработчик.

Дополнительный прирост производительности обеспечивается блокированием циклов. Это способствует многократному использованию данных. В показанном выше представлении (рис. 3) для каждой итерации среднего цикла используется ссылка на два вектора длиной n (и скалярное значение), причем каждый элемент этих двух векторов используется только один раз. При больших значениях nвполне вероятно, что каждый элемент вектора будет вытеснен из кэша между каждыми итерациями среднего цикла. Если заблокировать циклы с целью многократного использования данных, производительность снова повышается.

В последнем варианте кода циклы j и k переупорядочены, а также применена блокировка. Код работает на подмножествах матриц или блоках размером blockSize. В этом простом примере blockSizeявляется кратным nкода.

for (i = 0; i < n; i+=blockSize)
   for (k=0; k<n ; k+= blockSize)
      for (j = 0 ; j < n; j+=blockSize)
         for (iInner = i; iInner<j+blockSize; iInner++)
            for (kInner = k ; kInner<k+blockSize; kInner++)
               for (jInner = j ; jInner<j+blockSize ; jInner++)
                 a[iInner,jInner] += b[iInner,kInner] *
                    c[kInner, jInner]

В этой модели обращение к данным одной итерации цикла j может выглядеть так.


Рисунок 4. Представление блочной модели.

Если размер блока правильно подобран, то можно предположить, что каждый блок будет оставаться в кэше (и даже, может быть, в регистрах SIMD) в ходе работы трех внутренних циклов. Каждый элемент матриц A, B и C будет использован количество раз, равное blockSize, перед удалением из регистров SIMD или вытеснением из кэша. При этом многократное использование данных возрастает в количество раз, равное blockSize. При использовании матриц незначительного размера применение блоков практически не дает выигрыша. Чем больше размер матрицы, тем существеннее прирост производительности.

В приведенной ниже таблице показано соотношение производительности, измеренное в системе с разными компиляторами. Обратите внимание, что компилятор Intel автоматически меняет местами циклы в строках 137и 138. Поэтому показатели компилятора Intel практически не отличаются для порядков ijkи ikj. Благодаря этому базовая производительность компилятора Intel также гораздо выше, поэтому итоговое увеличение скорости по сравнению с базовой кажется меньше.

Порядок

Размер матрицы/блока

Gcc* 4.1.2 -O2, повышение скорости/производительности по сравнению с базовым показателем

Компилятор Intel 16.1 -O2, повышение скорости/производительности по сравнению с базовым показателем

ijk

1600

1 (базовый уровень)

12.32

ikj

1600

6.25

12.33

Блок ikj

1600/8

6.44

8.44

ijk

4000

1 (базовый уровень)

6.39

ikj

4000

6.04

6.38

Блок ikj

4000/8

8.42

10.53

Таблица 1. Соотношение производительности компиляторов gcc* и Intel

Показанный пример кода несложен, оба компилятора создадут инструкции SIMD. Это устаревший компилятор gcc, здесь он используется не для сравнения производительности компиляторов, а для демонстрации влияния порядка операций и приведения, даже когда данные, подлежащие приведению, обрабатываются параллельно.  Многие циклы являются более сложными, в них компилятор не сможет распознать возможности для распараллеливания. Поэтому разработчикам рекомендуется изучать части кода, на выполнение которых тратится больше всего времени, просмотреть отчеты компилятора, чтобы понять, применил ли компилятор оптимизацию, или же ее нужно применить самостоятельно.  Также обратите внимание на важность блокирования данных, если объем данных становится слишком большим. Для меньшей из двух матриц производительность не повышается. Для более крупных матриц производительность значительно возрастает.    Поэтому перед применением блокирования разработчикам следует учесть относительный размер данных и кэша. При добавлении нескольких вложенных циклов и соответствующих границ разработчики могут добиться увеличения производительности от 2 до 10 раз по сравнению с первоначальным кодом. Это значительный прирост производительности, достигающийся при вполне разумном объеме усилий. 

Использование оптимизированных библиотек

Как известно, нет предела совершенству. Блочный код по-прежнему работает не с самой большой скоростью: можно его ускорить с помощью процедур BLASDGEMMуровня 3 из оптимизированных библиотек LAPACK, таких как Intel® Math Kernel Library (Intel® MKL). Для обычной линейной алгебры и преобразований Фурье современные библиотеки, такие как Intel Math Kernel Library, обеспечивают еще более эффективную оптимизацию по сравнению с простым блокированием и переупорядочением. Разработчикам рекомендуется применять такие оптимизированные библиотеки во всех возможных случаях.

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


Рисунок 5. Двухмерное представление блочной модели

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

Если поместить данные в двухмерные блоки, как показано на рис. 5, то для обновления шести позиций используется 20 значений, помещаемых в регистры блоками по два; при этом соотношение приблизится к 1:2.

Рекомендую читателям ознакомиться с конечно-разностными техниками в превосходной статье Восемь методов оптимизации трехмерного конечно-разностного (3DFD) изотропного кода (ISO)Седрика Андреолли (Cedric Andreolli). В этой статье описывается не только блокирование, но и другие методики оптимизации памяти.

Заключение

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

Полный код можно загрузить здесь: https://github.com/drmackay/samplematrixcode

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

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

$
0
0

Аннотация

В связи с выпуском новой камеры переднего обзора SR300 были внесены изменения в Intel® RealSense™ SDKи Intel® RealSense™ Depth Camera Manager. Из-за этих изменений существующие приложения могут перестать работать. В этой статье приводится обзор некоторых аспектов разработки приложений, работающих с разными камерами: Intel® RealSense™ F200и SR300. Также описываются методы определения моделей камер переднего и заднего обзора в Intel RealSense SDK. В частности, эти методы предусматривают использование сценариев установщика для обнаружения локального устройства съемки и использование Intel RealSense SDK для определения модели камеры и ее конфигурации во время выполнения. Эта статья предназначена для начинающих разработчиков и специалистов среднего уровня, которые либо уже разрабатывали приложения для камер F200 и хотят убедиться в совместимости этих приложений с камерами SR300, либо хотят разработать новые приложения Intel® RealSense™ для новых возможностей камер SR300.

Введение

В связи с выпуском новой, усовершенствованной камеры переднего обзора Intel RealSense SR300 был внесен ряд изменений в пакет Intel RealSense SDK. Теперь следует принимать во внимание новые факторы для поддержания совместимости приложений с разными версиями SDK. В SDK, начиная с версии R5 2015 для Windows*, поддерживаются три модели камер: камера заднего обзора Intel RealSense R200 и две камеры переднего обзора (камера F200 и более новая камера SR300). В модели SR300 применен ряд усовершенствований по сравнению с F200: увеличена дальность отслеживания, улучшено обнаружение движений, используются более совершенные датчики цветного изображения и инфракрасные датчики, снижена нагрузка на системные ресурсы. Разработчикам рекомендуется создавать новые, интересные приложения, использующие эти новые возможности.

Тем не менее наличие систем с разными моделями камер переднего обзора повлекло определенные проблемы для разработчиков. Необходимо выполнять определенные действия, чтобы проверить наличие и конфигурацию камеры Intel RealSense для обеспечения совместимости. В этой статье приводятся наиболее известные методы разработки приложений для SR300 и адаптации приложений, предназначенных для камеры F200, к платформе SR300 с сохранением совместимости с обеими моделями камер.

Определение камеры Intel® RealSense™ при установке

Чтобы обеспечить поддержку камеры, следует проверить, какая модель камеры есть в системе на момент установки приложения. Сценарий установщика в Intel RealSense SDK поддерживает возможность проверки наличия любых моделей камер с помощью параметров командной строки. Кроме случаев, когда требуется какая-либо одна определенная модель камеры, мы рекомендуем использовать установщик для определения не модели, а ориентации камеры (передний или задний обзор), чтобы приложение поддерживало платформы с разными моделями камеры. Если же нужно проверить наличие определенных функций, можно проверять конкретную модель камеры (Intel RealSense F200, SR300 и R200), указав соответствующие параметры. Если запрошенная модель камеры не будет обнаружена, программа установки завершит работу с кодом ошибки. Полный список команд установщика SDK см. на веб-сайте документации SDKв разделе Параметры установщика. Параметры, относящиеся к определению камеры, и образцы команд приведены ниже.

Параметр команды установщика

--f200
--sr300
--f200
--r200

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

--front
--rear

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

Примеры

Определение наличия любой камеры заднего обзора и автоматическая установка среды выполнения трехмерного сканирования путем загрузки с веб-сайта:

intel_rs_sdk_runtime_websetup_YYYY.exe --rear --silent --no-progress --acceptlicense=yes --finstall=core,3ds --fnone=all

Определение наличия камеры F200 и автоматическая установка среды выполнения face:

intel_rs_sdk_runtime_YYYY.exe --f200 --silent --no-progress --acceptlicense=yes --finstall=core,face3d --fnone=all

Определение конфигурации камеры Intel RealSense во время выполнения

Проверив правильность определения камеры во время установки, следует проверить версию устройства съемки и драйвера, т. е. версию Intel RealSense Depth Camera Manager (DCM), при инициализации приложения. Для этого используйте механизмы в составе Intel RealSense SDK, например DeviceInfoи ImplDesc. Обратите внимание, что информация об устройстве действительна только после функции Initинтерфейса SenseManager.

Проверка модели камеры

Чтобы проверить модель камеры при запуске, используйте функцию QueryDeviceInfo, которая возвращает структуру DeviceInfo. Структура DeviceInfoвключает переменную-член DeviceModel, в состав которой входят все доступные поддерживаемые модели камер. Обратите внимание, что все значения, перечисленные переменной DeviceModel, включают заранее заданные модели камер, которые будут изменяться по мере развития SDK. Нужно убедиться в том, что версия SDK, в которой компилируется ваше приложение, достаточно свежая и включает поддержку нужной модели камеры, необходимой вашему приложению.

В примере кода 1 показано использование функции QueryDeviceInfoдля получения модели подключенной камеры на C++. Обратите внимание, что информация об устройстве действительна только после функции Initинтерфейса SenseManager.

Пример кода 1.Проверка модели камеры во время выполнения с помощью DeviceInfo

// Create a SenseManager instance
PXCSenseManager *sm=PXCSenseManager::CreateInstance();
// Other SenseManager configuration (say, enable streams or modules)
...
// Initialize for starting streaming.
sm->Init();
// Get the camera info
PXCCapture::DeviceInfo dinfo={};
sm->QueryCaptureManager()->QueryDevice()->QueryDeviceInfo(&dinfo);
printf_s("camera model = %d\n", dinfo.model);
// Clean up
sm->Release();

Проверка версии Intel RealSense Depth Camera Manager во время выполнения

Пакет Intel RealSense SDK также дает возможность проверять версию DCM во время выполнения (помимо версий среды выполнения SDK и отдельных алгоритмов). Это полезно, чтобы убедиться в том, что необходимые технологии Intel® RealSense™ установлены в системе. Устаревшая версия DCM может вызвать непредвиденное поведение камеры, неработоспособность различных функций SDK (таких как обнаружение, отслеживание и т. п.) или снижение производительности. Кроме того, последняя версия Gold DCM для камеры Intel RealSense SR300 необходима, чтобы реализовать обратную совместимость для приложений, предназначенных для камеры F200 (последнюю версию SR300 DCMнеобходимо установить на ПК с Windows 10 с помощью Центра обновления Windows). Приложение, разработанное в SDK версии до R5 2015 для камеры F200, должно проверять и модель камеры, и версию DCM при запуске, чтобы обеспечить совместимость на компьютере с камерой SR300.

Для проверки версии драйвера камеры во время выполнения используйте функцию QueryModuleDesc, которая возвращает дескриптор указанного модуля в структуре ImplDesc. Для получения версии драйвера камеры укажите устройство съемки в качестве входного аргумента для QueryModuleDescи получите версию в качестве члена структуры ImplDesc. В примере кода 2 показано получение версии драйвера камеры в SDK версии R5 с помощью кода на C++. Если в системе не установлен DCM, то вызов QueryModuleDescвозвращает ошибку STATUS_ITEM_UNAVAILABLE. В случае отсутствия DCM или несовпадения версии рекомендуется предложить пользователю установить последнюю версию с помощью Центра обновления Windows. Полные сведения о проверке версий SDK, камеры и алгоритмов см. в разделе справки Проверка версий SDK, драйвера камеры и алгоритмовна веб-сайте документации SDK.

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

PXCSession::ImplVersion GetVersion(PXCSession *session, PXCBase *module) {
    PXCSession::ImplDesc mdesc={};
    session->QueryModuleDesc(module, &mdesc);
    return mdesc.version;
}
// sm is the PXCSenseManager instance
PXCSession::ImplVersion driver_version=GetVersion(sm->QuerySession(), sm->QueryCaptureManager()->QueryCapture());
PXCSession::ImplVersion face_version=GetVersion(sm->QuerySession(), sm->QueryFace());

Разработка для разных моделей камер переднего обзора

Начиная с SDK версии R5 2015 для Windows, в список поддерживаемых камер добавлена новая камера Intel RealSense SR300. Камера SR300 является улучшенной версией модели Intel RealSense F200. Усовершенствования затронули несколько важных областей: увеличена дальность отслеживания, снижено потребление электроэнергии, повышено качество цветопередачи при малой яркости освещения, повышено соотношение «сигнал/шум» для ИК-датчика и т. д. В приложениях, использующих возможности SR300, можно добиться повышенного качества и скорости отслеживания, а также ускоренного реагирования по сравнению с приложениями для F200. Впрочем, выпуск новой камеры означает повышение сложности и в обеспечении совместимости приложений, и в задействовании конкретных функций в разных моделях камер.

В этом разделе приводятся основные факторы, которые необходимо учитывать разработчикам при создании приложений, способных воспользоваться новыми возможностями камер SR300 или работать в режиме обратной совместимости, используя только возможности камер F200. Более полное описание переделки приложений для камеры F200 в приложения для камеры SR300 см. в разделе Работа с камерой SR300на веб-сайте документации SDK.

Режим совместимости с камерой Intel RealSense F200

Чтобы приложения, предназначенные для камеры F200, могли работать в системах с камерой SR300, в DCM для камеры SR300 (версии Gold или более поздней) реализован режим совместимости с F200. Этот режим автоматически включается при получении запроса от приложения, скомпилированного в SDK версии до R5, и позволяет драйверу DCM имитировать работу камеры F200. Если в этом режиме приложение вызовет QueryDeviceInfo, то в качестве имени и модели устройства будет возвращено значение F200. При этом запросы, поступающие от приложений, скомпилированных в SDK версии R5 2015 или более поздней, будут обрабатываться без изменений: режим совместимости отключается, приложение сможет использовать все возможности камеры SR300.

Следует отметить, что одновременно можно использовать только один режим: обычный режим или режим совместимости. Это означает, что при последовательном запуске двух приложений необходимость включения режима совместимости с F200 будет определяться по первому приложению. Если первое приложение было скомпилировано в SDK версии до R5, то режим совместимости с F200 будет автоматически включен вне зависимости от версии SDK второго приложения. Если же первое приложение было скомпилировано в SDK версии R5 или более поздней, то режим совместимости с F200 будет автоматически отключен, все последующие приложения будут определять модель камеры как SR300. Поэтому, если первое приложение создано в SDK версии R5 или более поздней (режим совместимости с F200 отключается), а второе приложение создано в SDK версии до R5, то второе приложение не найдет в системе доступную камеру Intel RealSense и не будет работать. Причина в том, что приложению, созданному в SDK версии до R5, требуется камера F200, но DCM работает в режиме SR300 из-за первого приложения. В настоящее время нет способа переопределить состояние совместимости с F200 для последующих приложений. Невозможно и включить в DCM поддержку режимов F200 и SR300 одновременно.

В таблице 1 приводится сводка по состоянию режима совместимости при запуске нескольких приложений Intel RealSense в одной и той же системе с камерой SR300 (приложение 1 запускается до приложения 2).

Таблица 1. Состояние режима совместимости с камерой IntelRealSenseF200 при нескольких запущенных приложениях

Приложение 1

Приложение 2

Состояние режима совместимости с камерой F200

Комментарии

Компиляция в версии до R5

Компиляция в версии до R5

ВКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано в версии до R5, и включает режим совместимости с F200.

Компиляция в версии до R5

Компиляция в версии R5 или более поздней

ВКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано в версии до R5, и включает режим совместимости с F200.

Компиляция в версии R5 или более поздней

Компиляция в версии до R5

ОТКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение предназначено для камеры SR300 и отключает режим совместимости с F200. Приложение 2 не найдет допустимую камеру и не запустится.

Компиляция в версии R5 или более поздней

Компиляция в версии R5 или более поздней

ОТКЛЮЧЕН

Приложение 1 запускается первым, DCM определяет, что приложение скомпилировано для версии R5 или более поздней, и отключает режим совместимости с F200. Оба приложения будут использовать запросы, относящиеся к SR300.

Разработка приложений, независимых от устройств

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

Совместимость интерфейсов SDK

Для поддержания наибольшей совместимости между камерами F200 и SR300 используйте встроенные модули алгоритмов (face, 3DS, BGS и т. д.) и интерфейс SenseManager, чтобы прочитывать необработанные потоки, не указывая разрешение потоков и формат пикселей. При таком подходе SDK будет автоматически обеспечивать необходимые преобразования, а количество требуемых переделок кода будет наименьшим. Помните, что уровень зрелости алгоритмов, созданных для SR300, может быть ниже, чем у алгоритмов для камеры F200, учитывая, что поддержка SR300 реализована только в версии SDK 2015 R5. Внимательно прочтите заметки к выпуску SDK, чтобы оценить уровень развития различных алгоритмов, необходимых для вашего приложения.

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

  • Избегайте указания потоков с использованием определенной конфигурации (разрешения, кадровой скорости):

    sm->EnableStream(PXCCapture::STREAM_TYPE_COLOR, 640, 480, 60);

    Вместо этого пусть SenseManager выбирает подходящую конфигурацию в зависимости от доступной модели камеры:

    sm->EnableStream(PXCCapture::STREAM_TYPE_COLOR);

  • Используйте функции Image (например, AcquireAccessи ExportData) для принудительного преобразования формата пикселей.

    PXCImage::ImageData data;

    image->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB32,&data);

  • Если требуется собственный формат пикселей, обязательно обрабатывайте все такие случаи, чтобы код работал независимо от модели камеры (см. пример SoftwareBitmapToWriteableBitmapв приложении к этому документу).

  • При доступе к свойствам камеры используйте свойства, независимые от устройства. Они перечислены в разделе Device Neutral Device Properties.

Несовместимость Intel RealSense SDK

На момент выпуска Intel RealSense SDK версии R5 2015 остается еще несколько API, обладающих несовместимостью между камерами F200 и SR300. Выполните действия по адаптации, приведенные в таблице 2, чтобы написать код, работающий с любыми камерами.

Таблица 2.Действия по устранению несовместимости с камерами переднего обзора

 

Функция

Проблема совместимости

Рекомендации

Имя камеры

Понятное имя и идентификатор модели устройства различаются у F200 и SR300.

- Не используйте строку с понятным именем модели в качестве уникального идентификатора. Используйте ее только для отображения имени устройства в текстовой строке для пользователя.

- Используйте имя модели устройства для выполнения операций с камерой. Используйте значение ориентации (передний обзор или задний обзор) из DeviceInfo, если этого достаточно.

Соотношение «сигнал/шум»

Инфракрасный датчик камеры SR300 обладает гораздо более высоким соотношением «сигнал/шум» и поддерживает 10-битный тип данных (по сравнению с 8-битными данными камеры F200). Поэтому формат пикселей IR_RELATIVEбольше не выдается.

- Используйте функцию AcquireAccessдля принудительного использования формата Y16при доступе к потоку данных ИК-датчика камеры SR300.

Коэффициент увеличения данных глубины

Собственное представление данных в потоке глубины изменено с 1/32 мм у камеры F200 на 1/8 мм у камеры SR300. При доступе к собственным данным глубины с форматом пикселей DEPTH_RAWнеобходимо использовать соответствующий коэффициент увеличения. (Это не влияет на приложения, использующие формат пикселей DEPTH.)

- Для получения правильного коэффициента увеличения используйте QueryDepthUnitили задействуйте принудительное преобразование формата DEPTH_RAWв формат DEPTHс помощью функции AcquireAccess.

Свойства устройства

В некоторых свойствах устройств, описанных в документе Функции-члены F200 и SR300, содержатся различия между этими двумя камерами, о которых следует помнить.

Таблица определения параметров фильтровразличается в зависимости от дальности действия камер.

— SR300 поддерживает только параметр FINESTдля функции SetIVCAMAccurary

- Не используйте свойства, относящиеся к конкретной камере, чтобы не потерять функциональность при смене камеры. Используйте модули алгоритмов Intel RealSense SDK, чтобы пакет SDK автоматически подбирал наилучшие параметры для каждого алгоритма.

Заключение

В этой статье описаны рекомендации по обеспечению совместимости между разными моделями камер Intel RealSense. В SDK версии R5 2015 для Windows предусмотрены встроенные функции поддержки совместимости. В целом, рекомендуется создавать приложения так, чтобы использовать только общие для всех камер возможности. За счет этого ускоряется разработка и обеспечивается универсальность. Если приложение использует уникальные возможности какой-то одной модели камер, позаботьтесь о том, чтобы проверять конфигурацию системы как при установке приложения, так и при его инициализации. Чтобы упросить адаптацию приложений, созданных для камеры F200, к работе с камерой SR300, в драйвере DCM SR300 поддерживается режим совместимости с F200. В этом режиме приложения для предыдущей модели камеры будут безупречно работать с более современной камерой. При этом следует помнить, что прежние приложения (скомпилированные в SDK версии до R5) необходимо обновить. Иначе эти приложения не будут работать в системах с камерами SR300, если одновременно запустить другие приложения, созданные в SDK версии R5 или более поздней. И наконец, важно прочесть всю вспомогательную документацию по SDK, чтобы понять разницу в работе определенных функций SDK с разными моделями камер.

Ресурсы

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

https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?doc_devguide_introduction.html

Руководство по переходу на SR300

https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?doc_mgsr300_working_with_sr300.html

Приложение

SoftwareBitmapToWriteableBitmap Code Sample

// SoftwareBitmap is the UWP data type for images.
public SoftwareBitmapToWriteableBitmap(SoftwareBitmap bitmap,
WriteableBitmap bitmap2)
{
switch (bitmap.BitmapPixelFormat)
{
default:
using (var converted = SoftwareBitmap.Convert(bitmap,
BitmapPixelFormat.Rgba8))
converted.CopyToBuffer(bitmap2.PixelBuffer);
break;
case BitmapPixelFormat.Bgra8:
bitmap.CopyToBuffer(bitmap2.PixelBuffer);
break;
case BitmapPixelFormat.Gray16:
{
// See the UWP StreamViewer sample for all the code.
....
break;
}
}
}

Об авторе

Тион Томас (Tion Thomas) — инженер по программному обеспечению в подразделении Developer Relations корпорации Intel. Он помогает создавать современные пользовательские интерфейсы, отличающиеся оптимальной производительностью и потреблением электроэнергии, для всех типов потребительских приложений, особенно при управлении без помощи контроллеров. Тион с большим интересом создает удобные и мощные решения с использованием современных технологий. Кроме того, он изучает игры и технологии виртуальной реальности.

Intel® Data Analytics Acceleration Library (Intel® DAAL)

$
0
0

Intel® Data Analytics Acceleration Library (Intel® DAAL)

Закрыть

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

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

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

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

Intel DAAL в экосистеме больших данных

Библиотека Intel DAAL работает на всех этапах цикла аналитики данных: предварительная обработка, преобразование, анализ, моделирование, проверка и принятие решений.

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



Загрузить описание продукта ›

Краткие технические характеристики

ПроцессорыПроцессоры Intel®, сопроцессоры и совместимые модели.
ЯзыкиC++, Java
Средства и среды разработки

Microsoft Visual Studio* (Windows*)

Eclipse/CDT* (Linux*)

Операционные системыЕдиный API для разработки приложений для различных операционных систем: Windows, Linux и OS X*.

Для получения подробной информации о возможностях оптимизации компилятора см. наше уведомление об оптимизации.

Образцы кода Intel для Интернета вещей: будильник

$
0
0

Введение

Этот будильник входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • настраивать сервер веб-приложения для установки времени срабатывания будильника и сохранения данных будильника с помощью Azure Redis Cache* в Microsoft* Azure*, облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей;
  • вызывать службы API Weather Underground* для получения метеорологических данных.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать будильник, обладающий следующими возможностями:

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

Как это работает

Этот будильник обладает целым рядом полезных функций. Можно настраивать время сигнала с веб-страницы, которая загружается непосредственно платой Intel® Edison, с помощью мобильного телефона. В заданное время срабатывает звуковой сигнал, а на ЖК-экране выводится сообщение о том, что пора вставать. Для регулировки яркости экрана можно использовать поворотную рукоятку.

Кроме того, этот будильник может ежедневно получать данные о погоде с помощью API Weather Underground* и изменять цвет ЖК-экрана в соответствии с этими данными. Кроме того, все данные можно сохранять с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Grove* Starter Kit Plus.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Аналоговая поворотная рукоятка Grove*
  3. Пищалка Grove*.
  4. Кнопка Grove*
  5. Цветной ЖК-экран Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*
  3. Ключ API Weather Undergroundy*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к аналоговой поворотной рукоятке Grove*, а другой — к порту A0 на плате Grove* Shield.
  2. Подключите один конец кабеля Grove* к кнопке Grove*, а другой — к порту D4 на плате Grove* Shield.
  3. Подключите один конец кабеля Grove* к пищалке Grove*, а другой — к порту D5 на плате Grove* Shield.
  4. Подключите один конец кабеля Grove* к цветному ЖК-экрану Grove*, а другой — к любому порту I2C на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Ключ API Weather Underground*

Для получения данных о погоде в реальном времени нужно получить ключ API на веб-сайте Weather Underground*:

http://www.wunderground.com/weather/api

Получение метеорологических данных невозможно без ключа API Weather Underground*. Этот пример программы будет работать и без ключа, но в этом случае не будет данных о погоде.

Передайте ключ API Weather Underground* в пример программы, изменив параметр WEATHER_API_KEYв файле config.jsonследующим образом:

{
  WEATHER_API_KEY: "YOURAPIKEY"
}

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для получения данных о погоде в реальном времени, получите ключ с веб-сайта Weather Underground*, как описано выше, и измените параметры WEATHER_API_KEYи LOCATIONв файле config.jsonследующим образом:

{"WEATHER_API_KEY": "YOURAPIKEY","LOCATION": "San_Francisco"
}

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/alarm-clock","AUTH_TOKEN": "s3cr3t"
}

Чтобы настроить этот пример для использования одновременно и метеорологических данных, и хранилища данных Microsoft* Azure*, измените параметры WEATHER_API_KEY, LOCATION, SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"WEATHER_API_KEY": "YOURAPIKEY","LOCATION": "San_Francisco""SERVER": "http://intel-examples.azurewebsites.net/logger/alarm-clock","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Настройка сигнала будильника

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

Порт веб-сервера — 3000, поэтому при подключении платы Intel® Edison к Wi-Fi* с IP-адресом 192.168.1.13для подключения к веб-серверу из этой же сети нужно использовать адрес http://192.168.1.13:3000.

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.


Образцы кода Intel для Интернета вещей: датчик чистоты воздуха

$
0
0

Введение

Этот датчик чистоты воздуха входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • сохранять данные о качестве воздуха с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать датчик чистоты воздуха, обладающий следующими возможностями:

  • Постоянная проверка качества воздуха (проверка наличия загрязняющих веществ в воздухе).
  • Звуковая сигнализация в случаях, когда воздух из-за низкого качества становится вредным для здоровья.
  • Сохранение данных обо всех случаях обнаружения загрязняющих веществ с помощью облачного хранилища данных.

Как это работает

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

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

Кроме того, система может записывать данные о чистоте воздуха с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Grove* Home Automation Kit.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Датчик качества воздуха Grove*
  3. Динамик Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure (необязательно)

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к датчику качества воздуха Grove*, а другой — к порту A0 на плате Grove* Shield.
  2. Подключите один конец кабеля Grove* к динамику Grove*, а другой — к порту D5 на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/air-quality","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениямиIf you made changes to the code, click Upload and Run. This runs the latest code with your changes on Intel® Edison.

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

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Использование камеры Intel® RealSense™ с TouchDesigner*. Часть 2

$
0
0

Загрузить демонстрационные файлы ZIP 14KB

Камера Intel® RealSense™ — очень полезный инструмент для создания проектов виртуальной реальности и дополненной реальности. Во второй части этой статьи вы узнаете, как использовать узлы камеры Intel RealSense в TouchDesigner для настройки рендеринга или проекции в реальном времени для многоэкранных систем, одиночных экранов, 180-градусных (полнокупольных) и 360-градусных систем виртуальной реальности. Кроме того, информацию с камеры Intel RealSense™ можно передавать в Oculus Rift* с помощью узла Oculus Rift TOP в TouchDesigner.

Вторая часть будет посвящена узлу RealSense CHOP в TouchDesigner.

Доступ к самым важным функциям отслеживания камер RealSense F200и R200, таким как отслеживание глаз, пальцев и лица, осуществляется в узле RealSense CHOP в TouchDesigner. Эти функции отслеживания особенно интересно использовать в анимации реального времени или при отслеживании анимации в соответствии с движениями тела и жестами людей. Мне это представляется наиболее полезным для выступлений танцоров или музыкантов, где требуется высокий уровень интерактивности между живым видео, анимацией, графикой, звуком и выступлением.

Для получения файлов TouchDesigner* (.toe), связанных с этой статьей, нажмите кнопку в верхней части этой статьи. Также доступна бесплатная копия TouchDesigner для некоммерческого использования. Она обладает полной функциональностью, но максимальное разрешение не может превышать 1280 x 1280.

Вновь следует отметить, что благодаря поддержке камеры Intel RealSense программа TouchDesigner* становится еще более универсальным и мощным средством.

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

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

Исторические сведения

Все данные, предоставляемые камерами Intel RealSense, очень полезны для создания виртуальной реальности и дополненной реальности. Некоторые попытки делать то, что сейчас делается с помощью камеры Intel RealSense, были еще в 80-х годах. Технология отслеживания расположения руки была разработана в 80-х годахв виде перчатки, передающей данные, авторы этого изобретения — Джейсон Ланьер (Jason Lanier) и Томас Циммерман (Thomas G. Zimmerman). В 1987 году компания Nintendo выпустила первый манипулятор для управления играми в виде перчатки, подключаемой по проводам к игровой консоли Nintendo.

Устройства, развитие которых привело к созданию камер Intel RealSense, изначально предназначались для анимации на выступлениях: технологии захвата движения применялись, чтобы преобразовать выступление человека в математические данные, то есть в цифровую информацию. Захват движения применялся еще с 70-х годов в исследовательских проектах в различных университетах, а также в войсках для обучения. Одним из первых анимационных фильмов, созданных с помощью захвата движения, был анимационный ролик Sexy Robot https://www.youtube.com/watch?v=eedXpclrKCc, созданный в 1985 году Робертом Абелем (Robert Abel) и его коллегами. В ролике Sexy Robot использовалось несколько технологий для получения информации, с помощью которой была создана и анимирована цифровая модель робота. Сначала была создана модель робота. Ее измерили со всех сторон, описывающую ее информацию перевели в цифровой вид: аналогичных результатов камера RealSense добивается при съемке объектов. Для вычисления движения на актере нарисовали точки, движение которых соотнесли с движением цифрового «скелета»: была создана векторная анимация, при помощи которой двигалась цифровая модель. Камера RealSense обладает возможностью инфракрасной съемки и инфракрасным лазерным проектором, что позволяет получать данные для цифровых моделей и отслеживания движений. Возможности отслеживания камеры Intel RealSense достаточно совершенны: можно отслеживать даже движения глаз.

Камеры Intel RealSense

В настоящее время существует две модели камер Intel RealSense. Они выполняют схожие функции, но кое в чем различаются: это камера Intel RealSense F200, для которой предназначены упражнения в этой статье, и камера Intel RealSense R200.

Камера Intel RealSense R200 благодаря своему компактному размеру обладает важными преимуществами. Она предназначена для установки на штатив или на заднюю часть планшета. Таким образом, объектив камеры направлен не на пользователя, а на окружающий мир, а благодаря усовершенствованным возможностям съемки поле зрение камеры охватывает более широкую область. Кроме того, у этой камеры улучшены и возможности измерения глубины. Эту камеру очень интересно использовать для проектов дополненной реальности, поскольку в ней поддерживается функция восприятия сцены, позволяющая добавлять виртуальные объекты в отснятую сцену реального мира. Также можно накладывать виртуальную информацию на снимаемое изображение в прямом эфире. В отличие от модели F200 камера R200 не поддерживает отслеживания пальцев, рук и лиц. TouchDesigner поддерживает обе модели камер Intel RealSense: и F200, и R200.

Камеры Intel RealSense в TouchDesigner

TouchDesigner идеально сочетается с камерой Intel RealSense: поддерживается прямая связь между мимикой лица пользователя и движениями рук и программным интерфейсом. TouchDesigner может напрямую использовать эти данные отслеживания и положения. TouchDesigner также может использовать данные глубины, цветного изображения и инфракрасного изображения, передаваемые камерой Intel RealSense. Камеры Intel RealSense очень легкие и компактные, особенно модель R200, которую можно легко разместить рядом с исполнителями незаметно для аудитории.

Адам Берг (Adam Berg), исследователь в компании Leviathan, работающий над проектом по использованию камеры Intel RealSense вместе с TouchDesigner для создания интерактивных инсталляций, заявляет: «Благодаря компактному размеру и простой конструкции камера отлично подходит для интерактивных решений. Камера не бросается в глаза, а требования к инфраструктуре упрощаются, поскольку камере не требуется внешний источник питания. Кроме того, нам понравились низкие задержки при создании изображения глубины. TouchDesigner — великолепная платформа для работы (от создания первоначального прототипа до разработки финальной версии). Она обладает встроенной поддержкой пяти камер, возможностью высокопроизводительного воспроизведения мультимедиа и удобными возможностями работы с шейдерами. Помимо этого, безусловно, следует отметить и великолепную поддержку».

Использование камеры Intel® RealSense™ в TouchDesigner

Во второй части мы рассматриваем узел CHOP в TouchDesigner для камеры Intel RealSense.

Узел RealSenseCHOP

Узел RealSense CHOP управляет трехмерным отслеживанием и данными о положении. Узел CHOP содержит информацию двух типов. (1) Положение в реальном мире (измеряется в метрах, но можно довести точность до единиц миллиметров) используется для преобразования по осям x, y и z. Повороты вокруг осей x, y и z в RealSense CHOP выводятся в виде углов Эйлера по осям x, y и z в градусах. (2) Узел RealSense CHOP также получает пиксели входного изображения и преобразует их в нормализованные UV-координаты. Это полезно для отслеживания изображений.

Узел RealSense CHOP обладает двумя настраиваемыми параметрами: отслеживание пальцев/лица и отслеживание маркера.

  • В разделе Finger/Face Tracking можно выбрать отслеживаемые элементы. Можно ограничить список отслеживаемых элементов только одним аспектом, а затем, соединив узел Select CHOP с узлом RealSense CHOP, вновь ограничить список, чтобы отслеживать только движение брови или глаза.
  • Отслеживание маркеров позволяет загрузить изображение и отслеживать этот элемент, где бы он ни находился.

Использование узла RealSense CHOP в TouchDesigner

Демонстрация 1: использование отслеживания

Это простая первая демонстрация узла RealSense CHOP показывает, как его можно соединять с другими узлами и использовать для отслеживания и создания движения. Вновь обратите внимание, что для этих демонстраций достаточно крайне поверхностного знания TouchDesigner.  Если у вас нет опыта работы с TouchDesigner* и вы собираетесь постепенно разбираться в этой статье, то рекомендую сначала просмотреть документацию, доступную здесь:  Изучение TouchDesigner.

  1. Создайте узлы, которые нам потребуются, и расположение их в горизонтальной строке в следующем порядке: узел Geo COMP, узел RealSense CHOP, узел Select CHOP, узел Math CHOP, узел Lag CHOP, узел Out CHOP и узел Trail CHOP.
  2. Соедините узел RealSense CHOP с узлом Select CHOP, узел Select CHOP — с узлом Math CHOP, узел Math CHOP — с узлом Lag CHOP, узел Lag CHOP — с узлом Out CHOP Node, а узел Out CHOP — с узлом Trail CHOP.
  3. Откройте страницу параметров Setupузла RealSense CHOP и убедитесь, что для параметра Hands World Position задано значение On. Выводится расположение отслеживаемых суставов руки в пространстве. Значения указываются в метрах по отношению к камере.
  4. На странице параметров Selectузла Select CHOP установите для параметра ChannelNamesзначение hand_r/wrist:tx, выбрав его среди доступных значений в раскрывающемся списке справа от параметра.
  5. В параметре RenameFromвведите hand_r/wrist:tx, затем в параметре RenameToparameterвведите x.
    Рисунок 1.Отбор каналов из узла RealSenseCHOPпроисходит в узле SelectCHOP
  6. В параметре Range/To Rangeузла Math CHOP введите 0, 100. Для уменьшенного диапазона движений введите число меньше 100.
  7. Выберите узел Geometry COMP и убедитесь, что он находится на странице параметров Xform. Нажмите кнопку «+» в правом нижнем углу узла Out CHOP, чтобы включить просмотр. Перетащите канал X на параметр Translate X узла Geometry COMP и выберите ExportCHOPв раскрывающемся меню.
    Рисунок 2.Здесь вы добавляете анимацию, полученную из RealSenseCHOP

    Для рендеринга геометрии понадобится узел Camera COMP, узел Material (MAT) (я использовала Wireframe MAT), узел Light COMP и узел Render TOP. Добавьте эти узлы для рендеринга этого проекта.

  8. В узле Camera COMP на странице параметров Xformустановите для параметра Translate Z значение 10. Это позволит лучше видеть движение созданной геометрии, поскольку камера сдвигается назад по оси Z.
  9. Проведите рукой перед камерой и посмотрите, как геометрическая фигура будет двигаться в узле Render TOP.
Рисунок 3.Как узлы соединены друг с другом. Благодаря узлу TrailCHOPв конце можно просмотреть анимацию в графической форме

Рисунок 4.Значение преобразования xузла GeometryCOMPбыло экспортировано из канала xв узел OutCHOP, который был передан далее по цепочке от узла SelectCHOP

Демонстрация 2. Отслеживание маркера RealSense CHOP

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

  1. Добавьте узел RealSense CHOP в сцену.
  2. На странице параметров Setupузла RealSense CHOP выберите для параметра Mode значение MarkerTracking.
  3. Создайте ресурс Movie File в TOP.
  4. На странице параметров Playузла TOP в разделе Fileвыберите и загрузите цифровое изображение, для которого у вас также есть печатная версия.
  5. Перетащите Movie File в TOP на страницу параметров Setupузла RealSense CHOP и в ячейку MarkerImageTOPв нижней части страницы.
  6. Создайте узлы Geometry COMP, Camera COMP, Light COMP и Render TOP.
  7. Как было сделано ранее на шаге 7 в демонстрации 1, экспортируйте канал tx из RealSense CHOP и перетащите его в параметр TranslateXузла Geometry COMP.
  8. Создайте узел Reorder TOP и соедините его с узлом Render TOP. На странице параметров Reorder узла OutputAlphaвыберите Oneв раскрывающемся списке.
  9. Поместите напечатанное изображение цифрового файла перед камерой Intel RealSense и подвигайте его. Камера должна отслеживать движение и выдавать его узлу Render TOP. Числа в RealSense CHOP также изменятся.
Рисунок 5. Это полный макет демонстрации с отслеживанием маркера

 

Рисунок 6. На странице параметров узла GeoCOMPканал txиз узла RealSenseCHOPперетащен на параметр Translatex

Отслеживание глаза в TouchDesigner с помощью узла RealSense CHOP

На палитре программ TouchDesigner в разделе RealSenseесть шаблон eyeTracking, который можно использовать для отслеживания движения глаз пользователя. Этот шаблон использует отслеживание пальцев/лицаузла RealSense CHOP; для узла RealSense TOP должен быть задан Color. В шаблоне зеленые прямоугольники WireFrame двигаются в соответствии с движением глаз человека и накладываются на цветное изображение человека в RealSense TOP. Вместо открытых зеленых прямоугольников можно использовать любые другие геометрические фигуры или частицы. Это очень удобный шаблон. Вот изображение с шаблоном.

Рисунок 7.Обратите внимание, что глаза отслеживаются даже через очки

Демонстрация 3, часть 1. Простой способ настройки полнокупольного рендеринга или виртуальной реальности

В этой демонстрации мы берем файл и показываем, как представить его в полнокупольном рендеринге и в 360-градусной виртуальной реальности. Я уже подготовила такой файл для загрузки. Это файл chopRealSense_FullDome_VR_render.toe.

Краткое описание процесса создания этого файла

В этом файле я хотела разместить геометрические фигуры (сферу, тор, цилиндры и прямоугольники) в сцене. Поэтому я создала несколько узлов SOP для этих различных геометрических фигур. Каждый узел SOP был присоединен к узлу Transform SOP для перемещения (преобразования) геометрических фигур в разных местах сцены. Все узлы SOP соединены с одним узлом Merge SOP. Узел Merge SOP подан узлу Geometry COMP.

Рисунок 8.Это первый шаг в разметке геометрических фигур, размещенных в сцене, в загружаемом файле

Затем я создала узел Grid SOP и узел SOP–DAT. Узел SOP–DAT был использован для получения экземпляра Geometry COMP, чтобы можно было добавить в сцену больше геометрических фигур. Я также создала узел Constant MAT, выбрала зеленый цвет и включила параметр WireFrameна странице Common.

Рисунок 9.Узел SOPDATбыл создан с помощью узла GridSOP

Затем я создала узел RealSense CHOP и соединила его с узлом Select CHOP, в котором я выбрала канал hand_r/wrist:txдля отслеживания и переименовала его в x. Я соединила Select CHOP с узлом Math CHOP, чтобы можно было изменить дальность, и соединила Math CHOP с узлом Null CHOP. Рекомендуется всегда завершать цепочку узлом Null или Out, чтобы было удобнее вставлять новые фильтры в цепочку. Затем я экспортировала x Channel из узла Null CHOP в параметр ScaleXузла Geometry COMP. Это обеспечивает управление всеми перемещениями геометрических фигур по оси x в сцене, когда я провожу правой рукой перед камерой Intel RealSense.

Рисунок 10.Данные отслеживания из узла RealSenseCHOPиспользуются для создания анимации в реальном времени и движения геометрических фигур вдоль оси x

Для создания полнокупольного 180-градусного рендеринга из этого файла

  1. Создайте узлы Render TOP, Camera COMP и Light COMP.
  2. На странице параметров Renderузла Render TOP выберите CubeMapв раскрывающемся меню Render Mode.
  3. На странице параметров Common узла Render TOP задайте для параметра Resolution разрешение с соотношением сторон 1:1, например 4096 на 4096, для получения разрешения 4K.
  4. Создайте узел Projection TOP и соедините с ним узел Render TOP.
  5. На странице параметров Projection узла Projection TOP выберите Fish-Eyeв раскрывающемся меню Output.
  6. (Это необязательно, в этом случае у файла будет черный фон.) Создайте узел Reorder TOP и на странице параметров Reorder в правом раскрывающемся меню Output Alpha выберите One.
  7. Теперь все готово либо к непосредственному выполнению анимации, либо к экспорту файла фильма. Инструкции см. в первой частиэтой статьи. Вы создаете круговую купольную анимацию типа «Рыбий глаз». Это будет окружность с квадратом.

Чтобы использовать альтернативный метод, вернитесь на шаг 2 и вместо выбора Cube Map в раскрывающемся меню Render Mode выберите Fish-Eye(180). Теперь перейдите к шагу 3, а также при желании — к шагу 6. Теперь анимация готова к запуску или к экспорту.

Для создания 360-градусной виртуальной реальности из этого файла

  1. Создайте узлы Render TOP, Camera COMP и Light COMP.
  2. На странице параметров Renderузла Render TOP выберите CubeMapв раскрывающемся меню Render Mode.
  3. На странице параметров Commonузла Render TOP задайте для параметра Resolutionразрешение с соотношением сторон 1:1, например 4096 на 4096, для получения разрешения 4K.
  4. Создайте узел Projection TOP и соедините с ним узел Render TOP.
  5. На странице параметров Projectionузла Projection TOP выберите Equirectangularв раскрывающемся меню Output. При этом будет автоматически установлено соотношение сторон 2:1.
  6. (Это необязательно, в этом случае у файла будет черный фон.) Создайте узел Reorder TOP, затем на странице параметров Reorder в правом раскрывающемся меню Output Alpha выберите One.
  7. Теперь все готово либо к непосредственному выполнению анимации, либо к экспорту файла фильма. Инструкции см. в первой частиэтой статьи. При экспорте фильма вы создаете прямоугольную анимацию с соотношением сторон 2:1 для просмотра в очках виртуальной реальности.
Рисунок 11.В файл добавлены длинные оранжевые узлы TubeSOP. Вы можете добавить собственную геометрию в этот файл

Вывод на Oculus Rift* из TouchDesigner при использовании камеры Intel RealSense

В TouchDesigner создано несколько шаблонов для загрузки. В них показано, как настроить Oculus Rift в TouchDesigner. Один из этих шаблонов — OculusRiftSimple.toe — можно загрузить с помощью кнопки в правом верхнем углу этой статьи.   Для просмотра в Oculus Rift, естественно, компьютер должен быть подключен к Oculus Rift. Без Oculus Rift можно создать файл, просмотреть изображения в узлах LeftEye Render TOP и RightEye Render TOP и отобразить их в фоне сцены. Я добавила поддержку Oculus Rift в файл, использованный в демонстрации 3. Таким образом, камера Intel RealSense анимирует изображение, которое я вижу в Oculus Rift.

Рисунок 12.Здесь в фоне отображается левый глаз и правый глаз. Большая часть анимации этой сцены управляется путем отслеживания из узла CHOPкамеры Intel®RealSense™. Файл, использованный для получения этого изображения, можно загрузить, нажав на кнопку в правом верхнем углу этой статьи, chopRealSense_FullDome_VRRender_FinalArticle2_OculusRiftSetUp.toe

Об авторе

Одри Филипс (Audri Phillips) — специалист по визуализации и трехмерной анимации из Лос-Анджелеса. Она располагает обширным профессиональным опытом, включая 25 лет стажа работы в отрасли визуальных эффектов и развлечений в таких анимационных студиях, как Sony*, Rhythm and Hues*, Digital Domain*, Disney* и Dreamworks*. Сначала она занималась рисованием, но быстро перешла к созданию анимационных изображений. Она всегда интересовалась новыми инструментами и применяла компьютерные изображения и анимацию в экспериментальных фильмах, включая демонстрации для погружения в виртуальную среду. Сейчас она работает над системами виртуальной реальности. Корпорация Samsung* недавно использовала ее работы в новом канале виртуальной реальности Gear Indie Milk.

Вот ее последние работы и анимации: мультимедиаанимации для фестиваля Implosion a Dance Festival в 2015 году в театральном центре Лос-Анджелеса, 3 полусферические демонстрации в куполе Vortex Immersion, над созданием одной из которых также работал известный композитор и музыкант Стив Роуч (Steve Roach). 7 ноября 2015 г. вышла четвертая полнокупольная демонстрация под названием Relentless Universe. Помимо этого, она создала анимационные материалы для телесериала «Константин». Они были показаны на конференции «Комик-Кон» 2014 года. Некоторые ее полнокупольные демонстрации, в том числе Migrations и Relentless Beauty, получили оценку жюри на международном фестивале Santa Fe International New Media Festival и на фестивале Jena FullDome Festival в Германии. Она выставляет свои работы в галерее Young Projects в Лос-Анджелесе.

Она публикует материалы в Интернете и ведет блог на портале корпорации Intel®. Одри — адъюнкт-профессор в Университете Вудбери, член-основатель и лидер организации Los Angeles Abstract Film Group, основатель студии Hybrid Reality Studio (занимающейся созданием материалов для виртуальной реальности), член правления Iota Center, а также участник выставок LA Art Lab. В 2011 году Одри стала постоянным художником Vortex Immersion Media и c3: CreateLAB. Ее работы можно посмотреть на сайтах Vimeo, creativeVJи Vrideo.

Платы разработки Intel® Galileo и Intel® Edison

$
0
0

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

Корпорация Intel выпускает две платы разработки для Интернета вещей: Intel® Galileo и Intel® Edison. Обе платы отлично подходят для создания устройств Интернета вещей. Можно считать их очень маленькими системными платами, обладающими всей мощью процессоров Intel®и различными вариантами расширения. Кроме того, обе платы работают под управлением Linux*, поэтому у вас есть полный доступ и возможность настройки всех параметров используемого оборудования.

Давайте подробнее рассмотрим возможности плат Intel® Galileo и Intel® Edison.

Intel® Galileo — конструктор для создания прототипов

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

Почему она настолько мощная? Давайте ознакомимся с техническими характеристиками Intel® Galileo.

  • «Система на кристалле» с процессором Intel® Quark™ X1000
  • 256 МБ оперативной памяти
  • 8 МБ флеш-памяти
  • Множество стандартных интерфейсов ввода-вывода, включая следующие.
    • Гнездо Mini-PCI Express*
    • Порт Ethernet, 100 Мбит/с
    • Гнездо microSD*, в которое можно устанавливать дополнительную карту флеш-памяти объемом до 32 ГБ
    • Порт USB хоста
    • Клиентский порт USB
  • Совместимость с Arduino*
  • Поддержка Yocto 1.4 Poky* Linux*
  • Поддержка нескольких платформ разработки

Это, по сути, миниатюрный компьютер. Благодаря множеству вариантов подключения платформа Intel® Galileo отлично подходит для условий, в которых непросто получить доступ в Интернет. Например, в устройстве для использования в сельской местности, где нет широкополосного подключения, можно подключить модуль 3G. В производственных условиях, где ограничен доступ к Wi-Fi*, можно использовать порт Ethernet.

Intel® Edison — быстрое создание прототипов, чтобы быстрее выпускать продукты на рынок (или развлекаться)

Плата Intel® Edison разработана для быстрого и недорогого создания прототипов. Вот ее характеристики.

  • «Система на кристалле» с процессором Intel® Atom™, выполненным по 22-нм технологии
  • 1 ГБ оперативной памяти
  • 4 ГБ флеш-памяти
  • Wi-Fi*
  • Интерфейс Bluetooth Low-Energy (LE)*
  • Встроенное управление электропитанием
  • Потребление менее 1 Вт при полной нагрузке
  • Порты USB
  • 40 мультиплексированных интерфейсов GPIO, удобных для подключения датчиков, небольшого ЖК-экрана и различных плат расширения.

И все это на плате размером чуть больше почтовой марки!

Если нужно что-нибудь дешевое, очень компактное и полностью беспроводное, расходующее крайне мало электроэнергии, то Intel® Edison прекрасно подойдет. Неудивительно, что эта плата используется во множестве проектов технической моды, например в линейке футуристической одежды Synapse*нидерландского дизайнера Анук Виппрехт (Anouk Wipprecht). В этой одежде различные датчики определяют настроение человека и показывают его на одежде.

Одним из наиболее известных проектов на основе Intel® Edison в недавнее время стал Nixie* — носимый микровертолет для съемки селфи, представленный на выставке CES*. Nixie* можно носить на запястье, как наручные часы; если же его снять и подбросить в воздух, он взлетит, сделает снимок и снова прилетит к вам. Кристоф Косталь (Christoph Kohstall) и Елена Йованович (Jelena Jovanovic) разработали это устройство в рамках конкурса Intel® Make it Wearable. Прототип Nixie* был создан на основе платы Intel® Edison. Сейчас Nixie* находится в процессе разработки для конечных потребителей.

Для использования платы Intel® Edison нужна одна или несколько плат расширения, и в этом отношении доступен весьма широкий выбор. SparkFun* предлагает серию модульных однофункциональных плат, так называемых блоков, которые можно подключить к плате Intel® Edison для создания компактной и надежной системы, отвечающей потребностям вашего проекта. Например, можно добавить аккумулятор, консольное подключение, дополнительные порты GPIO и другие возможности без увеличения размера устройства. Благодаря мощным процессорам и разнообразным возможностям подключения платы Intel® Galileo и Intel® Edison могут оказаться наиболее подходящими компонентами для вашего проекта. Выбор за вами.

Intel® Developer Zone для Интернета вещей

Приступайте к работе уже сегодня с помощью программы Intel® IoT Developer Program, в рамках которой предлагаются знания, инструменты и опыт для превращения необычных идей в решения Интернета вещей.

Создайте прототип вашего решения с помощью пакета Intel® IoT Developer Kitдля платформ Intel® Edison и Intel® Galileo. Благодаря удобному оборудованию, программному обеспечению, инструментам и облачным службам этот пакет помогает работать эффективнее и быстрее.

Для получения дополнительных ресурсов и информации о том, как новый пакет Intel® IoT Developer Kit v1.0 поможет в работе над проектами Интернета вещей:

Отправка двух APK-файлов Android* Crosswalk* в магазин Google Play Маркет*. Руководство

$
0
0

На этой странице описывается процесс отправки двух двоичных APK-файлов в магазин Google Play* после использования вкладки Buildв Intel® XDK для сборки Crosswalk* Android*.

Отправляйте оба APK-файла в магазин приложений Android*, чтобы ваше приложение Crosswalk можно было устанавливать и запускать на как можно большем количестве устройств. Инструкции приведены ниже.

Перед началом

При выполнении сборки Crosswalk Android Embeddedсистема сборки Intel XDK создает два двоичных АРК-файла:

  • один для устройств с архитектурой ЦП ARM*;
  • один для устройств с архитектурой ЦП x86.

Для упрощения загрузки этих файлов система сборки упаковывает оба файла в один ZIP-файл. Загрузив ZIP-файл, распакуйте его перед дальнейшими действиями.


Имена двух APK-файлов будут иметь следующий формат:

  • Имя_приложения.android.crosswalk.x86.штамп_времени.apk, например ExampleApp.android.crosswalk.x86.20140418132640.apk.
  • Имя_приложения.android.crosswalk.arm.штамп_времени.apk, например ExampleApp.android.crosswalk.x86.20140418132745.apk.

Это руководство поможет опубликовать эти два APK-файла с наибольшей простотой. Дополнительные сведения об этой возможности магазина Google Play см. в разделе http://developer.android.com/google/play/publishing/multiple-apks.html.

Войдите в учетную запись Google Play и добавьте новое приложение

На компьютере разработки войдите в консоль разработчика Google Play по адресу https://play.google.com/apps/publish

 

1нажмите кнопку Add new application.

 

Назовите приложение и отправьте его

2введите имя приложения.
3введите имя приложения.

Отправьте первый APK

4щелкните Upload your first APK to production.

Выберите АРК-файл x86

5щелкните Browse filesи перетащите или выберите АРК-файл x86, например Имя_приложения.android.crosswalk.x86.штамп_времени.apk.

Переключитесь в расширенный режим

6— нажмите кнопку Switch to advanced mode. (Надпись на этой кнопке изменится на Switch to simple mode.)

Отправьте новый APK-файл

7— щелкните Upload your new APK to Production.

Выберите АРК-файл ARM

8— щелкните Browse filesи перетащите или выберите АРК-файл ARM, например Имя_приложения.android.crosswalk.arm.штамп_времени.apk.

Сохраните черновик

9— щелкните Save draft.

Убедитесь, что оба АРК-файла появились в списке

10— если все предыдущие действия правильно выполнены, в списке появятся обе версии вашего приложения (как показано выше).

Завершите отправку приложения

Теперь можно завершить отправку и публикацию приложения.

Ресурсы

Образцы кода Intel для Интернета вещей: регистратор опасного сближения на дороге

$
0
0

Введение

Этот автомобильный регистратор опасных сближений на дороге входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • сохранять данные об опасных сближениях с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать автомобильный регистратор опасных сближений на дороге, обладающий следующими возможностями:

  • Отслеживание данных, поступающих с инфракрасного датчика-дальномера Grove*.
  • Отслеживание координат, поступающих с GPS-приемника Grove*.
  • Отслеживание опасных сближений c помощью облачного хранилища данных.

Как это работает

Этот регистратор опасных сближений на дороге отслеживает расстояние до ближайшего препятствия с той стороны, в которую направлен инфракрасный датчик-дальномер Grove*.

Также отслеживаются географические координаты платы Intel® Edison с помощью GPS. Обновленные данные опрашиваются с высокой частотой для повышения точности.

В случае опасного сближения с каким-либо объектом (т. е. при срабатывании инфракрасного датчика-дальномера Grove*) плата Intel® Edison при соответствующей настройке передает данные в хранилище IoT Examples, работающее под управлением вашей учетной записи Microsoft* Azure*.

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

Комплект Grove* Transportation & Safety Kit.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Инфракрасный датчик-дальномер Grove*
  3. GPS-приемник Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плат:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к инфракрасному датчику-дальномеру Grove*, а другой — к порту D2 на плате Grove* Shield.

  2. Подключите один конец кабеля Grove* к GPS-приемнику Grove*, а другой — к порту UART на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/close-call","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: браслет для поиска устройств BLE

$
0
0

Введение

Этот браслет для поиска устройств с интерфейсом Bluetooth* Low Energy (BLE) входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • сохранять данные об обнаруженных устройствах BLE с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать браслет для поиска устройств BLE, обладающий следующими возможностями:

  • Поиск устройств BLE, обнаруживаемых в пределах дальности действия.
  • Отображение информации о найденных устройствах на OLED-экране.
  • Отслеживание найденных устройств с помощью облачного хранилища данных.

Как это работает

Этот браслет для поиска устройств BLE использует плату расширения Xadow* для Intel® Edison и OLED-экран, входящий в комплект Xadow*.

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

Кроме того, все данные можно сохранять с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Xadow* Starter Kit.

  1. Плата Intel® Edison с платой расширения Xadow*
  2. Экран Xadow* (с подсветкой на основе органических светодиодов — OLED)

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Настройка Intel® Edison для разработки BLE

Чтобы настроить плату Intel® Edison для BLE, выполните следующую команду:

rfkill unblock bluetooth

Подключение датчиков Xadow*

Для подключения всех устройств Xadow* нужно подключить плату расширения Xadow* к плате Intel® Edison.

Подключите конец кабеля Xadow* к OLED-экрану Xadow*, а другой конец — к одному из боковых разъемов на плате расширения Xadow*.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/access-control","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: дверной звонок

$
0
0

Введение

Этот дверной звонок входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • сохранять данные дверного звонка с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать дверной звонок, обладающий следующими возможностями:

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

Как это работает

Этот дверной звонок издает звуковой сигнал при нажатии датчика касаний Grove*. Кроме того, на ЖК-экран выводится сообщение.

Помимо этого, данные дверного звонка можно сохранять с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Grove* Starter Kit Plus.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Датчик касаний Grove*
  3. Пищалка Grove*
  4. Цветной ЖК-экран Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к датчику касаний Grove*, а другой — к порту D4 на плате Grove* Shield.

  2. Подключите один конец кабеля Grove* к пищалке Grove*, а другой — к порту D5 на плате Grove* Shield.

  3. Подключите один конец кабеля Grove* к цветному ЖК-экрану Grove*, а другой — к любому порту I2C на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/counter/doorbell/inc","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.


Образцы кода Intel для Интернета вещей: датчик землетрясений

$
0
0

Введение

Этот датчик землетрясений входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • вызывать службы API Геологической службы США* (USGS*) для доступа к данным о землетрясениях.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать датчик землетрясений, обладающий следующими возможностями:

  • Определение движения с помощью цифрового акселерометра.
  • Проверка данных о землетрясениях с помощью API Геологической службы США.
  • Отображение информации о землетрясении на ЖК-экране.

Как это работает

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

Если датчик получает данные, соответствующие возможному землетрясению, он использует API Геологической службы США, чтобы проверить, действительно ли произошло землетрясение.

При положительном результате датчик выводит предупреждение на ЖК-экран.

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

Комплект Grove* Starter Kit Plus.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Трехосевой цифровой акселерометр Grove*
  3. Цветной ЖК-экран Grove*

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

  1. Intel® XDK IoT Edition

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к трехосевому цифровому акселерометру Grove*, а другой — к любому порту I2C на плате Grove* Shield.

  2. Подключите один конец кабеля Grove* к цветному ЖК-экрану Grove*, а другой — к любому порту I2C на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка примера программы

Чтобы настроить этот пример для определения землетрясений в том месте, где вы находитесь, измените параметр LATITUDEв файле config.jsonследующим образом:

{"LATITUDE": "47.641944","LONGITUDE": "-122.127222"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: регистратор работы оборудования

$
0
0

Введение

Этот регистратор работы оборудования входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • сохранять данные о работе оборудования с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать регистратор работы оборудования в производственных помещениях, обладающий следующими возможностями:

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

Как это работает

Этот регистратор работы оборудования отслеживает звуки и вибрацию.

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

Если оборудование больше не используется, экран очищается.

Кроме того, данные о начале и окончании использования оборудования можно сохранять с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Grove* Starter Kit Plus.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Звуковой датчик Grove*
  3. Пьезодатчик вибрации Grove*
  4. Цветной ЖК-экран Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к звуковому датчику Grove*, а другой — к порту A0 на плате Grove* Shield.

  2. Подключите один конец кабеля Grove* к пьезодатчику вибрации Grove*, а другой — к порту A2 на плате Grove* Shield.

  3. Подключите один конец кабеля Grove* к цветному ЖК-экрану Grove*, а другой — к любому порту I2C на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/equipment-activity","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: носимый регистратор данных

$
0
0

Введение

Этот носимый регистратор данных входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • настраивать сервер веб-приложений для просмотра данных с помощью веб-страницы, загружаемой непосредственно платой Intel® Edison.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать носимый регистратор данных, обладающий следующими возможностями:

  • Непрерывное отслеживание данных, принимаемых от цифрового барометра.
  • Отображение последних показаний на OLED-экране при касании сенсорного датчика.
  • Загрузка записанных данных в формате JSON непосредственно с Intel® Edison.

Как это работает

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

В нем также предусмотрен способ отображения последних полученных данных с помощью датчика касаний QTouch* и OLED-экрана.

Эти показания можно просмотреть или загрузить в формате JSON непосредственно с веб-сервера, запущенного на плате Intel® Edison.

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

Комплект Xadow* Starter Kit.

  1. Плата Intel® Edison с платой расширения Xadow*
  2. Экран Xadow* (с подсветкой на основе органических светодиодов — OLED)
  3. Датчик касаний Xadow* QTouch
  4. Датчик атмосферного давления Xadow*

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

  1. Intel® XDK IoT Edition

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Xadow*

Для подключения всех устройств Xadow* нужно подключить плату расширения Xadow* к плате Intel® Edison.

  1. Подключите конец кабеля Xadow* к OLED-экрану Xadow*, а другой конец — к одному из боковых разъемов на плате расширения Xadow*.

  2. Подключите конец кабеля Xadow* к датчику атмосферного давления Xadow*, а другой конец — к одному из боковых разъемов на плате расширения Xadow*.

  3. Подключите конец кабеля Xadow* к датчику касаний Xadow QTouch*, а другой конец — к одному любому из двух других подключенных устройств.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Доступ к данным из браузера

Полученные данные можно загрузить в формате JSON непосредственно с веб-страницы, работающей на веб-сервере на плате Intel® Edison.

Порт веб-сервера — 3000, поэтому при подключении платы Intel® Edison к Wi-Fi* с IP-адресом 192.168.1.13для подключения к веб-серверу из этой же сети нужно использовать адрес http://192.168.1.13:3000.

Настройка точки доступа

Сведения о настройке Intel® Edison в качестве точки доступа Wi-Fi* см. в соответствующей документации Intel.

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: пожарная сигнализация

$
0
0

Введение

Эта пожарная сигнализация входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • настраивать сервер веб-приложения для размещения данных пожарной сигнализации с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей;
  • вызывать службы API Twilio* для отправки СМС-сообщений.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать пожарную сигнализацию, обладающую следующими возможностями:

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

Как это работает

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

Если температура превышает заданный порог (в данном примере это 28 градусов по Цельсию), то сигнализация срабатывает, включается звуковой сигнал, а на ЖК-экран выводится оповещение.

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

Кроме того, система может записывать события срабатывания сигнализации с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Grove* Starter Kit Plus.

  1. Плата Intel® Edison с коммутационной платой Arduino*
  2. Датчик температуры Grove*
  3. Пищалка Grove*
  4. Цветной ЖК-экран Grove*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*
  3. Учетная запись Twilio*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Grove*

Нужно подключить плату Grove* Shield к коммутационной плате, совместимой с Arduino*, и подключить все устройства Grove* к плате Grove* Shield. Убедитесь, что маленький переключатель VCC на плате Grove* Shield установлен в положение 5V.

  1. Подключите один конец кабеля Grove* к датчику температуры Grove*, а другой — к порту A0 на плате Grove* Shield.

  2. Подключите один конец кабеля Grove* к пищалке Grove*, а другой — к порту D5 на плате Grove* Shield.

  3. Подключите один конец кабеля Grove* к цветному ЖК-экрану Grove*, а другой — к любому порту I2C на плате Grove* Shield.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Ключ API Twilio*

Для отправки СМС-сообщений необходимо зарегистрировать учетную запись и получить ключ API на веб-сайте Twilio*:

https://www.twilio.com

Для отправки СМС-сообщений нужно сначала получить ключ API Twilio*. Этот пример программы будет работать и без ключа, но в этом случае не будет СМС-сообщений.

Передайте ключ API Twilio* и маркер проверки подлинности в пример программы, изменив параметры TWILIO_ACCT_SIDи TWILIO_AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN"
}

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для отправки СМС-сообщений, получите ключ API на веб-сайте Twilio*, как описано выше, и измените параметры TWILIO_ACCT_SIDи TWILIO_AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN"
}

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/fire-alarm","AUTH_TOKEN": "s3cr3t"
}

Чтобы настроить этот пример для использования одновременно и СМС-сообщений, и хранилища данных Microsoft* Azure*, измените параметры TWILIO_ACCT_SID, TWILIO_AUTH_TOKEN, SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN","SERVER": "http://intel-examples.azurewebsites.net/logger/fire-alarm","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Образцы кода Intel для Интернета вещей: домашний датчик падений

$
0
0

Введение

Этот домашний датчик падений входит в серию упражнений с образцами кода Intel для Интернета вещей. Здесь используется Intel® IoT Developer Kit, платформа разработки Intel® Edison, облачные платформы, API и другие технологии.

Выполнив это упражнение, разработчики научатся:

  • подключать платформу разработки Intel® Edison, предназначенную для создания прототипов и носимых компьютерных устройств и решений Интернета вещей;
  • подключаться к интерфейсу ввода-вывода платформы Intel® Edison и хранилищу датчиков с помощью MRAA и UPM из пакета Intel® IoT Developer Kit, представляющего собой полный набор аппаратных и программных компонентов, помогающих разработчикам изучать возможности Интернета вещей и создавать современные проекты;
  • запускать этот образец кода в интегрированной среде разработки Intel® XDK IoT Edition, предназначенной для создания приложений, взаимодействующих с датчиками и приводами, и помогающей быстро приступить к разработке программного обеспечения для платы Intel® Edison и Intel® Galileo;
  • настраивать сервер веб-приложения для размещения данных о падениях с помощью Azure Redis Cache* в Microsoft* Azure*, настраивать облачные решения Интернета вещей, включая решения для анализа данных, машинного обучения и различных рабочих инструментов, чтобы упростить процесс подключения датчиков к облаку и помочь быстрее запустить проект Интернета вещей;
  • вызывать службы API Twilio* для отправки СМС-сообщений.

Что это такое

В этом проекте, используя плату Intel® Edison, можно создать домашний носимый датчик падений в виде браслета, обладающий следующими возможностями:

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

Как это работает

Браслет, представляющий собой носимый домашний датчик падений, определяет возможные падения с помощью акселерометра. При обнаружении возможного падения он отправляет СМС-сообщение через Twilio* и выводит на экран сообщение о том, что опекун уже уведомлен о происшествии и скоро будет оказана помощь.

Кроме того, все данные можно сохранять с помощью хранилища IoT Examples и учетной записи Microsoft* Azure*.

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

Комплект Xadow* Starter Kit.

  1. Плата Intel® Edison с платой расширения Xadow*
  2. Экран Xadow* (с подсветкой на основе органических светодиодов — OLED)
  3. Трехосевой акселерометр Xadow*

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

  1. Intel® XDK IoT Edition
  2. Учетная запись Microsoft* Azure*
  3. Учетная запись Twilio*

Инструкции по настройке

Чтобы приступить к работе, скопируйте хранилище How-To Intel IoT Code Samplesс помощью Git* на компьютер следующим образом:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Нужно загрузить ZIP-файл? В веб-браузере перейдите по адресу https://github.com/intel-iot-devkit/how-to-code-samplesи нажмите кнопку Download ZIPв правой нижней части экрана. После загрузки ZIP-файла распакуйте его и используйте файлы в папке этого примера.

Добавление программы в Intel® XDK IoT Edition

В Intel® XDK IoT Edition выберите Import Your Node.js Project.

Затем перейдите в папку примера проекта и выберите его.

Нужно подключить плату Intel® Edison к компьютеру, чтобы отправлять на нее код.

Щелкните меню IoT Deviceв левой нижней части экрана. Если плата Intel® Edison автоматически распознана, выберите ее.

В противном случае выберите Add Manual Connection. В поле Addressвведите 192.168.2.15. В поле Portвведите 58888. Щелкните Connect, чтобы сохранить подключение.

Установка программы вручную на плату Intel® Edison

Можно установить код на плату Intel® Edison вручную.

Скопируйте хранилище How-To Intel IoT Code Samplesна плату Intel® Edison после установки SSH-подключения к этой плате:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

Затем перейдите в папку с примером.

Чтобы установить Git* на плату Intel® Edison, если это еще не сделано, установите SSH-подключение к плате и выполните следующую команду:

$ opkg install git

Подключение датчиков Xadow*

Для подключения всех устройств Xadow* нужно подключить плату расширения Xadow* к плате Intel® Edison.

  1. Подключите конец кабеля Xadow* к OLED-экрану Xadow*, а другой конец — к одному из боковых разъемов на плате расширения Xadow*.

  2. Подключите конец кабеля Xadow* к трехосевому акселерометру Xadow*, а другой конец — к одному из боковых разъемов на плате расширения Xadow*.

Ручная настройка платы Intel® Edison

При запуске этого кода на плате Intel® Edison вручную необходимо установить зависимые компоненты.

Для получения модулей Node.js*, необходимых для запуска этого примера программы на плате Intel® Edison, выполните следующую команду:

npm install

Ключ API Twilio*

Для отправки СМС-сообщений необходимо зарегистрировать учетную запись и получить ключ API на веб-сайте Twilio*:

https://www.twilio.com

Для отправки СМС-сообщений нужно сначала получить ключ API Twilio*. Этот пример программы будет работать и без ключа, но в этом случае не будет СМС-сообщений.

Передайте ключ API Twilio* и маркер проверки подлинности в пример программы, изменив параметры TWILIO_ACCT_SIDи TWILIO_AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN"
}

Настройка сервера Microsoft* Azure*

При желании можно хранить данные, созданные этим образцом программы, во внутренней базе данных, развернутой с помощью Microsoft* Azure*, Node.js* и хранилища данных Redis*.

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

https://github.com/intel-iot-devkit/intel-iot-examples-datastore

Настройка примера программы

Чтобы настроить этот пример для отправки СМС-сообщений, получите ключ API на веб-сайте Twilio*, как описано выше, и измените параметры TWILIO_ACCT_SIDи TWILIO_AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN"
}

Чтобы настроить этот пример для использования хранилища данных Microsoft* Azure*, измените параметры SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"SERVER": "http://intel-examples.azurewebsites.net/logger/fall-detector","AUTH_TOKEN": "s3cr3t"
}

Чтобы настроить этот пример для использования одновременно и СМС-сообщений, и хранилища данных Microsoft* Azure*, измените параметры TWILIO_ACCT_SID, TWILIO_AUTH_TOKEN, SERVERи AUTH_TOKENв файле config.jsonследующим образом:

{"TWILIO_ACCT_SID": "YOURAPIKEY","TWILIO_AUTH_TOKEN": "YOURTOKEN","SERVER": "http://intel-examples.azurewebsites.net/logger/fall-detector","AUTH_TOKEN": "s3cr3t"
}

Запуск программы с помощью Intel® XDK IoT Edition

Перед запуском сохраните все файлы.

Щелкните значок Upload, чтобы отправить файлы на плату Intel® Edison.

Щелкните значок Runв нижней части окна Intel® XDK IoT Edition. В этом случае код будет запущен на плате Intel® Edison.

Если вы внесли изменения в код, щелкните Upload and Run. В этом случае на плате Intel® Edison будет запущена последняя версия кода со всеми изменениями.

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

Запуск программы вручную

Чтобы запустить пример программы на плате Intel® Edison вручную, установите SSH-подключение к этой плате и выполните следующую команду:

node index.js

Определение IP-адреса платы Intel® Edison

Определить IP-адрес подключенной платы Intel® Edison можно с помощью следующей команды:

ip addr show | grep wlan

На экране появится приблизительно следующий текст:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 inet 192.168.1.13/24 brd 192.168.1.255 scope global wlan0

IP-адрес показан после слова inet. В приведенном выше примере используется IP-адрес 192.168.1.13.

Полный список образцов кода Intel для Интернета вещей см. на сайте Intel® Developer Zone.

Дополнительные сведения об этом образце кода см. в GitHub*.

Дополнительные сведения об оптимизации компиляторов см. в уведомлении об оптимизации.

Viewing all 357 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>