Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 154

采用 JavaScript* 混合使用英特尔® 实感™ 摄像头与英特尔® Edison 开发板

$
0
0

简介

智能设备现在能够连接到我们以前一直认为不可能的事物。 而物联网 (IoT) 正使这一切变得可能,它使这些设备能够收集和交换数据。

英特尔创建了英特尔® 实感™ 技术,其中包括英特尔® 实感™ 摄像头英特尔® 实感™ SDK。 利用这一技术,您可以创建应用程序,检测手势和头部动作,分析面部数据,执行背景分割,读取深度级别,识别和合成语音等等。 想像您正在开发一款能够检测许多事物的超级传感器。 结合英特尔® Edison 套件的多种用法及输出,您可以构建实用性与娱乐性兼备的创意项目。

英特尔® 实感™ SDK 可支持流行的编程语言和框架,例如 C++、C#、Java*、JavaScript*、Processing 和 Unity*。 这意味着开发人员可使用他们熟悉的编程环境,快速上手。

Peter Ma 的文章结合使用英特尔® 实感™ 3D 摄像头与英特尔® Edison 开发平台提供了两个采用 C# 的应用程序示例。 第一个示例使用英特尔® 实感™ 摄像头作为输入,使用英特尔® Edison 开发板作为输出。 结果是,如果您将手指挡在英特尔® 实感™ 摄像头前,它会向英特尔® Edison 开发板发出开灯信号。

在第二个示例中,Ma 调换了流程顺序,使用英特尔® Edison 开发板作为输入,将英特尔® 实感™ 摄像头作为输出。 英特尔® Edison 开发板会提供来自传感器的数据进行处理,并在语音合成后通过英特尔® 实感™ 摄像头显示给我们,以提供更加人性化的数据。

Ma 的项目启发了我建立类似的项目,但是使用 JavaScript* 而不是 C#。 我使用英特尔® 实感™ SDK 来读取和发送手势数据到 node.js 服务器,然后该服务器会发送此数据至英特尔英特尔® Edison 开发板,以触发与之相连的蜂鸣器和 LED。

关于此项目

此项目使用 JavaScript* 编写而成。 如果您对仅实施基本手势感兴趣,此算法模块已包含在英特尔® 实感™ SDK 中。 它可满足您的一切所需。

硬件

要求:

采用 Arduino breakout 开发板的英特尔® Edison 开发板

英特尔® Edison 开发板是一种低成本通用计算机平台。 它使用 22 纳米双核英特尔® 凌动™系统芯片,运行速度为 500 MHz。 它支持 40 个 GPIO,并在小巧身材内集成了 1 GB LPDDR3 RAM、4 GB EMMC 存储,以及双频 Wi-Fi 和蓝牙。

该开发板运行 Linux* 内核,兼容 Arduino,因此它可以将 Arduino 实施作为 Linux* 程序运行。

 


图 1. 英特尔® Edison breakout 开发板套件。

Grove Starter Kit Plus - 英特尔® XDK 物联网版

Grove Starter Kit Plus - 英特尔® XDK 物联网版设计用于英特尔® Galileo 开发板第二代,但它通过 breakout 开发板套件,可全面兼容英特尔® Edison 开发板。

该套件包含传感器、制动器和屏蔽件,例如触摸传感器、光传感器和声音传感器,同时还包含液晶显示器,如图 2 所示。 该套件是一款价格经济的物联网项目开发解决方案。

您可在此处购买 Grove Starter Kit Plus:


图 2. Grove* Starter Kit Plus - 英特尔® XDK 物联网版

英特尔® 实感™ 摄像头

英特尔® 实感™ 摄像头构建用于支持游戏交互、娱乐、摄影和内容创作,提供有系统集成或外设两种版本。 该摄像头的最低要求包括:USB 3.0 端口、第四代智能英特尔酷睿处理器,以及 8 GB 硬盘空间。

该摄像头(如图 3 所示)是一枚全 1080p 彩色摄像头,并配有一个深度传感器,可为 PC 呈现 3D 视图效果和沉浸式体验。


图 3. 英特尔® 实感™ 摄像头

您可在此处购买完整开发人员套件,其中包括此摄像头。

GNU/Linux* 服务器

A GNU/Linux* 服务器易于开发。 您可使用旧计算机或笔记本电脑,或者您可以将此服务器放到云上。 我使用了采用 Ubuntu* 服务器的云服务器。 如果您有支持此服务器的不同 Linux* 版本,只需调整为您最喜欢的命令即可。

软件

在我们开始开发此项目之前,确保您已在系统上安装了以下软件。 您可使用此链接来下载该软件。

设置英特尔® 实感™ 摄像头

要设置英特尔® 实感™ 摄像头,连接英特尔® 实感™ 摄像头 (F200) 到 USB 3.0 端口,然后在此摄像头连接到您的电脑后,安装此驱动程序。 导航到英特尔® 实感™ SDK 位置,并在您的浏览器上打开 JavaScript* 示例:

Install_Location\RSSDK\framework\JavaScript\FF_HandsViewer\FF_HandsViewer.html

文件打开后,进行脚本检查,查看您拥有什么平台。 在脚本检查您的平台时,单击 Web 浏览器上的链接,安装英特尔® 实感™ SDK WebApp Runtime

当安装完成后,重启 Web 浏览器,然后重新打开文件。 您可以用手挡在摄像头前,检查安装是否成功。 Web 浏览器上会显示可视化的手势数据。

手势设置

支持手势的第一个关键代码行如下所示:

{"timeStamp":130840014702794340 ,"handId": 4,"state": 0,"frameNumber":1986 ,"name":"spreadfinger"
}

这会发送 "name":"spreadfingers"至服务器,进行处理。

接下来,我们将编写一些 JavaScript* 代码,以通过节点.js 服务器,将手势数据从英特尔® 实感™ 摄像头传送到英特尔® Edison 开发板。

采用 JavaScript*

最后,我们需要进行编程。 建议您首先移动整个文件夹,因为缺省安装不允许重写原文件夹。

复制此位置的 FF_HandsViewer文件夹,并粘贴到其他地方。 该文件夹的位置是:

\install_Location\RSSDK\framework\JavaScript\FF_HandsViewer\

最后,您将能够创建自己的项目文件夹,以管理项目。

接下来,从以下位置复制 realsense.js文件,并粘贴到 FF_HandsViewer文件夹中:

Install_Location\RSSDK\framework\common\JavaScript

要简化操作,可创建一个名为 edisonconnect.js的文件。 该文件将从英特尔® 实感™ 摄像头接收手势数据,并发送至 node.js服务器。 请谨记,您需要更改套接字变量上的 IP 地址,将其导向您的 node.js服务器 IP 地址:

// var socket = io ('change this to IP node.js server');

var socket = io('http://192.168.1.9:1337');

function edisonconnect(data){
  console.log(date.name);
  socket.emit('realsense_signal',data);
}

现在最重要的一步是:命令文件 sample.js创建手势数据,并运行一个线程来拦截该手势数据,然后将它传送给 edisonconnect.js。 您不需要监视 CPU 活动,因为它在编译时不会占用太多帧速率或 RAM。

// retrieve the fired gestures
for (g = 0; g < data.firedGestureData.length; g++){
  $('#gestures_status').text('Gesture: ' + JSON.stringify(data.firedGestureData[g]));

  // add script start - passing gesture data to edisonconnect.js
	edisonconnect(data.firedGestureData[g]);
  // add script end
}

在上述功能运行并要求创建一些手势数据后,以下代码会完成 JavaScript* 程序的主要任务。 之后,您必须更换 realsense.js文件路径。

以下操作很关键:链接 socket.ioedisonconnect.js文件

<!DOCTYPE html><html><head><title> Intel&reg; RealSense&trade; SDK JavaScript* Sample</title><script src=”https://aubahn.s3.amazonaws.com/autobahnjs/latest/autobahn.min.jgz” </script><script src=”https://promisejs.org/polyfills/promise-6.1.0.js” </script><script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js” </script><script src=”https://common/JavaScript/realsense.js” </script><script src=”sample.js” </script><script src=”three.js” </script><!-- add script start --><script src=”https://cdn.socket.io/socket.io-1.3.5.js” </script><script src=”edisonconnect.js” </script><!-- add script end → <link rel=”stylesheet” type=”text/css” href=”style.css”></head><body>

该代码摘自 SDK 示例。 为了使此代码简单易用,已将其减少。 该代码用于向服务器发送手势数据。 结果是,英特尔® 实感™ SDK 成功地理解了手势,并准备好将其发送到服务器。

设置服务器

我们将使用基于 GNU/Linux* 的服务器。 我会使用 Ubuntu* server 作为操作系统,但您可以使用您熟悉的任何 GNU/Linux* 发行版。 我们将跳过安装服务器部分,因为在互联网上很容易找到相关的教程。

通过 SSH 作为根用户登录,来配置服务器。

由于服务器刚刚安装,我们需要更新资料库列表和升级服务器。 为此,我将使用在 Ubuntu 发行版中的常见命令,您可以根据正在使用的 GNU/Linux* 发行版,使用类似的命令。

# apt-get update && apt-get upgrade

一旦资料库更新完成,下一步就是安装 node.js

# apt-get install nodejs

我们还需要安装 npm Package Manager。

# apt-get install npm

最后,从 npm Package Manager 安装 socket.io express

# npm install socket.io express

请不要忘记创建文件 server.jsindex.html

# touch server.js index.html

使用您最喜欢的文本编辑器(如 vim 或 nano #)来编辑 server.js文件。

vim server.js

写下此代码:

var express   = require("express");
var app   	= express();
var port  	= 1337;

app.use(express.static(__dirname + '/'));
var io = require('socket.io').listen(app.listen(port));
console.log("Listening on port " + port);

io.on('connection', function(socket){'use strict';
  console.log('a user connected from ' + socket.request.connection.remoteAddress);

	// Check realsense signal
	socket.on('realsense_signal', function(data){
  	socket.broadcast.emit('realsense_signal',data);
  	console.log('Hand Signal: ' + data.name);
	});
  socket.on('disconnect',function(){
	console.log('user disconnected');
  });
});

var port = 1337; 意味着可用的端口已分配给端口 1337。 console.log("Listening on port " + port); 表示无论是否已收到来自 JavaScript* 的数据。 主代码为 socket.broadcast.emit('realsense_signal',data);,这意味着,数据已收到,并准备好向所有监听端口和客户端进行广播。

我们最后需要做的是运行采用此节点的 server.js文件。 如果 listening at port 1337如以下屏幕快照所示,则您已成功。
# node server.js

root@edison:~# node server.js
Listening on port 1337
events.js:85

设置英特尔® Edison 开发板

英特尔® Edison SDK 易于部署。 请参考以下文档:

现在是时候将代码放到英特尔® Edison 开发板了。 此代码可连接服务器,并监听来自此服务器的任何广播。 它类似用于其他服务器和监听步骤的代码。 如果收到任何手势数据,英特尔® Edison 开发板会触发数字引脚进行开/关。

打开英特尔® XDK 物联网版,并使用 DigitalWrite 模板,从模板创建一个新项目,如以下屏幕快照所示。

package.json中的第 9 行,添加依从关系 socket.io-client。 如果为空,则搜索找到正确的安装。 通过添加依从关系,如果英特尔® Edison 开发板中没有客户端,它将向客户端安装套接字。

"dependencies": {"socket.io-client":"latest" // add this script
}

找到名称为 main.js的文件。 您需要连接到服务器,以确保该服务器已准备好进行监听。 接下来,检查手势数据名称“spreadfingers”是否存在于该文件中,它将触发数字引脚 2 和数字引脚 8 状态至 1 / On,反之亦然。
更改所提及服务器 IP 的地址。 如果您想更改引脚,确保您同时在 mraa.Gpio(selectedpins)上更改。

var mraa  = require("mraa");

var pins2 = new mraa.Gpio(2);
	pins2.dir(mraa.DIR_OUT);

var pins8 = new mraa.Gpio(8);
	pins8.dir(mraa.DIR_OUT);

var socket = require('socket.io-client')('http://192.168.1.9:1337');

socket.on('connect', function(){
  console.log('i am connected');
});

socket.on('realsense_signal', function(data){
  console.log('Hand Signal: ' + data.name);
  if(data.name=='spreadfingers'){
	pins2.write(1);
	pins8.write(1);
  } else {
	pins2.write(0);
	pins8.write(0);
  }
});

socket.on('disconnect', function(){
  console.log('i am not connected');
});

选择安装/构建,在确保英特尔® Edison 开发板连接到您的电脑后,选择运行

现在,确保该服务器正常运行,且英特尔® 实感摄像头和英特尔® Edison 开发板已连接互联网。

总结

利用英特尔® 实感™ 技术,该项目修改了 JavaScript* 框架示例脚本,以发送捕获的手势数据至节点.js 服务器。 但是,该项目只是一个开始,未来还会有更多惊喜。

这很容易进行编码。 该服务器可向进行监听的任意套接字客户端广播手势数据。 随 socket.io-client 安装的英特尔® Edison 开发板正在监听来自服务器的广播。 鉴于此,手势数据名称 spreadfingers将触发数字引脚将状态从 1 更改到 0,反之亦然。

现在有无限的可能。 英特尔实感摄像头重量很轻,易于携带和使用。 英特尔® Edison 是一款功能强大的嵌入式 PC。 如果我们采用 JavaScript* 混合并连接英特尔® Edison 和的英特尔® 实感™ 摄像头,则很容易打包、编码和构建物联网设备。 您可以创建一些出色而实用的设备。

关于作者

Aulia Faqih - 英特尔® 软件创新者

这名英特尔® 实感™ 技术创新者位于印度尼西亚日惹,目前在日惹 UIN Sunan Kalijaga 讲学。 他喜欢玩 Galileo / Edison、Web 和所有稀奇古怪的东西。


Viewing all articles
Browse latest Browse all 154

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>