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

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.xdnf.cn/news/6078.html

相关文章:

  • Python面向对象编程(OOP)深度解析:从封装到继承的多维度实践
  • 【论信息系统项目的资源管理】
  • 【Git】合并和变基的区别
  • windows 强行终止进程,根据端口号
  • 人工智能技术演进:从多模态融合到智能体落地的实践探索
  • uart16550详细说明
  • 使用虚拟机Linux写程序
  • 网站开发过程中样式忽然不显示问题
  • GOOSE协议publisher上传频率
  • Playwright 安装配置文件详解
  • 爆肝整理!软件测试面试题整理(项目+接口问题)
  • OpenCV特征处理全解析:从检测到匹配的完整指南
  • 二分查找算法的思路
  • linq中 List<T>.ForEach() 与 的 Select() 方法区别——CAD c#二次开发
  • HCIP实验(BGP联邦实验)
  • 21.three官方示例+编辑器+AI快速学习webgl_buffergeometry_selective_draw
  • Q1财报持续向好,腾讯音乐如何在不确定中寻找确定性?
  • 如何将两台虚拟机进行搭桥
  • 防重入或并发调用(C++)
  • C语言指针循环使用指南
  • Ansys 产品在Windows系统的卸载(2025R1版)
  • 【Redis】RedLock实现原理
  • 笔试强训(十七)
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • 126.在 Vue 3 中使用 OpenLayers 实现绘制正方形、正三角形、正五边形
  • 使用PHP对接日本股票市场数据
  • 数据工具:数据同步工具、数据血缘工具全解析
  • Doris重建ROUTINE任务过程
  • vue3实现与不同的界面跳转【路由 vue-router】
  • WebGL入门:光照原理