Node-Red定时拍照保存至文件夹

本章涉及到UI界面显示图片请参考:node-red UI界面图片输出

1.节点介绍

要实现Node-Red定时拍照保存至文件夹,我们需要用到的新控件包含:node-red-node-ui-webcam
下载新控件的步骤如下:

  1. 首先在左上角点击设置,并找到节点管理 ;
  2. 在节点管理中点击安装;
  3. 在安装界面的查询窗口输入控件名称,查询后选择下载,等待下载完成;

2.webcam节点介绍

webcam节点为拍照节点,需要使用到摄像头。此节点将适用于所有现代浏览器,但不适用于 IE。如果您远程访问仪表板,则必须使用 HTTPS,否则浏览器将阻止对网络摄像头的访问。

(1)节点的使用

  1. 在UI界面点击中间相机即可激活相机;
    在这里插入图片描述

  2. 激活相机后,点击右下角相机可进行抓拍;
    在这里插入图片描述

  3. 在右下角的小箭头中,可对相机进行选择,针对下图所示Turn off camera表示关闭相机;MTD Camera为电脑自带的相机;HD 720P Webcam为外接相机。
    在这里插入图片描述

(2)输入函数

  1. payload:图像的缓冲区,如果设置为null或false,则显示的图像将被清除。
  2. capture:这将触发网络摄像头捕捉图像,但触发前需激活摄像头。
  3. camera:可用摄像机的索引,切换摄像机。

这里主要介绍capture变量的使用,在inject节点中设定msg.capture为非0 数据,在UI界面激活摄像头,点击注入则会在右侧debug窗口看到有数据输出
在这里插入图片描述

(3)输出函数

输出内容只有payload,在payload中是格式为buffer的图片,若想将图片显示到UI界面还需要将格式转化为base64。

3. 定时拍照保存至文件夹

案例功能:UI界面摄像头每5秒钟拍照一次,并拍照次数.png命名保存至文件夹中。

  1. 使用inject节点作为循环5次定时拍照的触点,并设定msg.capture为非0数字;
  2. 在function节点中设定文件保存路径及文件名并保存至函数msg.filename,注意文件名需使用context函数进行静态处理;
  3. write file节点的输入函数中可使用传参的形式设定文件保存路径及文件名称,函数为msg.filename,行为选择复写文件,且在function中定义的目录真是存在。

代码界面展示:
在这里插入图片描述
保存及命名function函数中代码编写如下(在function中传递filename保存路径时,需要对 \ 进行转义处理)

//保存及命名
var filenamenum = context.get('filenamenum')||0;
msg = {filename:'D:\\Picture\\'+filenamenum+'.png',
    payload:msg.payload,
}
filenamenum ++;
context.set('filenamenum',filenamenum)
return msg;

代码展示:

[{"id":"b1ce81893d6b5b49","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"b6d0e10b59fd75dd","type":"ui_webcam","z":"b1ce81893d6b5b49","name":"","group":"5705b53f.d3e0bc","order":20,"width":0,"height":5,"countdown":false,"autoStart":false,"hideCaptureButton":false,"showImage":"2","mirror":true,"format":"png","x":260,"y":120,"wires":[["8a8a4d12c733ca88"]]},{"id":"f5c4f157e52c0a50","type":"file","z":"b1ce81893d6b5b49","name":"","filename":"filename","filenameType":"msg","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":580,"y":120,"wires":[[]]},{"id":"8a8a4d12c733ca88","type":"function","z":"b1ce81893d6b5b49","name":"保存及命名","func":"var filenamenum = context.get('filenamenum')||0;\nmsg = {filename:'D:\\\\Picture\\\\'+filenamenum+'.png',\n    payload:msg.payload,\n}\nfilenamenum ++;\ncontext.set('filenamenum',filenamenum)\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":120,"wires":[["f5c4f157e52c0a50"]]},{"id":"8b25b93de47f62cd","type":"inject","z":"b1ce81893d6b5b49","name":"","props":[{"p":"payload"},{"p":"capture","v":"1","vt":"num"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":120,"wires":[["b6d0e10b59fd75dd"]]},{"id":"5705b53f.d3e0bc","type":"ui_group","name":"Linear Gauges","tab":"64fe41f2.fdbe3","order":1,"disp":true,"width":"5","collapse":false,"className":""},{"id":"64fe41f2.fdbe3","type":"ui_tab","name":"Home","icon":"dashboard"}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值