服务器对视频流进行实时处理再返回前端展示,Nodejs调用Python的AI算法程序

首先是前端做好准备:

// websocket_path: "ws://10.10.226.3:3030/ws",
        state.socket = new WebSocket(state.websocket_path);
        // 监听socket连接
          state.socket.onopen = function() {
            console.log("frist socket连接成功");
          };
          // 监听socket错误信息
          state.socket.onerror = function() {
            console.log("frist socket连接错误");
          };
          state.socket.onmessage = (evt) => {
            // evt.data.split("data:");是后端返回的图像信息
            var all_data = evt.data.split("data:");
            state.img_b64 = "data:image/jpg;base64," + all_data[0];
            if (numb == 3) {
              this.commit("demo");
              numb = 0;
            } else numb++;
          };
          state.socket.onclose = function() {
            console.log("frist socket已经关闭");
            state.is_init = !state.is_init;
          };

接下来就是nodejs(正文):

// 创建长连接,双工通信协议
var webSocketServer = new WebSocketServer.Server({ port: 3030 });
webSocketServer.on("connection", function connection(ws, req) {
  var ip = req.socket.remoteAddress;
  var port = req.socket.remotePort;
  var clientName = ip + "/" + port;
  console.log("%s is connected", clientName);
  ws.on("message", function (message) {
    if (message == "start") {
      wp = child_process.spawn("python.exe的路径",["ai算法.py"]);
       // 算法程序会将每一张处理过后的图像以输出流的方式传输过来。
      wp.stdout.on("data", function (data) {
        img_result_b64 = data.toString("utf-8");
        ws.send(img_result_b64);
      });
      wp.on("message", function (data) {
        console.log("exit:" + data);
      });
      wp.on("close", function (code) {
        console.log("子进程已退出,退出码 " + code);
      });
      wp.on("exit", function (code) {
        console.log("进程退出码是:", code);
      });
    }
// 当前端发送stop指令就关闭算法程序
    if (message == "stop") {
      console.log("frist:" + wp.pid);
      process.kill(wp.pid);
    }
  });
});

最后是算法程序:

# 对图像二进制数据进行base64编码
    img_result_b64 = base64.b64encode(img_result_b64)
# 以标准输出流进行传输
sys.stdout.write(str(img_result_b64, 'utf-8').strip(r'=+'))

总结:

首先是,如果算法程序使用输出为数值字典值则会转为Buffer值,而字符串可以直接获取不需要转换。

流程为前端点击开始——》服务器收到后执行py文件——》py文件调用网络摄像头并开始执行算法程序——》将图像信息进行编码后传输给服务器——》服务器再返回给前端——》直到前端点击停止——》服务器将程序进行关闭

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值