【英特尔杯】Python调取萤石网络摄像头视频

根据需求,其中有一个点需要调取网络摄像头的画面。我们选择的是萤石CS-C3W这款网络摄像头,参考文档完成了Python通过OpenCV调取视频流

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests   #导包
import cv2
login_url="https://open.ys7.com/api/lapp/token/get"  #请求地址
url=login_url #拼接地址
#参数
body1={'appKey': 'xxxx',
      'appSecret': '自己在控制台创建项目获取',

      }
#发送请求
r=requests.post(url=url, params=body1).json()
#输出返回
print(r)
print(r['data']['accessToken'])
live_url="https://open.ys7.com/api/lapp/v2/live/address/get"  #请求地址
body2={'accessToken': r['data']['accessToken'],
      'deviceSerial': '填写摄像头的序列号',
      'protocol': 2,
      }
r=requests.post(url=live_url, params=body2).json()
#输出返回
print(r)
print(r['data']['url'])



cap = cv2.VideoCapture(r['data']['url'])
fps = cap.get(cv2.CAP_PROP_FPS)
print(fps)
# 获取cap视频流的每帧像素大小
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)
# 定义编码格式mpge-4
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
# 定义视频文件输入对象
outVideo = cv2.VideoWriter('saveDir.avi', fourcc, fps, size) #size必须和视频流的帧大小一致,否则无法执行

# 获取视频流打开状态
if cap.isOpened():
    rval, frame = cap.read()
    print('ture')
else:
    rval = False
    print('False')

tot = 1
c = 1
# 循环使用cv2的read()方法读取视频帧
while rval:
    rval, frame = cap.read()
    frame = cv2.resize(frame, (400, 300)) #调整画面大小
    cv2.imshow('test', frame)

    # 使用VideoWriter类中的write(frame)方法,将图像帧写入视频文件
    outVideo.write(frame)
    cv2.waitKey(25)

cap.release()
outVideo.release()
cv2.destroyAllWindows()

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
您好!对于英特尔D435深度摄像头,您可以使用Python中的套接字(socket)来进行通信。套接字是一种用于网络通信的编程接口。 首先,您需要确保已经安装了pyrealsense2库,该库提供了与Intel RealSense深度摄像头的交互功能。您可以使用以下命令在终端或命令提示符中安装该库: ``` pip install pyrealsense2 ``` 一旦安装完成,您可以使用以下代码来创建一个基于套接字的服务器和客户端,进行数据传输: 服务器端代码: ```python import socket import pyrealsense2 as rs # 创建套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP和端口 host = '127.0.0.1' # 服务器的IP地址 port = 8888 # 服务器的端口号 s.bind((host, port)) # 监听连接 s.listen(1) print('等待客户端连接...') # 接受连接 client_socket, addr = s.accept() print('客户端已连接:', addr) # 配置RealSense摄像头 pipeline = rs.pipeline() config = rs.config() # 启动RealSense摄像头 pipeline.start(config) try: while True: # 等待新帧 frames = pipeline.wait_for_frames() depth_frame = frames.get_depth_frame() # 获取深度数据 depth_data = depth_frame.get_data() # 将深度数据发送给客户端 client_socket.sendall(depth_data) except Exception as e: print(e) finally: # 关闭连接和套接字 client_socket.close() s.close() pipeline.stop() ``` 客户端代码: ```python import socket # 创建套接字 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 服务器的IP地址和端口号 host = '127.0.0.1' port = 8888 # 连接服务器 s.connect((host, port)) print('已连接到服务器') try: while True: # 接收深度数据 depth_data = s.recv(4096) # 处理深度数据,例如进行图像处理或保存为文件 # ... except Exception as e: print(e) finally: # 关闭连接和套接字 s.close() ``` 请注意,上述代码仅提供了一个基本的框架,您可以根据自己的需求进行修改和扩展。此外,服务器端和客户端应该在不同的计算机上运行,以便进行数据传输。 希望这可以帮助到您!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值