Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)

这篇具有很好参考价值的文章主要介绍了Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一台电脑当服务器多线程提供摄像头服务,支持多台电脑调用

目录

一台电脑当服务器多线程提供摄像头服务,支持多台电脑调用

一、效果展示

和舍友联机,多台电脑效果

二、带注释的代码

1.服务端

 2.客户端


一、效果展示

和舍友联机,多台电脑效果

用一个电脑当服务端,舍友当客户端连接

监控寝室外面的情况

客户端需要使用命令行调用

udp发送视频流,Python基础学习,网络,服务器,运维,python,udp

udp发送视频流,Python基础学习,网络,服务器,运维,python,udp

 udp发送视频流,Python基础学习,网络,服务器,运维,python,udp

二、带注释的代码

1.服务端

import time
import socket
import cv2
import numpy as np
import sys
from threading import Thread

def get_cam():
    '''这是从电脑摄像机获取视频的函数'''
    capture = cv2.VideoCapture(0)
    while True:
        ret, frames = capture.read()  # ret为返回值,frame为视频的每一帧
        yield frames
        cv2.imshow('the video in local',frames)
        c = cv2.waitKey(50)
    return frames

class Server():
    def __init__(self,frames,name):
        '''初始化函数'''
        super().__init__()
        #表明该进程的名字
        self.name = name
        # 服务器本地地址
        # 初始化服务器
        self.udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        #self.udp_socket = self.udp_socket.bind(addr)
        self.frames = frames
    
    def post_cam(self,frame,addr):
        '''这是将视频广播出去的函数'''
        frame=cv2.resize(frame,(360,260))  #控制画面大小
        img_encode = cv2.imencode('.jpg', frame)[1]
        data_encode = np.array(img_encode)
        data = data_encode.tobytes()
        self.udp_socket.sendto(data,addr)
        
    def log_save(self):
        '''由客户端得到具体信息,写入日志'''
        data,addr = self.udp_socket.recvfrom(1024)
        Note=open(f'{self.name}.txt',mode='w')
        Note.writelines('ip'+str(addr)+data)
        
    def run(self):
        addr = {'张':('192.168.236.27',8080),'向':('192.168.236.198',8080),'杨':('127.0.0.3',8080)}
        for frame in self.frames:
            self.post_cam(frame, addr['张'])
            self.post_cam(frame, addr['向'])
            self.post_cam(frame, addr['杨'])
        print(f'{self.name}的线程成功启动!')
            
if __name__ == "__main__":
    frames = get_cam()  #调用本机的摄像机,只需一次,不用写入线程
    S = Server(frames,'123')
    S.run()
    
       

 2.客户端

还支持保存传输来的视频,记录日志文件等功能文章来源地址https://www.toymoban.com/news/detail-532349.html

import socket
import cv2
import sys
import time 
import datetime
import getpass
import numpy as np

class Individual():
    def __init__(self,addr):
        '''初始化函数'''
        self.address = addr
        
    def log(self):
        '''创建日志'''
        #s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        user = getpass.getuser()  #获取连接者的用户名
        now_time = datetime.datetime.now().strftime('%F %T')
        data = f'user{user} in {now_time}use the monitor'
        #s.sendto(data.encode("utf-8"),addr)
        Note=open(f'{user}.txt',mode='w')
        Note.writelines('ip'+str(self.address)+data)
        
    def receive_save(self):
        '''接受发送的视频,并且保存到本地'''
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.bind(self.address)
        #下面这部分是发送日志内容
        # user = getpass.getuser()  #获取连接者的用户名
        # now_time = datetime.datetime.now().strftime('%F %T')
        # data = f'用户{user}在{now_time}调用了监控'
        # s.sendto(data.encode("utf-8"),addr)
        #下面开始视频展示
        imgs = []
        while True:
            data, addr = s.recvfrom(400000)
            nparr = np.frombuffer(data, np.uint8)
            img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
            cv2.startWindowThread()
            cv2.imshow('receive',img_decode)  #视频展示
            c = cv2.waitKey(50)
            if c == 27:  # 按了esc候可以退出
                break
            #一帧一帧保存图片成视频
            imgs.append(img_decode)
            v=cv2.VideoWriter(f'D:/cam.avi',\
                cv2.VideoWriter_fourcc(*'MJPG'),5,(360,300))
            for i in imgs:
                i = cv2.resize(i,(360,300))
                v.write(i)
                
    def run(self):
        self.log()
        self.receive_save()
                
if __name__ == '__main__':
    addr=(sys.argv[1], int(sys.argv[2])) 
    use = Individual(addr)
    use.run()

到了这里,关于Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • socket概述 python中如何使用TCP/UDP协议实现通信-教程

    很多编程语言中,都 使用scoket套接字实现网络通信。 Socket是对TCP/IP协议的封装,Socket本身就是一个调用接口(API),方便程序员用Socket使用TCP/IP协议簇,实现网络通信。 不同编程语言,shiyongSocket通信的语法有所区别,但基本原理类型相似。 它的两种方式,分别是TCP和UDP协

    2024年02月13日
    浏览(42)
  • 网络编程-Socket通信实现服务器与客户端互传文件(JAVA语言实现)

    在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换. 网络编程三要素:ip地址、端口、协议 ip地址: 每台计算机指定的一个标识符,127.0.0.1是回送地址,可以代表本机地址 ,一般用来测试使用 ipconfig:命令行中查看本机地址 ping ip地址:检查网络是

    2023年04月14日
    浏览(47)
  • 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 + Python实现(TCP+UDP)

    简单讲一下基础知识,便于后面代码的理解,建议大概浏览一下这一小节内容。这里讲的只是冰山一角,建议大家学习计算机网络相关知识,推荐几本书: 《计算机网络》(谢希仁) 《计算机网络 自顶向下方法》 《计算机网络技术》 《计算机网络基础及应用》 《Linux C从入

    2024年02月08日
    浏览(60)
  • python socket编程7 - 使用PyQt6 开发UI界面新增实现UDP server和client单机通讯的例子

    在第五篇中,简单实现了命令行下的 TCP/UDP server和client的单机通讯。 在第六篇中,实现了PyQt6开发界面,TCP协议实现的单机server和client的通讯功能。 这一篇,在第六篇的基础上,增加了UDP server和client的单机通讯功能。 1、UDP Server 界面实现服务配置和数据提供 2、UDP Server封装

    2024年02月19日
    浏览(50)
  • SpringBoot集成websocket(3)|(websocket调用websocket采用回调方式实现数据互传)

    章节 第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现) 第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现) 本节主要介绍的是springboot实现websocket的客户端服务端,以及客户端与服务端的数据互传。以下为伪代码,业务逻辑删除导致不

    2024年02月12日
    浏览(51)
  • python实现基于UDP的视频直播程序

    1.视频信息的采集 对于摄像头,使用OpenCV打开并获取每一帧的图像,将其封装成字节流进行传输 获取摄像头视频流 cam = cv2.VideoCapture(0)     #打开摄像头 while (cam.isOpened()): ret,frame = cam.read()      #获取视频流 这一步没啥好说的,最基本的API调用 对每一帧图像进行处理 将每一帧图

    2024年04月11日
    浏览(43)
  • chatgpt赋能python:Python在一个程序里调用另一段程序

    随着Python程序的复杂度越来越高,有时候一个程序难以处理所有的任务。这时候我们可能需要将任务拆分成多个脚本来执行。但是,这会导致代码的复杂性增加,同时也会增加可读性和维护成本。这时候,Python的一个特性就显得非常重要,那就是在一个程序里调用另一段程序

    2024年02月07日
    浏览(54)
  • 用python的socket通信将Yolov5的USB摄像头实时推理结果发送给另一台电脑

    将配置yolov5的电脑当客户端,局域网内的另一台电脑当服务端,利用python的socket通讯,将客户端Yolov5的USB摄像头实时推理结果发送给另一台电脑的服务端。 一、修改Yolov5的detect.py文件,启动客户端 1.1在文件前添加 import socket #include 1.2在 LOGGER.info前添加以下代码 # Print time (

    2024年02月09日
    浏览(48)
  • python:socket基础操作(2)-《udp发送信息》

    1.导入socket模块 2.使用udp模块 3.发送内容 4.关闭套接字 很简单的4步就可以实现udp的消息发送  相信你都看socket了,python里的小知识点肯定是学习过了,我这里就不做过多的介绍 当我执行了代码,自动就会发送到我的win7上 注意 :win7开了哪个端口要对指定的端口发信息才行,

    2024年01月23日
    浏览(35)
  • Python多人聊天室-基于socket UDP协议

    使用Python编写的基于socket UDP通信的多功能即时聊天室,包含Tkinter编写的图形化聊天界面,功能包括有账号注册和登录,登录成功后可以查看在线用户,并和聊天室内的其他在线用户聊天,包含私聊和群发,能发送文字、表情包,以及文件等。 登录和注册 显示在线用户 群聊

    2024年02月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包