当前位置: 首页 > java >正文

使用node-red+opencv+mqtt实现相机图像云端查看

一、本机环境

jetson nano ubuntu20.04

python 3.12

pip install opencv-python paho-mqtt

安装并启动mqtt broker

# 安装 Mosquitto
sudo apt update
sudo apt install mosquitto mosquitto-clients -y# 启动并设置开机自启
sudo systemctl enable mosquitto
sudo systemctl start mosquitto# 验证是否运行
sudo systemctl status mosquitto

二、制作方法

mqtt broker启动成功后,执行这个python脚本

# script.py
import cv2
import paho.mqtt.client as mqtt
import base64
import time# MQTT 配置
MQTT_BROKER = "localhost"
MQTT_PORT = 1883
MQTT_TOPIC = "camera/image"# 打开摄像头
cap = cv2.VideoCapture(0)
if not cap.isOpened():print("无法打开摄像头")exit()# 指定 callback_api_version
client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2)# 连接 MQTT
try:client.connect(MQTT_BROKER, MQTT_PORT, 60)client.loop_start()  # 启动后台线程处理网络通信
except Exception as e:print(f"MQTT 连接失败: {e}")exit()print("摄像头启动,开始发布图像...")try:while True:ret, frame = cap.read()if not ret:print("摄像头读取失败")break# 缩放图像(减小带宽)frame = cv2.resize(frame, (640, 480))# 编码为 JPEG_, buffer = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 80])# 转为 Base64 字符串jpg_as_text = base64.b64encode(buffer).decode('utf-8')# 发布到 MQTTresult = client.publish(MQTT_TOPIC, jpg_as_text, qos=0)# 可选:检查是否发布成功# if result.rc != mqtt.MQTT_ERR_SUCCESS:#     print("发布失败")time.sleep(0.1)  # 控制帧率(约10fps)except KeyboardInterrupt:print("\n停止发布")finally:cap.release()client.loop_stop()  # 停止后台线程client.disconnect()

在node-red端则需要两个节点,一个是mqtt_in 和 ui_template节点,mqtt_in节点需要配置与python端一致的话题和端口

ui_template 则需要输入以下代码:

<div style="text-align: center;"><img ng-src="data:image/jpeg;base64,{{msg.payload}}" style="max-width: 100%; height: auto; border: 1px solid #ccc; border-radius: 8px;"alt="Camera Stream"><p style="font-size: 12px; color: #666;">Last update: {{ $flow.lastUpdate }}</p>
</div><script>
// 更新时间戳
(function(scope) {scope.$watch('msg', function(msg) {if (msg) {scope.$flow.lastUpdate = new Date().toLocaleTimeString();}});
})(scope);
</script>

部署后,mqtt_in连接上服务器就对了

然后输入 127.0.0.1:1880/ui 进入ui界面,即可查看相机图像,也可通过远程ip访问查看

可以调整python端控制帧率的time.sleep函数,达到实时传输

http://www.xdnf.cn/news/19414.html

相关文章:

  • 【openGauss】Oracle与openGauss/GaussDB数据一致性高效核对方案
  • 解决Docker运行hello-world镜像报错问题
  • 烦人的Nano 编辑器,如何退出呢?
  • 【Java后端】SpringBoot配置多个环境(开发、测试、生产)
  • Python|Pyppeteer解决无法启动Chromium浏览器的问题(35)
  • 云网络(参考自腾讯云计算工程师认证)
  • MySQL服务启动命令手册(Linux+Windows+macOS)(下)
  • CAD2024安装包下载与安装详细教程
  • Marco:阿里国际推出的商用翻译大模型,支持15种语言,效果超越谷歌、GPT-4
  • Overleaf中文显示
  • AI 相关内容:Agent、MCP、Prompt 与 RAG 入门指南
  • tkinter布局
  • 鸿蒙应用开发:开机自启并自检网络状态
  • docker,数据卷
  • Flink部署实战:从入门到优化
  • Linux基本工具(yum、vim、gcc、Makefile、git、gdb)
  • 【模型训练篇】VeRL分布式基础 - 框架Ray
  • 解决 uni-app 中大数据列表的静默UI渲染失败问题
  • Q1 Top IF 18.7 | 基于泛基因组揭示植物NLR进化
  • C语言强化训练(2)
  • 生物学自然主义:心灵哲学中的生物性探索
  • 编程与数学 03-004 数据库系统概论 11_数据库的维护
  • 线阵相机和镜头选型案例介绍
  • 雪花算法是什么,时钟回拨问题怎么解决?
  • 第2章 MySQL的调控按钮-启动选项和系统变量
  • React 状态管理演进之路:从 Dva 到现代架构
  • YOLO 目标检测:YOLOv2基本框架、多尺度训练、锚框、维度聚类、位置预测、passthrough
  • 房屋租赁系统|基于SpringBoot和Vue的房屋租赁系统(源码+数据库+文档)
  • 秋招 AI 方向 —— 华为机考
  • Spring MVC 九大组件源码深度剖析(六):HandlerExceptionResolver - 异常处理的艺术