• 怎么将摄像头视频以及坐标传到上位机上


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 weixin_55158221 2024-04-25 20:39 采纳率: 6.3% 浏览 2 首页/ 编程语言 / 怎么将摄像头视频以及坐标传到上位机上 pythontcp/ip import socket import struct import json # 配置目标 Windows 10 主机的 IP 地址和端口 HOST = 'Windows10_IP_ADDRESS' PORT = 12345 server_address = (HOST, PORT) # 创建 UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: # ... 此处为您的 ZED 相机代码 ... if circles is not None: # 处理发现的圆圈 for i in circles[0]: # 处理每个圆圈和坐标数据... # 将目标信息打包成 JSON target_info = { 'center_x': center_x, 'center_y': center_y, 'world_x': world_x, 'world_y': world_y, 'world_z': world_z, 'distance': distance } target_info_json = json.dumps(target_info) # 发送目标信息 sock.sendto(target_info_json.encode(), server_address) # 编码和发送视频帧 _, frame_jpeg = cv2.imencode('.jpg', frame) sock.sendto(frame_jpeg.tobytes(), server_address) sock.close() 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 20:39
      关注

      引自免费微信小程序:皆我百晓生

      要实现将摄像头视频流及检测到的目标(如圆圈)的坐标传输到上位机,你需要在客户端(ZED相机)上进行编码处理,并在服务器端(Windows 10主机)上解码接收。这里是一个详细的步骤指南,包括客户端和服务器端的代码示例。

      首先,确保在客户端和服务器端都安装了OpenCV、numpy和json库。在Python环境中可以使用pip install opencv-python numpy json命令进行安装。

      客户端(ZED相机)代码:

      import cv2
      import numpy as np
      import socket
      import struct
      import json
      
      # 配置目标 Windows 10 主机的 IP 地址和端口
      HOST = 'Windows10_IP_ADDRESS'  # 请替换为实际IP地址
      PORT = 12345
      server_address = (HOST, PORT)
      
      # 创建 UDP socket
      sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      
      # 假设这是你的圆圈检测函数
      def detect_circles(image):
          # 这里是你的圆圈检测代码,返回格式如[(center_x, center_y), ...]
          pass
      
      while True:
          # 获取摄像头帧
          frame = get_frame_from_camera()  # 请替换为实际获取帧的方法
      
          # 检测圆圈
          circles = detect_circles(frame)
      
          if circles is not None:
              # 处理发现的圆圈
              for i, circle in enumerate(circles):
                  center_x, center_y = circle
                  # 根据需求计算世界坐标或其他相关信息...
                  world_x, world_y, world_z, distance = calculate_world_coordinates(circle)  # 请替换为实际计算方法
      
                  # 将目标信息打包成 JSON
                  target_info = {
                      'center_x': center_x,
                      'center_y': center_y,
                      'world_x': world_x,
                      'world_y': world_y,
                      'world_z': world_z,
                      'distance': distance
                  }
                  target_info_json = json.dumps(target_info)
      
                  # 发送目标信息
                  sock.sendto(target_info_json.encode(), server_address)
      
          # 编码和发送视频帧
          _, frame_jpeg = cv2.imencode('.jpg', frame)
          sock.sendto(frame_jpeg.tobytes(), server_address)
      
      sock.close()
      

      服务器端(Windows 10主机)代码:

      import socket
      import struct
      import json
      import cv2
      import numpy as np
      
      # 配置监听的端口
      PORT = 12345
      server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      server_socket.bind(('localhost', PORT))
      
      while True:
          data, address = server_socket.recvfrom(4096)
      
          # 解析目标信息
          target_info_json = data.decode()
          target_info = json.loads(target_info_json)
      
          # 解析视频帧
          frame_data = data[len(target_info_json):]
      
          # 从字节序列恢复图像
          frame = np.frombuffer(frame_data, dtype=np.uint8)
          frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
      
          # 在此处处理接收到的视频帧和目标信息
          print(f"Received target info: {target_info}")
          cv2.imshow("Video Feed", frame)
          key = cv2.waitKey(1)
          if key == ord('q'):
              break
      
      cv2.destroyAllWindows()
      server_socket.close()
      

      注意:以上代码只是一个基本框架,具体实现可能需要根据你的ZED相机驱动和圆圈检测算法进行调整。在服务器端,你需要根据实际情况处理接收到的视频帧和目标信息,例如显示视频流、存储数据等。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-25 20:40
      关注

      晚上好🌙🌙🌙
      本答案参考ChatGPT-3.5

      解决方案:

      将摄像头视频和坐标传输到上位机可以通过以下步骤实现:

      1. 配置目标 Windows 10 主机的 IP 地址和端口。
        • 在代码中,HOST 变量需要替换为上位机的 IP 地址,PORT 变量可以根据需要进行更改。
      2. 创建 UDP socket。
        • 由于 UDP 的传输速度比 TCP 快,所以可以使用 UDP 来发送数据。
      3. 编写 ZED 相机代码。
        • 由于没有提供 ZED 相机代码,因此需要根据实际情况编写相关代码。
      4. 对找到的圆圈进行处理。
      5. 将坐标信息打包成 JSON 格式。
        • 可以使用 json 模块将字典对象转换为 JSON 字符串。
      6. 发送目标信息。
        • 可以使用 UDP socket 的 sendto() 方法将 JSON 字符串转换为字节编码,并发送到上位机。
      7. 编码和发送视频帧。
        • 可以使用 cv2 模块的 imencode() 方法将视频帧编码为 JPEG 格式,并使用 UDP socket 的 sendto() 方法将图像数据发送到上位机。
      8. 关闭 UDP socket。

      代码实现:

      import socket
      import struct
      import json
      
      # 配置目标 Windows 10 主机的 IP 地址和端口
      HOST = 'Windows10_IP_ADDRESS'
      PORT = 12345
      server_address = (HOST, PORT)
      
      # 创建 UDP socket
      sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      
      while True:
          # TO DO: 编写 ZED 相机代码
      
          if circles is not None:
              # 处理发现的圆圈
              for i in circles[0]:
                  # 处理每个圆圈和坐标数据...
      
                  # 将目标信息打包成 JSON
                  target_info = {
                      'center_x': center_x,
                      'center_y': center_y,
                      'world_x': world_x,
                      'world_y': world_y,
                      'world_z': world_z,
                      'distance': distance
                  }
                  target_info_json = json.dumps(target_info)
      
                  # 发送目标信息
                  sock.sendto(target_info_json.encode(), server_address)
      
          # 编码和发送视频帧
          _, frame_jpeg = cv2.imencode('.jpg', frame)
          sock.sendto(frame_jpeg.tobytes(), server_address)
      
      # 关闭 UDP socket
      sock.close()
      

      展开全部

      评论
    • 码农阿豪 Java领域优质创作者 2024-04-25 20:40
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      这段代码是用于将ZED相机拍摄到的视频帧和目标信息发送到一个指定的Windows 10主机。具体来说,代码包括以下步骤:
      1. 导入必要的Python模块:socket、struct和json。
      2. 配置Windows 10主机的IP地址和端口号。
      3. 创建一个UDP socket对象。
      4. 在一个无限循环中执行以下操作:
        1. 通过ZED相机捕获视频帧和目标信息(圆圈)。
        2. 如果发现了圆圈,则将每个圆圈的坐标和其他信息打包成JSON格式并发送到Windows 10主机。
        3. 将视频帧编码为JPEG格式并发送到Windows 10主机。 以下是一个示例代码,其中仅包括发送目标信息的部分。
      import socket
      import json
      # 配置目标 Windows 10 主机的 IP 地址和端口
      HOST = '192.168.1.100'
      PORT = 12345
      server_address = (HOST, PORT)
      # 创建 UDP socket
      sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      # 模拟圆圈坐标和其他信息
      circles = [[(320, 240), 100]]
      # 处理每个圆圈和坐标数据
      for i, (center, radius) in enumerate(circles):
          center_x, center_y = center
          world_x, world_y, world_z = (i * 100, i * 100, i * 100)
          distance = 50
          # 将目标信息打包成 JSON
          target_info = {
              'center_x': center_x,
              'center_y': center_y,
              'world_x': world_x,
              'world_y': world_y,
              'world_z': world_z,
              'distance': distance
          }
          target_info_json = json.dumps(target_info)
          # 发送目标信息
          sock.sendto(target_info_json.encode(), server_address)
      sock.close()
      

      需要注意的是,在实际使用中,应该根据具体需求修改代码,并处理可能出现的错误和异常。

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    elementUi——table表格中内容超过2行后,省略号...展示,鼠标悬停展示全部
    B2B企业如何打造独立站:从策略到实施的全面指南
    企业积分运营体系如何实现积分促活?
    2022年全球市场文本分析解决方案总体规模、主要企业、主要地区、产品和应用细分研究报告
    算法-动态规划专题
    深入理解JNINativeInterface函数<二>
    Python编程练习与解答 练习116:完全数
    【译】.NET 7 中的性能改进(六)
    介词练习题
    C#(四十一)之线程
  • 原文地址:https://ask.csdn.net/questions/8094972