python实现onvif客户端及问题小结

2023-10-29

python实现onvif客户端及问题小结


1. 前言

原本一直使用的go方式进行摄像头的搜索、改网络地址、获取media、ptz以及preset等,但是目前测试go的库在部分摄像头上无法正常ptz,于是在分析c/c++的库和python的库后,暂时打算测试一下python的库,使用python在pip中可以直接安装的onvif包即可,写起来还是很方便的,大部分接口都实现了,相较于go的包更成熟一些,相较于c++的方式能更快上手,所以目前搜索和改网络等还是使用的go,ptz等go实现不好的地方传递参数给python脚本来做,等到有功夫的时候再来把go的包修改一下(python的包显示似乎搜索不好处理,所以也没有全部切换到python)。

2. python-onvif安装及ptz示例

地址,目前在0.2.0版本,似乎也有一段时间没有更新了:

https://github.com/quatanium/python-onvif

可以直接使用pip安装,这个是适用于python2的,其中也提供了适用于python3的地址:https://github.com/FalkTannhaeuser/python-onvif-zeep

2.1 openwrt下安装pip及python-onvif

安装python2.7:

opkg update

opkg install python2.7

安装pip:

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py  --no-check-certificate

python2.7 get-pip.py

安装python-onvif:

pip install onvif

2.2 ptz示例

如下,也是采用的continuousMove,这个是官方给的示例,可以直接拿来用:

from time import sleep

from onvif import ONVIFCamera

XMAX = 1
XMIN = -1
YMAX = 1
YMIN = -1

def perform_move(ptz, request, timeout):
    # Start continuous move
    ptz.ContinuousMove(request)
    # Wait a certain time
    sleep(timeout)
    # Stop continuous move
    ptz.Stop({'ProfileToken': request.ProfileToken})

def move_up(ptz, request, timeout=1):
    print 'move up...'
    request.Velocity.PanTilt._x = 0
    request.Velocity.PanTilt._y = YMAX
    perform_move(ptz, request, timeout)

def move_down(ptz, request, timeout=1):
    print 'move down...'
    request.Velocity.PanTilt._x = 0
    request.Velocity.PanTilt._y = YMIN
    perform_move(ptz, request, timeout)

def move_right(ptz, request, timeout=1):
    print 'move right...'
    request.Velocity.PanTilt._x = XMAX
    request.Velocity.PanTilt._y = 0
    perform_move(ptz, request, timeout)

def move_left(ptz, request, timeout=1):
    print 'move left...'
    request.Velocity.PanTilt._x = XMIN
    request.Velocity.PanTilt._y = 0
    perform_move(ptz, request, timeout)

def continuous_move():
    mycam = ONVIFCamera('192.168.0.112', 80, 'admin', '12345')
    # Create media service object
    media = mycam.create_media_service()
    # Create ptz service object
    ptz = mycam.create_ptz_service()

    # Get target profile
    media_profile = media.GetProfiles()[0];

    # Get PTZ configuration options for getting continuous move range
    request = ptz.create_type('GetConfigurationOptions')
    request.ConfigurationToken = media_profile.PTZConfiguration._token
    ptz_configuration_options = ptz.GetConfigurationOptions(request)

    request = ptz.create_type('ContinuousMove')
    request.ProfileToken = media_profile._token

    ptz.Stop({'ProfileToken': media_profile._token})

    # Get range of pan and tilt
    # NOTE: X and Y are velocity vector
    global XMAX, XMIN, YMAX, YMIN
    XMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Max
    XMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Min
    YMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Max
    YMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Min

    # move right
    move_right(ptz, request)

    # move left
    move_left(ptz, request)

    # Move up
    move_up(ptz, request)

    # move down
    move_down(ptz, request)

if __name__ == '__main__':
    continuous_move()

3. 使用时可能的错误

No such file: /usr/lib/python2.7/site-packages/wsdl/devicemgmt.wsdl

在这里插入图片描述

解决方法:

https://github.com/FalkTannhaeuser/python-onvif-zeep/issues/13

指定wsdl地址位置即可:

在这里插入图片描述

可以使用find命令查找wsdl位置即可:

find / -name *.wsdl

比如我这里pip安装onvif后默认wsdl在/usr/下:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现onvif客户端及问题小结 的相关文章

随机推荐

  • GPT 学习笔记-让GPT基于embeddings搜索来回答问题

    1 什么是embedding search 嵌入 Embedding 是一种将离散的符号 如词语 字符或文档 映射到连续向量空间的表示方法 它将离散的符号转换为实数向量 从而使得计算机可以更好地处理和理解文本数据 OPENAI提供内置的Em
  • 防止matplotlib画完图后自动关闭

    为防止matplotlib画完图后自动关闭图像窗口 可以在代码的尾部加上 pyplot pause 0 例 import tensorflow as tf import numpy as np import matplotlib pylab
  • windows xp卡机的解决妙招

    使用windows xp时间比较长后 有时运行会很不流畅 甚至会不响应鼠标键盘对操作 很多时候是系统的假死 和真正的死机不同 假死完全可以被 救活 假死的根源在于explorer exe 整个图形界面的驱动 既然会假死 那就一定有解决方法
  • pyqt5 槽函数传递参数

    内置槽函数是不允许传递参数的 这里有两种解决方法 方法一 使用lambda表达式 button clicked connect lambda self onButtonClick 1 这个时候就可以将数值1传递到所调用的方法中 方法二 使用
  • flowable(五) - 使用flowable-admin-ui 流程部署到数据库

    前言 看完别人集成boot项目的demo 他的部署方式是通过和moderer项目里面的代码进行部署的 flowable流程资源部署方式 这里提到了Model方式部署 设计器中的发布就是用的此方法这里就是上篇作者的代码 所以说 设计器的发布
  • jupyter 写入csv pandas_pandas:如何简单3步绘制直方图

    大家好 这是近期学习的data analysis 那本书的总结 发表这些东西的主要目的就是督促自己 希望大家关注评论指出不足 一起进步 内容我都会写的很细 并且按照文章中的代码自己也可以做出一样的结果 一个目的就是零基础也能懂 因为自己就是
  • Tensorflow Serving部署tensorflow、keras模型详解

    写在篇前 本篇介绍如何使用Tensorflow Serving组件导出训练好的Tensorflow模型 并使用标准tensorflow model server来部署深度学习模型预测服务 tensorflow model server主要负
  • 信道建模那些事--仿真Matlab

    一 小尺度衰落 瑞利信道 莱斯信道 和大尺度衰落Matlab信道建模 一般论文中给出的是下面高亮的大尺度衰落模型 要把它换成单位是W的 dB换成W公式推导如下所示 公式中 P L 0 PL 0 PL
  • PLSQL编程详细

    目录 1 概念和目的 1 1 什么是PL SQL 1 2 程序结构 1 3 Hello World sqlplus编译运行 开启输出 set serveroutput on 1 4 变量 1 4 1 普通变量 1 4 2 引用型变量 引用型
  • RS485主从式多机通讯协议

    RS485主从式多机通讯协议一 数据传输协议 此协议定义了一个控制器能认识使用的消息结构 而不管它们是经过何种网络进行通信的 它描述了一控制器请求访问其它设备的过程 如何回应来自其它设备的请求 以及怎样侦测错误并记录 它制定了消息域格局和内
  • 车载LED 舞台灯 备用灯 智能过热调节降压恒流芯片NS4116

    车载LED是一种在汽车和其他交通工具中广泛使用的照明技术 车载LED具有许多优点 使其成为汽车照明系统的流行选择 关于车载LED的一些重要信息 高亮度和能效 车载LED灯具有高亮度 能够产生明亮 清晰的光线 同时具有较低的能耗 这使得它们比
  • 用ChatGPT编写测试大纲和测试用例

    问 当用户未支付时 不需要数据上报 当用户支付成功时 需要数据上报 请以这个逻辑帮我写测试用例 ChatGPT 好的 根据您提供的逻辑 我可以为您列出一些测试用例 1 确认在用户未支付时 不会产生数据上报 2 测试在用户支付成功后 数据是否
  • 公安交管工作数字化转型存在的问题及对策建议

    近年来 数字中国 交通强国 数字政府 等关键词密集出现在党和国家层面的各种会议 文件 报告和规划中 特别是在党的二十大报告中 明确提出加快建设 数字中国 和 交通强国 2023年初 又先后印发了 数字中国建设整体布局规划 和批准组建国家数据
  • ps 命令查看进程下的线程及线程状态

    ps 命令查看进程下的线程及线程状态 查看java所有线程 ps eLf grep java 查看进程下的所有线程cpu利用率 top H p 25120 其中25120为Java进程号 下图红色标注的地方为线程状态 其中总数为28 当前运
  • Windows 32位、64位 Android Studio 解压版安装及SDK配置

    android studio最新版只有64位可以直接安装 不用配置 32位只能解压后自己安装SDK并配置 android studio需要安装jdk才能运行 我的jdk已经配置好 可以通过在cmd中输入java version检查jdk是否
  • CH5-数据存储

    文章目录 目标 一 数据存储方式 目标 1 1 数据存储方式 二 文件存储 目标 2 1 将数据存入文件中 内部存储 外部存储 2 2 从文件中读取数据 内部存储 外部存储 申请SD卡写文件的权限 2 3 实战演练 保存QQ账号与密码 三
  • linux网络名字空间介绍

    1 什么是网络名字空间 what are network namespaces Generally speaking an installation of Linux shares a single set of network inter
  • sockjs-node请求一直报错

    今天在运行本地项目时候 一直提示sockjs node info 请求失败 我一直在想本地并没有这个请求接口 这个是哪里来的 后来经过查阅资料发现 sockjs node 是一个JavaScript库 提供跨浏览器 JavaScript 的
  • 蓝桥杯省赛2021 回路计数 python

    题目描述 蓝桥学院由 21栋教学楼组成 教学楼编号 1 到 21 对于两栋教学楼 a 和 b 当 a 和 b 互质时 a和 b之间有一条走廊直接相连 两个方向皆可通行 否则没有直接连接的走廊 小蓝现在在第一栋教学楼 他想要访问每栋教学楼正好
  • python实现onvif客户端及问题小结

    python实现onvif客户端及问题小结 文章目录 python实现onvif客户端及问题小结 1 前言 2 python onvif安装及ptz示例 2 1 openwrt下安装pip及python onvif 2 2 ptz示例 3