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

1.共享内存(python共享内存实际案例,传输opencv frame)

主进程程序

send.py

import cv2
import numpy as np
from multiprocessing import shared_memory, resource_trackercap = cv2.VideoCapture(0)
if not cap.isOpened():print("无法打开 RTSP 流,请检查地址、网络连接或 GStreamer 配置。")
else:# 创建共享内存shm_name = 'shared_frame'frame_shape = (360, 640, 3)  # 假设视频帧的大小为 480x640shm = shared_memory.SharedMemory(create=True, size=np.prod(frame_shape) * np.dtype(np.uint8).itemsize, name=shm_name)frame_buffer = np.ndarray(frame_shape, dtype=np.uint8, buffer=shm.buf)try:while True:ret, frame = cap.read()if ret:# 将frame写入共享内存frame = cv2.resize(frame, (640, 360))np.copyto(frame_buffer, frame)cv2.namedWindow("RTSP Stream", cv2.WINDOW_NORMAL)cv2.imshow("RTSP Stream", frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:print("无法读取视频帧")breakfinally:cap.release()cv2.destroyAllWindows()shm.close()shm.unlink()

receive.py

import cv2
import numpy as np
from multiprocessing import shared_memory, resource_tracker# 共享内存的名称
shm_name = 'shared_frame'
frame_shape = (360, 640, 3)  # 假设视频帧的大小为 480x640# 连接到共享内存
shm = shared_memory.SharedMemory(name=shm_name)
# 注销资源跟踪器,避免receive异常终止,关闭共享内存
resource_tracker.unregister(shm._name, 'shared_memory')
frame_buffer = np.ndarray(frame_shape, dtype=np.uint8, buffer=shm.buf)try:while True:# 从共享内存中读取frameframe = np.copy(frame_buffer)cv2.namedWindow("Shared Memory Frame", cv2.WINDOW_NORMAL)cv2.imshow("Shared Memory Frame", frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
finally:cv2.destroyAllWindows()shm.close()

终端1启动

send.py

终端2启动 receive.py

ps:使用共享内存的方式,可以实现容器内和容器外程序的通讯,且延迟极低。通过该方式可以实现容器内做推理,容器外做GUI显示

http://www.lryc.cn/news/2378341.html

相关文章:

  • 网页常见水印实现方式
  • oracle主备切换参考
  • Java大师成长计划之第25天:Spring生态与微服务架构之容错与断路器模式
  • 【ARM】MDK如何将变量存储到指定内存地址
  • Unity3D仿星露谷物语开发44之收集农作物
  • langchain—chatchat
  • 经典算法 求C(N, K) % mod,保证mod是质数
  • 【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树
  • 关于软件测试开发的一些有趣的知识
  • uni-app 开发HarmonyOS的鸿蒙影视项目分享:从实战案例到开源后台
  • 售前工作.工作流程和工具
  • GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
  • 学习ai课程大纲
  • 基于CentOS7制作OpenSSL 1.1的RPM包
  • 数据分析_Python
  • TCP/UDP协议原理和区别 笔记
  • 深入浅出:C++数据处理类与计算机网络的巧妙类比
  • 【滑动窗口】LeetCode 209题解 | 长度最小的子数组
  • 在RK3588上使用NCNN和Vulkan加速ResNet50推理全流程
  • 【ant design】ant-design-vue 4.0实现主题色切换
  • Android 图片自动拉伸不变形,点九
  • 电子电路:什么是色环电阻器,怎么识别和计算阻值?
  • LeetCode Hot100刷题——轮转数组
  • Python绘制南丁格尔玫瑰图:从入门到实战
  • 概率与期望总结
  • 炼丹学习笔记3---ubuntu2004部署运行openpcdet记录
  • 深入解析BGP路由反射器与联邦:突破IBGP全连接限制的两种方案
  • QT设置MySQL驱动
  • String的一些固定程序函数
  • 3.2/Q2,Charls最新文章解读