【本文正在参与"2021爱智先行者-征文大赛"活动】
最近跟了多期 《2021爱智先行者》直播课,了解了一些关于edgros的知识,自己也关注了爱智官方以及公众号,发现了spirit1的强大之处,正好借着这次征文大赛,向大家分享关于爱智的体验。
关于 spirit1 开箱的文章已经有很多,这里不再赘述。我们直接聚焦到EdgerOS上。
首先,EdgerOS是什么?
EdgerOS是翼辉信息推出的智能边缘计算操作系统,它基于自主研发的SylixOS 内核,完全自主研发,spirit1 就是搭载的 EdgerOS 智能操作系统。
官方也给了比较详细的介绍说明:EdgerOS 简介
作为一个互联联网开发者,一直从事的是web前后端开发,个人对于物联网app开发还是比较陌生,如果说让我直接去开发一个物联网app,我可能会一头雾水,但了解了EdgerOS后,这一切就变得简单起来了。
EdgerOS系统集成了javascript运行时JSRE, JSRE (类比nodejs,JSRE是运行在EdgerOS上的js运行时)提供了大量功能强大的 API,包含:
这就对我们web开发者非常友好,接触过前端的开发者一定对js比较熟悉,熟悉js,我们就可以开发运行在EdgerOS上的应用了。
关于JSRE,官方有文档做了详细介绍:Overview , 感兴趣的话可以详细阅读,你会感叹api的丰富性,并且会发现很多新鲜好玩的东西。
因为我从小就是个科幻迷,总是想象着生活在一个充满智能的世界里,像很多科幻电影里面,动一动手指,或者随便讲几句话,就可以操控各种智能设备有序工作,解放人力(像钢铁侠里,托尼斯塔克动动手势就可以指挥机械自动穿戴铠甲可太酷了)。所以我对JSRE提供的ai接口比较感兴趣。阅读了ai相关接口后,再结合之前看过的《2021爱智先行者》直播课 以及爱智官方的一些 demo, 我有一个小想法,就是通过监控手势,来实现一个智能灯的开关。
准备的设备:
功能介绍:
话不多说直接放代码吧:https://github.com/ScottMuZhao/smart-light-ai
核心代码:
连接智能灯的代码,为了简化代码,这里默认只有一个智能设备。
let light = undefined;
let lightId = '';
// 发现设备,并把发现的设备赋值light
Device.list(true, function (error, list) {
if (list && list.length === 1) {
let dev = list[0];
Device.info(dev.devid, function (error, info) {
if (info &&
info.report.name === 'light') {
light = new Device();
light.request(dev.devid, function (error) {
if (error) {
console.error('light request error: ');
light = undefined;
} else {
lightId = dev.devid;
light.send({ query: true, attrs: ['channel0'] }, function (error) {
if (error) {
console.error('Query light error:', error.message);
} else {
console.log('Query light Ok!');
}
}, 3);
}
});
}
});
}
});
// 监听设备丢失事件
Device.on('lost', function (devid) {
if (lightId && lightId === devid) {
lightId = '';
if (light) {
lightRemove();
}
}
});
// 监听设备加入事件,
Device.on('join', function (devid, info) {
if (info.report.name === 'light' && info.report.model === 'port' && lightId === '') {
light = new Device();
light.request(devid, function (error) {
if (error) {
console.error('light request error: ');
light = undefined;
} else {
lightId = devid;
light.send({ query: true, attrs: ['channel0'] }, function (error) {
if (error) {
console.error('Query light error:', error.message);
} else {
console.log('Query light Ok!');
}
}, 3);
}
});
}
});
视频传输的时候会触发onVideo事件,在这里调用智能手势接口,监控手势处理开关灯逻辑
onVideo(frame) {
var buf = new Buffer(frame.arrayBuffer);
const view = DEF_DETEC_VIEW;
// jsre手势监控api, 监控到的手势信息数组
var handInfo = handnn.detect(buf, { width: view.width, height: view.height, pixelFormat: HANDNN_PIXEL_FORMAT });
var ret = []; /* Empty array - clear. */
for (var i = 0; i < handInfo.length; i++) {
var info = handInfo[i];
if (info.prob > 0.9) {
// jsre手势监控api, 手势详情,包含手指伸缩情况
var hand = handnn.identify(buf, {width: view.width, height: view.height, pixelFormat: HANDNN_PIXEL_FORMAT}, info);
if (hand) {
var fingers = hand.fingers;
var num = 0;
for (var j = 0; j < fingers.length; j++) {
if (!fingers[j].curl){
num++
}
}
// 如果说手指全部收回,则关灯
if (num === 0) {
console.log('关灯');
if (light) {
var l = new Device()
console.log('发送信号');
// 向智能灯发送关灯信号
light.send({
channel0: false,
}, function (error) {
if (error) {
console.error('Send message to light error:', error.message);
}
}, 3);
} else {
console.log('Light is not connected !')
}
}
// 如果说手指全部展开,则开灯
if (num === 5) {
console.log('开灯');
if (light) {
console.log('发送信号');
// 向智能灯发送开灯信号
light.send({
channel0: true,
}, function (error) {
if (error) {
console.error('Send message to light error:', error.message);
}
}, 3);
} else {
console.log('Light is not connected !')
}
}
}
}
}
}
因为本次主要介绍的JSRE 的ai 模块:handnn,所以摄像头部分直接引用edgeros官方demo: app-demo-camera-ai(app-demo-camera-ai: 带人脸识别功能的流媒体摄像头监控爱智应用。)中的连接摄像头代码,并做部分改动,这个修改是改为通过网线直连的形式获取摄像头(流媒体这块我还不是很熟悉,暂且使用了比较简单的方法,更高级的用法还在探索中。。), 如果想了解这部分代码可直接看项目中代码,或直接到官方demo进行查看
如果你有摄像头和智能灯,代码直接拉下来,开发模式部署到你的spirit1 上,并连接好摄像头和智能灯,就可以直接打开app体验了。如果说你还不知道怎么创建和部署爱智项目,可参考爱智官方文档 或 《2021爱智先行者》直播课。
我录制了一个小视频,来展示初步效果(废话比较多,想直接看效果,可快进到2分钟处):1637130339483765_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1uh411b74C/
以上就是我们手势开关智能灯的全部内容了,虽然说这个功能离科幻小说里面的场景还相差甚远,但是,edgros给了我们自己实现这种场景的机会,只要智能设备足够完善,我们就可以利用spirit1 自行实现各种科幻电影的场景啦,所以,让我们共同期待爱智生态的完善吧,我相信未来的某天,梦想会成为现实。
【本文正在参与"2021爱智先行者-征文大赛"活动】