首页 > 编程语言 >python实现ONVIF协议抓取华为摄像头图像

python实现ONVIF协议抓取华为摄像头图像

时间:2024-05-21 17:22:14浏览次数:31  
标签:python 抓取 camera snapshot import wsdl onvif ONVIF

参考文档:配置摄像机ONVIF协议参数 - SDC 10.0 C系列产品文档 - 华为机器视觉 (huawei.com)

 

配置摄像机ONVIF协议参数

1)登录摄像机Web界面,选择“配置 > 视音频 > 视频”,将“编码协议”设置为“H.264”

2)进入“网络平台对接”配置,选择“第二协议参数 > ONVIF”,进入ONVIF协议参数配置页面

3)python代码实现

安装onvif包

pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple onvif

代码实现

"""
ONVIF鉴权方式 Digest_MD5 (priority) / WSSE
"""
from onvif import ONVIFCamera
import cv2
import requests
from requests.auth import HTTPDigestAuth
import numpy as np

from datetime import datetime

print("请求前时间:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

# 摄像头连接信息
camera_ip = 'xxx.xxx.xxx.xxx'  # 替换为实际的摄像头IP地址
camera_port = 80  # 替换为实际的端口号
username = 'xxxx'  # 替换为实际的用户名
password = 'xxxx'  # 替换为实际的密码
wsdl_path = 'C:/Software/Anaconda/anaconda/envs/yolov8_2/Lib/site-packages/wsdl'  # 替换为实际的WSDL文件路径

# 连接到ONVIF摄像头
camera = ONVIFCamera(camera_ip, camera_port, username, password, wsdl_path)

# 创建媒体服务
media_service = camera.create_media_service()

# 获取视频源配置
profiles = media_service.GetProfiles()
profile = profiles[0]

# 获取截图URL
snapshot_uri = media_service.GetSnapshotUri({'ProfileToken': profile.token})
snapshot_url = snapshot_uri.Uri

# 获取截图
response = requests.get(snapshot_url, auth=HTTPDigestAuth(username, password))

# 将截图保存为图像文件
if response.status_code == 200:
    image_data = np.frombuffer(response.content, np.uint8)
    image = cv2.imdecode(image_data, cv2.IMREAD_COLOR)

    print("请求后时间:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    cv2.imwrite('snapshot.jpg', image)
    print("Snapshot saved as snapshot.jpg")
else:
    print(f"Failed to get snapshot. Status code: {response.status_code}")

 

扩展:如果出现 onvif.exceptions.ONVIFError: Unknown error: No such file: /home/lzh/anaconda3/envs/py2/lib/python2.7/site-packages/wsdl/devicemgmt.wsdl报错

这是因为wsdl_path 路径没有配置正确,将其路径改为安装onvif包的位置,报错解决

 

标签:python,抓取,camera,snapshot,import,wsdl,onvif,ONVIF
From: https://www.cnblogs.com/REN-Murphy/p/18204548

相关文章

  • selenium安装教程python
    安装Selenium的步骤主要包括准备Python环境、安装Selenium、安装浏览器驱动以及验证安装。准备Python环境:访问Python官网并下载适合你操作系统的Python版本。安装Python,并确保在安装过程中将Python添加到环境变量中,以便在命令行中运行Python命令。安装完成后,在命令行中输......
  • python中那些双下划线开头得函数和变量
    Python中下划线---完全解读Python用下划线作为变量前缀和后缀指定特殊变量_xxx不能用frommoduleimport*导入__xxx__系统定义名字__xxx类中的私有变量名核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程......
  • Python教程: 反射及常用的几种方法
    反射就是通过字符串映射或修改程序运行时的状态、属性、方法有四个常用方法:hasattr(obj,name_str)判断一个obj对象是否有对应name_str的方法getattr(obj,name_str)根据字符串name_str获取Obj对象中对应方法的内存地址setattr(obj,key,value)为对象Obj新增或修改属性......
  • Python教程:拆分多级目录的方法
    实现多级目录差分,举例说明如下:假设现有的目录结构如下:1、2、2.1、2.2、2.3、2.4、3、4、5、6、6.1、6.1.1、6.1.2、6.1.3、6.1.4、6.2、6.3、6.4、7、8、9、10。经过差分后,得到的各级目录为:一级目录:1、2、3、4、5、6、7、8、9、10二级目录:2.1、2.2、2.3、2.4和6.1、6.2、6......
  • mac anaconda pycharm python3.6 tensorflow 1.1.0
     condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/osx-arm64/condacreate-npy36python=3.6     ps:当加载卡住的时候,强制退出存在下载的包都消失的情况......
  • 在Docker中安装GaussDB的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu20.04镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\apt-getinstall-y\wget\curl\gnupg2\apt-transport-https......
  • 在Docker中安装SQL Server的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu20.04镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  wget\  curl\  gnupg2\ ......
  • 在Docker中安装MySQL的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  build-essential\  curl\  apt-trans......
  • 在Docker中安装PostgreSQL的ODBC驱动并添加Python测试代码
    #使用官方的Ubuntu镜像作为基础镜像FROMubuntu:20.04#设置环境变量以避免交互式安装提示ENVDEBIAN_FRONTEND=noninteractive#更新包列表并安装必要的软件包RUNapt-getupdate&&\  apt-getinstall-y\  build-essential\  unixodbc\  unixo......
  • C#如何用最简单方法调用Python?
    最近有群友咨询C#如何调用Python?小编尝试Python.NET过程中遭遇的版本兼容性和环境配置难题,小编决定寻找一个更为简单、稳定且对初学者友好的解决方案。小编搜索一番,除了Python.NET之外,还有其他途径能够帮助我们轻松地在C#项目调用Python脚本,那就是通过命令行调用,使用System.Diagn......