使用socket实现客户端和服务端进行摄像头图传实时回传
创始人
2024-10-22 02:15:08
0

实时传输视频流

  1. 客户端需要的做的是连接服务端然后读摄像头数据发送给服务端需要注意的是服务器的IP地址需要注意一下,这里用的是服务端的IP地址,(这里使用的是树莓派5在服务端)

  2. #以下是客户端程序 import socket import struct import time import traceback  import cv2 import numpy   class Client(object):     """客户端"""      def __init__(self, addr_port=('192.168.149.1', 11000)):         # 连接的服务器的地址         # 连接的服务器的端口         self.addr_port = addr_port         # 创建套接字         self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         # 地址端口可以复用         self.client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)          # 分辨率         self.resolution = (640, 480)       def connect(self):         """链接服务器"""         try:             self.client.connect(self.addr_port)             return True         except Exception as e:             traceback.print_exc()  # 打印原始的异常信息             print('连接失败')             return False      def send2server(self):         """读摄像头数据 发送给服务器"""         camera = cv2.VideoCapture(0)  # 摄像头对象         print('isOpened:', camera.isOpened())          while camera.isOpened():              try:                 # 获取摄像头数据                 ret, frame = camera.read()                 # 对每一帧图片做大小处理 和大小的压缩                 frame = cv2.resize(frame, self.resolution)                 # 参1图片后缀名 参2 原图片的数据 参3图片质量 0-100 越大越清晰                 ret, img = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 100])                 # img 是被压缩后的数据 无法正常显示                 print(img)                 print('-------------')                 print(img.tostring())                  # 转换为numpy格式数据                 img_code = numpy.array(img)                  # 转为二进制数据                 img = img_code.tostring()                  # 获取数据长度                 length = len(img)                  # 发送的数据  大小 宽 高 图片数据                  # 数据打包变为二进制                 # pack方法参数1 指定打包数据的数据大小  i 4字节 h代表2字节                 all_data = struct.pack('ihh', length, self.resolution[0], self.resolution[1]) + img                  self.client.send(all_data)                 time.sleep(0.01)             except:                 camera.release()  # 释放摄像头                 traceback.print_exc()                 return   if __name__ == '__main__':     client = Client()     if client.connect():         client.send2server() 

    服务端:在运行的时间需要先运行服务端在运行客户端

    import socket import struct import threading import cv2 import numpy import os   class Server:     def __init__(self):         # 设置tcp服务端的socket         self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         # 设置重复使用         self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)         # 绑定地址和端口         self.server.bind(('192.168.149.1', 11000))         # 设置被动监听         self.server.listen(128)      def run(self):         while True:             print('等待客户端连接')             # 等待客户端连接             client, addr = self.server.accept()             ProcessClient(client).start()   class ProcessClient(threading.Thread):      def __init__(self, client):         super().__init__()         self.client = client         self.i = 0  # 初始化i的值          # 获取文件夹中图片序号最大的值         path = "D:/sample"         file_list = []         for root, dirs, files in os.walk(path, topdown=False):             # 确保files是当前目录下的文件列表             for file in files:                 if file.endswith(('.png', '.jpg', '.jpeg')):  # 只处理图片文件                     file_number = int(file.split('.')[0])  # 假设文件名是数字和图片扩展名组成                     file_list.append(file_number)          if len(file_list) == 0:             self.i = 0         else:             file_list.sort()             self.i = file_list[-1] + 1      def run(self):         while True:             data = self.client.recv(8)             if not data:                 break             # 图片的长度 图片的宽高             length, width, height = struct.unpack('ihh', data)              imgg = b''  # 存放最终的图片数据             while length:                 # 接收图片                 temp_size = self.client.recv(length)                 length -= len(temp_size)  # 每次减去收到的数据大小                 imgg += temp_size  # 每次收到的数据存到img里              # 把二进制数据还原             data = numpy.fromstring(imgg, dtype='uint8')              # 还原成矩阵数据             image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED)             print(image)              cv2.imshow('capture', image)             # 保存图片             k = cv2.waitKey(1)             if k == ord('k'):                 cv2.imwrite(r"F:\sample\\" + str(self.i) + ".jpg", image)  # 存储路径                 self.i = self.i + 1                 print(self.i)                 # time.sleep(5)              if k == ord('q'):                 break   if __name__ == '__main__':     server = Server()     server.run() 

    以下是效果:

相关内容

热门资讯

秒懂普及!”新九神在哪里买的”... 秒懂普及!”新九神在哪里买的”房卡链接获取 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【1...
一秒了解!”新澳娱在哪里买的”... 一秒了解!”新澳娱在哪里买的”房卡链接获取微信房卡充值 添加房卡批售商:微【113857776】复制...
秒懂普及!”新九五在哪里能买炸... 秒懂普及!”新九五在哪里能买炸金花房卡“游戏中心打开微信,添加客服【113857776】,进入游戏中...
秒懂百科!”新全游在哪里能买炸... 秒懂百科!”新全游在哪里能买炸金花房卡“微信房卡充值 添加房卡批售商:微【113857776】复制到...
实测分享!”新久久在哪里买的”... 实测分享!”新久久在哪里买的”房卡链接获取微信房卡充值 添加房卡批售商:微【113857776】复制...
秒懂普及!”新版火神在哪里能买... 秒懂普及!”新版火神在哪里能买炸金花房卡“微信房卡充值 添加房卡批售商:微【113857776】复制...
分享经验!”新云游在哪里能买炸... 分享经验!”新云游在哪里能买炸金花房卡“游戏中心打开微信,添加客服【113857776】,进入游戏中...
分享经验!”新神皇房间卡房卡找... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
秒懂百科!”新下游在哪里能买炸... 房卡是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡来享...
玩家攻略!”新好游在哪里能买炸... 玩家攻略!”新好游在哪里能买炸金花房卡“ 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
分享经验!”新战皇房间卡房卡找... 分享经验!”新战皇房间卡房卡找谁谁购买“ 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
玩家须知!”新财神在哪里能买炸... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
一分钟实测分享!”新烛龙在哪里... 一分钟实测分享!”新烛龙在哪里能买炸金花房卡“游戏中心打开微信,添加客服【113857776】,进入...
1分秒分析!”圣游在哪里买的”... 1分秒分析!”圣游在哪里买的”房卡链接获取游戏中心打开微信,添加客服【113857776】,进入游戏...
1分秒分析!”欢乐游在哪里购买... 1分秒分析!”欢乐游在哪里购买-轻松选择三种房卡渠道” 微信牛牛房卡客服微信号微信游戏中心打开微信,...
实测分享!”蛮王大厅在哪里买的... 实测分享!”蛮王大厅在哪里买的”房卡链接获取微信房卡充值 添加房卡批售商:微【113857776】复...
玩家须知!”新上游在哪里购买-... 来教大家如何使用房卡房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添加房卡房...
1分秒分析!”新道游在哪里能买... 1分秒分析!”新道游在哪里能买炸金花房卡“游戏中心打开微信,添加客服【113857776】,进入游戏...
分享经验!”圣游在哪里能买炸金... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
实测分享!”新星游在哪里能买炸... 实测分享!”新星游在哪里能买炸金花房卡“微信房卡充值 添加房卡批售商:微【113857776】复制到...