文章目录

  • 前言
  • 原理
  • 代码
    • 服务端
    • 客户端
  • 运行效果
  • 参考资料

前言

2021年电赛的测量题(如下)需要实现局域网视频传输,我们的方案是使用gst-rtsp-server 搭建 RTSP 服务器 进行视频推流。电赛后偶然看到了b站UP主「柒上夏OPO」的基于Opencv的无线视频传输,发现了一种更简单的传输方式 – UDP。

RTSP 协议更适合公网上的视频流传输(如直播),本题的环境要求是局域网,使用 UDP 传输足够达到要求,而且 UDP 相对于 RTSP 来说要简单很多。

原理

代码

代码在原作者的基础上做了改进,包括:

  • 支持任意尺寸的视频传输
  • 改为非阻塞传输模式,即使客户端不发送数据,服务端的程序也可正常运行
  • 取消了线程,程序更加简洁

服务端

'''
Author: 柒上夏OPO
Date: 2022-01-10 12:31:24
LastEditTime: 2022-01-14 14:52:54
LastEditors: CloudSir
Description:
'''import numpy as np
import cv2
from socket import *s = socket(AF_INET, SOCK_DGRAM) # 创建UDP套接字
addr = ('0.0.0.0', 8081)  # 0.0.0.0表示本机
s.bind(addr)s.setblocking(0) # 设置为非阻塞模式while True:data = Nonetry:data, _ = s.recvfrom(921600)receive_data = np.frombuffer(data, dtype='uint8')r_img = cv2.imdecode(receive_data, 1)cv2.putText(r_img, "server", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)cv2.imshow('server', r_img)except BlockingIOError as e:passif cv2.waitKey(1) & 0xFF == ord('q'):breakcv2.destroyAllWindows()

客户端

'''
Author: 柒上夏OPO
Date: 2022-01-10 12:31:28
LastEditTime: 2022-01-14 14:51:00
LastEditors: CloudSir
Description:
'''import numpy as np
import cv2
from socket import *# 127.0.0.1表示本机的IP,用于测试,使用时需要改为服务端的ip
addr = ('127.0.0.1', 8081) cap = cv2.VideoCapture(0)# 设置镜头分辨率,默认是640x480
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)s = socket(AF_INET, SOCK_DGRAM) # 创建UDP套接字while True:_, img = cap.read()img = cv2.flip(img, 1)# 压缩图片_, send_data = cv2.imencode('.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])s.sendto(send_data, addr)print(f'正在发送数据,大小:{img.size} Byte')cv2.putText(img, "client", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)cv2.imshow('client', img)if cv2.waitKey(1) & 0xFF == ord('q'):breaks.close()
cv2.destroyAllWindows()

运行效果

  • client:客户端显示的图像
  • server:服务端显示的图像

参考资料

[1]GStreamer. gst-rtsp-server[EB/OL](N/A). https://github.com/GStreamer/gst-rtsp-server

[2]柒上夏OPO. 基于Opencv的无线视频传输[EB/OL](2021–12–25). https://www.bilibili.com/video/BV1VL4y1n7nC

【Python】基于OpenCV与UDP实现的视频流传输相关推荐

  1. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  2. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  3. Python基于OpenCV的异常行为检测系统[源码&部署教程]

    1.项目背景 智能视频监控(Intelligent Video Surveillance , IVS)[1.2·3.4是计算机视觉技术5l在安防领域的应用,实现了由"被动监控"到& ...

  4. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  5. Python 基于OpenCV 在一张图片上叠加点

    Python 基于OpenCV 在一张图片上叠加点 1.安装 OpenCV pip install opencv-python 2.cv2.circle 用法 cv2.circle(img, cent ...

  6. Python基于OpenCV的指针式表盘检测系统(附带源码&技术文档)

    1.背景 指针式机械表盘具有安装维护方便.结构简单.防电磁干扰等诸多优点, 目前广泛应用于工矿企业.能源及计量等部门.随着仪表数量的增加及精密仪表技术的发展,人工判读已经不能满足实际应用需求.随着计算 ...

  7. Python基于OpenCV的图像去雾算法[完整源码&部署教程]

    1.图片识别 2.视频展示 [项目分享]Python基于OpenCV的图像去雾算法[完整源码&部署教程]_哔哩哔哩_bilibili 3.算法原理 图像增强算法常见于对图像的亮度.对比度.饱和 ...

  8. Python基于Opencv的鱼群密度速度检测系统(源码&教程)

    1.研究背景 智慧渔业是大数据.物联网与人工智能等现代信息技术驱动下的渔业发展新模式,是水产养殖业供给侧结构性改革的重要方式,涉及养殖环境监测.生物环境监测与生物状态监测这几大方面的应用与需求.本文从 ...

  9. Python基于OpenCV的智能交通灯系统(南北车流量比例)

    1.研究背景: 在传统城市道路交通信号灯的应用过程中,存在专业技术人员较缺乏.项目投入资金少.信号灯故障抢修较困难等问题,为城市居民生活与出行带来极大不便.对此,文章进行深入研究,分析了城市道路智慧交 ...

最新文章

  1. Linux中crontab定时执行python程序
  2. 赠书 | GNN 模型在生物化学和医疗健康中的典型应用
  3. 一次非常有意思的sql优化经历
  4. 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
  5. 视频人脸检测——Dlib版(六)
  6. iptables学习笔记:端口转发之“外网访问内网”
  7. 多种方法列出集合中的所有子集(Python和Java实现)
  8. 连载:面向对象葵花宝典:思想、技巧与实践(34) - DIP原则
  9. 《中国人工智能学会通讯》——9.2 误差的本质
  10. MongoDB学习:关闭mongod方式
  11. 深入理解计算机系统(1)--hello world程序的生命周期
  12. HTML5第6章上机,第6章__HTML5的表单.ppt
  13. 用友nc的java插件下载,用友nc插件下载|
  14. 视易精通收银服务器自动关机,视易收银系统总汇
  15. Android 工具:TraceView
  16. winform自定义日历控件
  17. python爬取裁判文书_使用selenium爬取裁判文书网
  18. 街头篮球Android和苹果,街头篮球手游ios和安卓数据可以互通吗?
  19. 数据结构课程设计 重言式判别
  20. python怎么编写口算题_用Python开发小学二年级口算自动出题程序

热门文章

  1. hashmap底层源码详解
  2. [Flask] [Python3] 第一个flask APP
  3. iOS即时通讯,从入门到“放弃”?
  4. 启发式算法(通俗解释)
  5. 公共艺术与计算机论文题目,优秀公共艺术论文选题 公共艺术论文题目如何定...
  6. Response的用法
  7. CPU、内存、磁盘三者的关系
  8. 没有免费午餐定理(No Free Lunch Theorem)
  9. OCX控件在win10下的查看、删除、注册、卸载
  10. neuq oj 1034: C基础-求同存异 C++