前言
目标:node实现调用大疆sdk,传入坐标点返回红外图片当前坐标的温度
一、需要的环境和插件
node中的path,request,fs,child_process模块,python环境
二、调用方法
1.通过python生成exe文件
2.下载红外图片
代码如下:
1.获取图片并将图片存在本地
// 本地图片存储路径
let dll_path = path.join(__static, "/image");
// 修正开发环境的路径
dll_path = dll_path.replace("\\public\\", "\\");
// 本地exe路径
let dll_exe = path.join(__static, "/dll/dji_irp.exe");
dll_exe = dll_exe.replace("\\public\\", "\\");
// 获取图片路径(方便为raw和本地图片命名)
let last = this.imgUrl.split("/")[this.imgUrl.split("/").length - 1];
last = last.replace(".", "_");
// 本地图片命名
let fileName = last + ".png";
// 获取图片并存在本地
let stream = fs.createWriteStream(path.join(dll_path, fileName));
let that = this;
request(imgUrl)
.pipe(stream)
.on("close", function (res) {
console.log("文件" + fileName + "下载完毕");
// 调用useExeData方法生成raw文件
that.useExeData(dll_exe, dll_path + "\\" + fileName);
});
2.通过exe生成raw并传入坐标生成当前坐标点温度
useExeData(data, from) {
// raw存储路径
let dll_daw = path.join(__static, "/daw");
// 修正开发环境的路径
dll_daw = dll_daw.replace("\\public\\", "\\");
// 获取图片路径(方便为raw命名)
let last = this.imgUrl.split("/")[this.imgUrl.split("/").length - 1];
last = last.replace(".", "_");
// 生成raw 命令例如:./fast.exe -s ./2.png -a measure -o ./fast.raw (measure为温度方法,参考大疆文档)
let param =
data +
" -s " +
from +
" -a measure -o " +
dll_daw +
"\\" +
last +
".raw";
// return
process.exec(param, (error, stdout, stderr) => {
if (!error) {
// 生成成功
// 读取raw文件中的数据
fs.readFile(
dll_daw + "\\" + last + ".raw",
(err, data) => {
if (err) {
console.error(err);
return;
} else {
// 返回的数据为原始buffer格式需要转为unit16使用
const uint8Array = new Uint8Array(data);
const buffer = Buffer.from(uint8Array.buffer);
const uint16Array = new Uint16Array(
buffer.buffer,
buffer.byteOffset,
buffer.length / Uint16Array.BYTES_PER_ELEMENT
);
console.log(uint16Array);
// 单个坐标点调用 x,y为坐标点 h为图片高度
uint16Array([x + y * h])
// 矩形调用 x,y为坐标点 w:宽度 h:高度
let arr = [];
for (let i = x; i < x + w; i++) {
for (let j = y; j < y + h; j++) {
arr.push(uint16Array(x + y * h));
}
}
console.log(arr) // arr包含矩形内所有值
// 最大值最小值
console.log(Math.min.apply(null, arr));
console.log(Math.max.apply(null, arr));
}
}
);
// console.log('success',stdout, stderr);
} else {
// 失败
console.log("error", error);
}
});
},
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。