简介
智能设备现在能够连接到我们以前一直认为不可能的事物。 而物联网 (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 开发板
- Seeed Grove* Starter Kit Plus - 英特尔® XDK 物联网版(网址http://www.seeedstudio.com/depot/Grove-starter-kit-plus-Intel-IoT-Edition-for-Intel-Galileo-Gen-2-and-Edison-p-1978.html)
- 第四代智能英特尔® 酷睿™ 处理器(或更高版),具有 8 GB 可用磁盘空间和 USB 3.0 端口支持。
- 英特尔® 实感™ 摄像头 (F200) (系统集成或外设版本)
- 安装了 node.js 的 Linux* 服务器(参见 https://nodejs.org)
采用 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 视图效果和沉浸式体验。
您可在此处购买完整开发人员套件,其中包括此摄像头。
GNU/Linux* 服务器
A GNU/Linux* 服务器易于开发。 您可使用旧计算机或笔记本电脑,或者您可以将此服务器放到云上。 我使用了采用 Ubuntu* 服务器的云服务器。 如果您有支持此服务器的不同 Linux* 版本,只需调整为您最喜欢的命令即可。
软件
在我们开始开发此项目之前,确保您已在系统上安装了以下软件。 您可使用此链接来下载该软件。
- 英特尔® XDK 物联网版
- 英特尔® 实感™ SDK(R4 或最新版本)
设置英特尔® 实感™ 摄像头
要设置英特尔® 实感™ 摄像头,连接英特尔® 实感™ 摄像头 (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.io
和 edisonconnect.js
文件
<!DOCTYPE html><html><head><title> Intel® RealSense™ 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.js
和 index.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 开发板入门
- Seeed Grove – Starter Kit Plus - 英特尔® XDK 物联网版:http://www.seeedstudio.com/depot/Grove-starter-kit-plus-Intel-IoT-Edition-for-Intel-Galileo-Gen-2-and-Edison-p-1978.html
- 采用 Arduino 扩展开发板装配英特尔® Edison 开发板
- 运行集成安装程序
- 设置串行终端连接
- 将英特尔® Edison 开发板连接到 Wi-Fi
- 安装和配置英特尔® XDK 物联网版
现在是时候将代码放到英特尔® 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 和所有稀奇古怪的东西。