年轻人不讲武德,上班摸鱼,监控老板行踪!
虽然已融入打工人队伍多年,但学生时代,老师站在后窗外的阴影依然挥之不去。在刷头条,看B站的时候,总是担心着老板来了!
直到有了ESP-EYE 低成本的人脸识别开发板,结合云上IoT物联网服务,轻松搞定老板行踪监控。无论老板从何处来,钉钉摸鱼群总会收到实时提醒。
一、技术方案
首先,众筹一块ESP-EYE本地人脸识别开发板;其次,录入老板人脸信息;然后,把开发板连接云端IoT物联网平台;接着,通过规则引擎把数据流转到函数计算;最后,函数计算中调用钉钉群机器人,完成老板来了告警!
二、ESP-EYE 人脸识别
2.1 烧录人脸识别程序
我们基于 Arduino 编程来降低 ESP-EYE 人脸识别程序开发难度。
首先,我们在 Preferences 中新增 arduino-esp32 配置URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
然后,我们在Boards Manager 中搜索并安装esp32 package(1.0.4)。
安装完成后,我们基于CameraWebServer 示例程序做二次开发。
打开 CameraWebServer 文件, 选择 CAMERA_MODEL_ESP_EYE,设置办公室的ssid和password,用于开发板联网。
修改完成后,我们在Tools 中选择Board 为 AI Thinker ESP32-CAM。
点击左上角的编译和烧录按钮,等待 Arduino 程序完成编译,烧录到开发板上。稍待片刻,我们在控制台上看到如下输出,代表人脸识别程序已经成功启动。
2.2 录入老板人脸图片
在同一局域网内,输入控制台网址,进入ESP32人脸识别程序控制台,启动视频推流,开启人脸识别,点击 Enroll Face 来完成老板们的人脸库录入。
当有老板经过,我们就会在控制台看到如下日志输出: Match Face ID: 0。
三、IoT 物联网平台开发
物模型属性:
我们在esp-eye摄像头产品下,注册一个设备,并获取到设备身份三元组,用于和云端建立连接时的身份认证。
在云产品流转中,我们需要配置一条消息流转的规则引擎,把设备上报的物模型数据,流转到函数计算 pushData2DingTalk 中。
数据处理SQL编写:
转发数据到函数计算的配置:
用于接收 IoT平台 传递过来的消息,并实时推送到钉钉群中的函数计算脚本完整内容如下:
const https = require('https');
const accessToken = '钉钉机器人token';
const boss = ["唐僧","观音菩萨","如来佛祖"];
module.exports.handler = function(event, context, callback) {
//IoT平台 传递过来的 event 数据
var eventJson = JSON.parse(event.toString());
const postData = JSON.stringify({
"msgtype": "markdown",
"markdown": {
"text": "老板["+boss[eventJson.bossId]+"]来了,安心工作!"
},
"at": {
"isAtAll": true
}
});
const options = {
hostname: 'oapi.dingtalk.com',
port: 443,
path: '/robot/send?access_token='+accessToken,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {});
res.on('end', () => {
callback(null, 'success');
});
});
req.on('error', (e) => {
callback(e);
});
req.write(postData);
req.end();
};
四、ESP-EYE开发板 上云
设备身份三元组信息和连接参数:
/* 设备的三元组信息 */
#define PRODUCT_KEY "替换PRODUCT_KEY"
#define DEVICE_NAME "替换DEVICE_NAME"
#define DEVICE_SECRET "替换DEVICE_SECRET"
#define REGION_ID "cn-shanghai"
/* IoT物联网平台Endpoint 域名和端口号 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
//用于身份验证的 MQTT_PASSWD和CLIENT_ID
#define CONTENT_STR_FORMAT "clientIdesp32deviceName" DEVICE_NAME "productKey" PRODUCT_KEY "timestamp%d"
char CLIENT_ID[80] = {'\0'};
char * MQTT_PASSWD;
WiFiClient espClient;
PubSubClient client(espClient);
物模型通信的Topic和Payload模板:
/* topic和payload */
#define PROP_POST_TOPIC "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define BODY_FORMAT "{\"id\":\"1234\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":{\"bossId\":%d}}"
当有老板人脸匹配成功后,及时上报到云端:
char jsonBuf[128];
sprintf(jsonBuf, BODY_FORMAT, face_id);
if (client.connected()) {
boolean d = client.publish(PROP_POST_TOPIC, jsonBuf);
Serial.print("publish:1=成功,0=失败,Code=");
Serial.println(d);
}
最后,我们把完整版程序烧录到ESP-EYE开发板上。
五、部署监控
终于,老板来了!
而且是老板三连,是来发年终奖了吧!
往期推荐
本文分享自微信公众号 - IoT物联网技术(IoT-Tech-Expo)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【LeetCodeAnimation】三道「只出现一次的数」一文轻松搞定!
点击上方“五分钟学算法”,选择“星标”公众号 重磅干货,第一时间送达 今天我们来做几道非常经典的题目,第一道题目我们会用多种方法解答,虽然这是一道简单题目,但是我们学会了这几种解题方法,完全可以轻松应对后面两道中等题目。废话不多说,我们来看题目吧。 为保证严谨性,文章中的所有代码均经过测试,大家可以放心食用 题目来源:leetcode 136只出现一次的数(简单),137只出现一次的数Ⅱ(中等) 260只出现一次的数Ⅲ(中等) 只出现一次的数 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 这个题目非常容易理解,就是让我们找出那个只出现一次的数字,那么下面我们来看一下这几种解题方法吧 HashMap 用 HashMap 的这个方法是很容易实现的,题目要求不是让我们求次数嘛,那我们直接遍历数组将每个数字和其出现的次数存到哈希表里就可以了,然后我们再从哈希表里找出出现一次的那个数返回即可。 题目代码 排序搜索法 这个方法也是特别容易...
- 下一篇
灰度发布浅析
定义 灰度发布就是已一种平滑过渡的方式来发布,通过切换线上新旧版本之间的路由权重,逐步从旧版本切换到新版本;比如要上线新功能,首先只是更新少量的服务节点,通过路由权重,让少部分用户体验新版本,如果没有什么问题,再更新所有服务节点;这样可以在出现问题把影响面降到最低,保证了系统的稳定性。 灰度发布 一个系统往往有接入层比如nginx(Openresty),网关层比如zuul,以及服务层比如各种rpc框架;在这几层都有路由功能,也就是说这几层都可以做灰度;接入层可以使用nginx+lua来实现灰度,网关层zuul可以结合ribbon来实现灰度,rpc框架如dubbo本身提供了路由功能可以直接做灰度处理;下面看看具体如何去实现; 接入层灰度 接入层我们这里使用功能更强大的Openresty,然后使用lua进行路由转发,相关的路由策略可以配置在分布式缓存redis里面,当然也可以持久化到数据库里面; 准备 准备一台Openresty,两台web服务器tomcat(端口分别是8081,8082),以及redis;为了方便模拟在redis里面配置白名单,如果在白名单里面就走8082,不在则走808...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G