node.js调用大疆sdk生成的exe,输出raw文件并通过向raw文件传入图片坐标点,返回当前温度


前言

目标: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提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值