[Перевод] Использование камеры Intel RealSense 3D с платой Intel Edison
В статье мы рассмотрим, как сделать совместное использование платы Intel Edison и камеры RealSense 3D. Мы создадим два приложения, одно использует камеру Intel RealSense 3D для анализа жестов и плату Intel Edison для переключения светодиода на плате. Второе приложение использует плату Intel Edison для получения данных с температурного датчики и Intel RealSense для синтезирования голоса, чтобы проговорить информацию о температуре.
Сейчас, в мире приходящим на смену эре мобильных телефонов, мы видим появление умных устройств соединенных с вещами, которые мы не могли и представить. Строится мир, названный «Интернет вещей», или кратко IoT (Internet of Things). Устройства IoT находятся всё ещё в младенческом состоянии, начиная с часов с шагомером и заканчивая автомобилем, который включается с телефона. Интересная особенность IoT-устройств заключается в том, что они могут быть оборудованы разнообразными дешёвыми сенсорами, которые могут считывать температуру, влажность, пульс и так далее. Таких сенсоров не было в вашем телефоне и компьютере, поэтому сейчас эти данные становится такими доступной первый раз за всё время.
А с платформой Intel Edison и процессором Intel Quark можно легко построить прототип устройства, которое собирает информацию с сенсоров, и в итоге создать инновационный продукт.
Другая инновация от Intel это технология Intel RealSense. С помощью камеры RealSense 3D и SDK, приложения могут выполнять распознавание жестов, анализ лиц, отделение фона, распознавание голоса, синтез голоса и многое другое. Это как будто у нас есть некий супер сенсор, который может получать много разных данных. Используя эту технологию вместе с платой Intel Edison, мы можем построить много креативных приложений, которые одновременно и полезные и интересные.
Необходимое оборудование:
- Модуль Intel Edison с Arduino-адаптером
- Набор Seeed Grove* — Starter Kit Plus — Intel IoT Edition
- Компьютер с процессором 4-го поколения (Haswell или старше) Intel Core
- Microsoft Windows 8.1 (64-bit)
- 8 Гб свободно места на диске
- Разъем USB 3.0
- Камера Intel RealSense 3D F200 (встроенная или внешняя)
- (Опционально) мини-компьютер Intel NUC (Next Unit Computing) с процессором Intel Core 4-го поколения
Программное обеспечение:
Что такое Intel RealSense SDK?
Intel RealSense SDK предлагает анализ лица, отслеживание рук и пальцев, распознавание голоса, синтезирование голоса, отслеживание объектов для дополненной реальности, сегментацию фона, дополненную реальность и много другой функциональности за счет сочетания аппаратного обеспечения, программного обеспечения и 3D камеры. Текущая версия SDK поддерживает Microsoft .NET framework, Unity Pro 4.1.0 и выше, Processing 2.2.1 или выше и JDK 1.7.0_11 или выше. В нашем примере мы будем использовать .NET и C#.
Обычное приложение, которое может быть разработано с помощью RealSense, включает общение с эффектом присутствия, игры, естественное взаимодействие, интерактивный сюжет, и технологию Intel Capture and Share, но это всего лишь небольшая часть всех возможностей.
Больше информации по технологии Intel RealSense можно получить на сайте Intel в обзоре технологии.
И скачать бесплатный SDK.
Внимательный взгляд на аппаратную часть
Плата Intel Edison одна из первых в серии дешевых компьютерных платформ общего назначения. Она была разработана для быстрого и простого прототипирования IoT-устройств, предлагая возможность последующей коммерческой разработки.
Плата Intel Edison построена на базе двухядерного чипа Intel Atom SoC, изготовленного по технологии 22 нм и работающего на частоте 500 МГц. Она поддерживает 40 GPIO (входы-выходы общего назначения) и включает 1 Гб LPDDR3 ОЗУ, 4 Гб EMMC флеш-памяти, двухдиапазонный Wi-Fi, Bluetooth и всё это при небольшом размере.
Она работает под управление полного ядра Linux. И если вам надо достичь большей производительности, то вы можете писать на аппаратном уровне Linux.
Версия Linux также содержит реализацию Arduino как обычной Linux программы. Проще говоря, вы можете писать обычные Arduino скетчи и запускать их на плате. И это именно то, что мы собираемся сделать.
Узнать больше по плате Intel Edison можно здесь.
Arduino-адаптер
Arduino-адаптер нужен для двух целей. Во-первых, он позволяет сделать платформу для прототипирования больше в размере, что упрощает доступ к пинам ввода-вывода. Во-вторых, он делает платформу совместимой с Arduino. Это значит, что мы можем использовать совместимые с Arduino шилды на плате Intel Edison. На следующей картинке модуль Intel Edison установлен в Arduino-адаптер.
Набор Grove Starter Kit Plus
Полное название набора «Grove Starter Kit Plus — Intel IoT Edition». Изначально он был разработан для платы Intel Galileo gen 2. К счастью, он полностью совместим и с платой Intel Edison через Arduino-адаптер.
Набор разработан, чтобы упростить работу и прототипирование устройства с сенсорами, актюаторами и шилдами. Он содержит Arduino совместимый шилд со стандартными четырехпроводными разъемами. Эти разъемы подключены к портам ввода-вывода, которые с помощью поставляемых в комплекте проводов можно легко подключить к сенсорам и актюаторам из набора. Это значит, что вы можете создать свой проект без кучи проводочков, подтягивающих резисторов и даже не заботится о полярности подключения.
Вот более подробное описание набора.
У компании Seeed Studios, которая создала набор «Grove Kit» есть много полезной документации. Я рекомендую скачать «Sketchbook Starter». Можете также добавить себе в закладки Wiki-страницу:
Камера Intel RealSense 3D F200
Камера Intel RealSense 3D бывает внешней или встроенной, и обе эти модификации созданы для игрового взаимодействия, развлечения, фотографии и создания контента. 3D камера это сложный сенсор, который фактически является частью IoT (не зря в его названии есть слово Sense). Для своей работы камера требует USB 3.0 и процессор Intel Core 4-го поколения (Haswell) и 8 Гб свободного места на диске.
Камера имеет цветной HD сенсор разрешением 1080p и сенсор глубины, который дает компьютеру 3D зрение и многостороннее восприятие. Вы также можете купить набор разработчика.
Мини ПК — Intel NUC на основе процессора Intel Core 4-го поколения
Миникомпьютер Intel NUC (Next Unit Computing) это опциональное устройство, которое может быть использовано как центральный управляющий блок для камеры RealSense 3D и модуля Intel Edison. Он может выполнять дополнительные функции, такие как получение и хранение данных из облака с их последующим анализом. Конечно, он не является необходимым для разработки, так как обычную камеру (не Intel RealSense 3D) можно подключить непосредственно к плате Intel Edison по USB кабелю. Тем не менее, если вы его используете, то информация, которую вы получаете с камеры, может быть обработана и послана на плату Intel Edison, чтобы воспроизвести сигнал, включить светодиоды, моторы и так далее. Информация, которая получена с сенсоров платой Intel Edison, может быть послана на мини ПК Intel NUC, чтобы, например, включить синтезирование голоса с использованием RealSense SDK.
Так как для работы RealSense камеры необходим USB 3.0, 8 Гб памяти и процессор Intel Core 4-го поколения, то выбор Intel NUC является наиболее простым решением. Дополнительным преимуществом является его пользовательский интерфейс, так как наличие HDMI порта позволяет использовать его как обычный компьютер. Если у вас нет компьютера с нужным программным обеспечением, то Intel NUC может быть доступной возможностью его иметь.
Больше информации о Intel NUC можно найти в его обзоре.
Мы будем работать с двумя примерами:
- Захват жестов с камеры Intel RealSense 3D для управления светодиодами на плате Intel Edison.
- Использование данных полученных с температурного сенсора, подключенного к плате Intel Edison для включения синтеза голоса с использованием Intel RealSense SDK.
Среда разработки Arduino IDE для платформы Intel IoT
Вам надо скачать специальную версию Arduino IDE, чтобы загружать скетчи на вашу плату. Текущая версия 1.6.0 доступна по ссылке.
Драйверы для платы Intel Edison
Еще надо скачать и установить драйверы для платы Intel Edison. Это должна быть последняя ссылка на странице под заголовком «Driver Software» (текущая версия 1.2.1). Для дополнительных инструкций используйте руководство «Getting Started Guide»:
Visual Studio
Visual Studio это замечательная коллекция инструментов и сервисов для разработчика, которые помогают создавать приложения для многих платформ. Минимально для работы Intel RealSense SDK нужен Visual Studio и Windows 8.1. Visual Studio поддерживает C, C++, VB.NET, C#, F#, M, Python*, Ruby, JavaScript* и многие другие языки. Мы будем использовать С#.
Вы можете бесплатно скачать Visual Studio Express Edition или Visual Studio Community. Коммерческая версия Visual Studio может быть получена бесплатно по программе DreamSpark для студентов и BizSpark для стартапов.
Вы можете найти больше информации про Visual Studio по ссылке. А по C# тут.
Intel RealSense SDK
Intel RealSense SDK позволяет разработчикам использовать возможности 3D с ранее описанной функциональностью. Текущая версия 4.0.0.112526 (или Gold R2 release) доступна по ссылке.
Тестирование платы Intel Edison
Перед тем, как приступить к тому, что описано ниже, давайте убедимся, что мы сможем запустить пример скетча Blink. Он находится в скачанном Arduino IDE, в папке examples → 01.Basics → Blink.
Установка Visual Studio и Intel RealSense SDK
Установка Visual Studio должна быть достаточно проста. А вот для установки Intel RealSense SDK потребуется подключенная 3D-камера к USB 3.0. Если у вас всё правильно установилось, то вы увидите примеры в Intel RealSense SDK Sample Browser на вашем рабочем столе, в котором вы сможете посмотреть примеры на C++ и C#. Также доступны примеры с камерой. Мы будем использовать пример «Hand Viewer».
После установки SDK, должен быть загружен «F200 Depth Camera Manager». Он находится здесь. При отсутствии менеджера камеры, примеры программы не будут правильно инициализироваться.
В первом примере мы создадим простое приложение, которое использует жесты рук, чтобы послать сигналы с камеры на плату для управления светодиодами.
Код для платы Intel Edison
Сначала мы создадим конечную часть программы. Мы присоединим набор Grove к Arduino-адаптеру, возьмем светодиод (LED socket kit v1.3) и присоединим его к разъёму D2.
Соедините USB-кабелем плату Intel Edison с компьютером или мини-КП Intel NUC. Используйте диспетчер устройств Windows Device Manager, чтобы найти какой последовательный порт использует плата Intel Edison. На следующей картинке вы можете видеть, что в нашем случае это «COM16». Windows автоматически определит плату и назначит порт, когда мы подключим плату к компьютеру.
В среде разработке Arduino IDE, в меню Tools→Board мы выберем плату «Intel Edison».
А в Tools → Port выберем «COM16».
И, наконец, немного попрограммируем. Так как наша плата используется как устройство вывода, то следующие несколько строк кода будут работать с последовательным портом, где 1 — включает светодиод, а 0 — выключает.
const int ledPin = 2; // the number of the pushbutton pin
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0)
/* read the most recent byte */
{
int tmp = Serial.parseInt();
if(tmp == 0)
{
// turn LED off:
digitalWrite(ledPin, LOW);
}
else if (tmp == 1)
{
// turn LED on:
digitalWrite(ledPin, HIGH);
}
}
}
На этом мы закончили с примером кода для платы Intel Edison.
Код приложения для Intel RealSense
В примерах C# F200, есть приложение «Hand Viewer». Выберете исходный код справа и откройте папку RSSDK/FF_HandsViewer.cs. Скопируйте всю папку на рабочий стол, чтобы можно было вносить изменения в проект.
В качестве специального жеста мы будем использовать растопыренные пальцы (spreadfingers). Если захотите, вы всегда сможете переключиться на другой жест.
В файле MainForm.cs измените и добавьте следующий код. Программа относительно простая, мы просто объявляем последовательный порт и отслеживаем последний жест. Если жест изменился, то мы изменяем флаг для светодиода. В функции UpdateInfo находится пример кода, обновляющего жест пользователя. Мы можем использовать переменную status, чтобы отслеживать, когда появится жест «spreadfingers». Когда это происходит, мы передаем на последовательный порт 1 и включаем светодиод. Когда жест закончится, мы пошлем 0, чтобы выключить светодиод.
using System.IO.Ports;
…
public partial class MainForm : Form
{
private SerialPort _serialPort;
private int _lastGesture;
…
public MainForm(PXCMSession session)
{
…
_serialPort = new SerialPort();
_serialPort.PortName = "COM16"; //Serial port Edison is connected to
_serialPort.BaudRate = 9600;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
}
private void WriteToSerialPort(int value)
{
if (_lastGesture != write)
{
Console.WriteLine(write.ToString());
_serialPort.Write(write.ToString());
}
_lastGesture = write;
}
public void UpdateInfo(string status,Color color)
{
…
if (status.Contains("spreadfingers") || status.Contains("spreadfingers"))
{
WriteToSerialPort(1);
}
else
{
WriteToSerialPort(0);
}
}
private void Start_Click(object sender, EventArgs e)
{
…
_serialPort.Open();
}
private void Stop_Click(object sender, EventArgs e)
{
…
_serialPort.Close();
}
Если всё работает правильно, нажмите кнопку запуска и поместите ладонь перед камерой. Когда пальцы будут раскрыты, светодиод должен загореться.
В этом примере мы используем датчик температуры, присоединённый к плате Intel Edison для ввода данных, и синтез голоса из Intel RealSense, чтобы данные сенсора было легче воспринимать.
Код для платы Intel Edison
Температурный датчик Temperature sensor v1.1 из набора Grove это аналоговый датчик, который мы можем подключить к разъему A0 на плате. Следующий Arduino код считывает температуру в градусах Цельсия. В программе есть задержка на 15 секунд, поэтому у модуля воспроизведения голоса есть время произнести весь необходимый текст. Вы можете изменить длительность этой задержки, если вам надо. Вы можете написать дополнительную логику, чтобы выводить предупреждения, если температура слишком высокая или слишком низкая.
#include
int a;
float temperature;
int B=3975; //B value of the thermistor
float resistance;
void setup()
{
Serial.begin(9600);
}
void loop()
{
a=analogRead(0);
resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor;
temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
Serial.print("Current temperature is ");
Serial.print(temperature);
Serial.println(" celcius");
delay(15000);
}
Приложение Intel RealSense
В блоке «Common Samples» вы увидите пример синтезирования голоса «Speech Synthesis». Скопируйте папку с исходниками, так же как мы сделали в предыдущем примере «Hand Viewer». Интерфейс не поменяется, но теперь наша цель использовать синтезирование голоса, чтобы проговорить данные сенсора. И мы всё еще используем «COM16».
Измените файл MainForm.cs следующим образом.
using System.IO.Ports;
…
public partial class MainForm : Form
{
private SerialPort _serialPort;
private static bool _continue;
protected static string curr_module_name;
protected static uint curr_language;
protected static int curr_volume;
protected static int curr_pitch;
protected static int curr_speech_rate;
Thread readThread = new Thread(Read);
static public void Read()
{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
VoiceSynthesis.Speak(curr_module_name, (int)curr_language, message, curr_volume, curr_pitch, curr_speech_rate);
}
catch (TimeoutException) { }
}
}
public MainForm(PXCMSession session)
{
…
_serialPort = new SerialPort();
_serialPort.PortName = "COM16"; //Serial port Edison is connected to
_serialPort.BaudRate = 9600;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
_continue = true;
readThread.Start();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
_continue = false;
readThread.Join();
_serialPort.Close();
}
…
}
Если всё работает правильно, программа будет проговаривать данные с температурного сенсора каждые 15 секунд. Не бойтесь изменять программу в соответствии с вашими требованиями, например, изменяя интерфейс. Или можете просто скопировать файлы VoiceSynthesis.cs и VoiceOut.cs в свой проект.
Идём дальше
Я надеюсь, что это два примера помогут разработчикам и новичкам расширить их кругозор и получить больше идей для использования этих двух технологий. Один прототип, который я придумал это AntiSnoozer (АнтиДрёма). В нем камера Intel RealSense 3D определяет, когда водитель становится сонными и посылает команду на плату Intel Edison, чтобы воспроизвести дополнительные сигналы, которые разбудят водителя. Возможны тысячи комбинаций использования мощи этих двух технологий. Итак, что вы сделаете?