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


文章目录

  • python实现onvif客户端及问题小结
    • 1. 前言
    • 2. python-onvif安装及ptz示例
      • 2.1 openwrt下安装pip及python-onvif
      • 2.2 ptz示例
    • 3. 使用时可能的错误

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 updateopkg install python2.7

安装pip:

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

安装python-onvif:

pip install onvif

2.2 ptz示例

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

from time import sleepfrom onvif import ONVIFCameraXMAX = 1
XMIN = -1
YMAX = 1
YMIN = -1def perform_move(ptz, request, timeout):# Start continuous moveptz.ContinuousMove(request)# Wait a certain timesleep(timeout)# Stop continuous moveptz.Stop({'ProfileToken': request.ProfileToken})def move_up(ptz, request, timeout=1):print 'move up...'request.Velocity.PanTilt._x = 0request.Velocity.PanTilt._y = YMAXperform_move(ptz, request, timeout)def move_down(ptz, request, timeout=1):print 'move down...'request.Velocity.PanTilt._x = 0request.Velocity.PanTilt._y = YMINperform_move(ptz, request, timeout)def move_right(ptz, request, timeout=1):print 'move right...'request.Velocity.PanTilt._x = XMAXrequest.Velocity.PanTilt._y = 0perform_move(ptz, request, timeout)def move_left(ptz, request, timeout=1):print 'move left...'request.Velocity.PanTilt._x = XMINrequest.Velocity.PanTilt._y = 0perform_move(ptz, request, timeout)def continuous_move():mycam = ONVIFCamera('192.168.0.112', 80, 'admin', '12345')# Create media service objectmedia = mycam.create_media_service()# Create ptz service objectptz = mycam.create_ptz_service()# Get target profilemedia_profile = media.GetProfiles()[0];# Get PTZ configuration options for getting continuous move rangerequest = ptz.create_type('GetConfigurationOptions')request.ConfigurationToken = media_profile.PTZConfiguration._tokenptz_configuration_options = ptz.GetConfigurationOptions(request)request = ptz.create_type('ContinuousMove')request.ProfileToken = media_profile._tokenptz.Stop({'ProfileToken': media_profile._token})# Get range of pan and tilt# NOTE: X and Y are velocity vectorglobal XMAX, XMIN, YMAX, YMINXMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.MaxXMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.MinYMAX = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.MaxYMIN = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Min# move rightmove_right(ptz, request)# move leftmove_left(ptz, request)# Move upmove_up(ptz, request)# move downmove_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/下:

python实现onvif客户端及问题小结相关推荐

  1. onvif学习笔记8:最近写的一个ONVIF客户端的心得小结

    最近,利用业余时间编写一个简单的ONVIF客户端MFC程序,这里记录一下过程. 语言选择 在之前调查过,有用QT实现的,有用python实现的,虽然正在学python,无奈才看了3天的书,没自信去搞. ...

  2. unicode 编码转换漏洞_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  3. python编写ftp客户端_用Python写FTP客户端程序

    0 前言: ftp客户端相信大家都用过,那么我们为什么还要用Python写ftp客户端呢? 我想有两个原因: 一是写出更好的ftp客户端应用程序,方便大家使用: 二是定制一些特殊服务,例如每天定时下载 ...

  4. python编码转换语句_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  5. php socket 握手,python Socket之客户端和服务端握手详细介绍

    这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...

  6. 基于Python的ModbusTCP客户端实现

    Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口.以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业 ...

  7. Requests 1.0 发布,Python 的 HTTP 客户端库

    Python 的 HTTP 客户端库 -- Requests 发布了 1.0 版本,该版本确定了最终的公共 API 方法. Requests 是一个 Python 的 HTTP 客户端库. 示例代码: ...

  8. Go语言实现Onvif客户端:9、预置点删改查及跳转

    Go语言实现Onvif客户端:9.预置点删改查及跳转 文章目录 Go语言实现Onvif客户端:9.预置点删改查及跳转 1.前言 2.代码 3.结果 1.前言 我们可以根据摄像头的所拍的位置设置预置点. ...

  9. ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    概要:   目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为开发者的你还在犹豫是否了解下吗?本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流 ...

  10. 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要:           目前ONVIF协议家族设备已占据数字监控行业 ...

最新文章

  1. 自动驾驶车路测法规出台,车辆需支持远程实时监控
  2. 关于 AppDelegate 、UIApplication 简单的用法
  3. fuse java_java中的Fuse文件系统 - JVM错误双重免费或损坏
  4. 为了OFFER,我加深学习队列,现在还一脸懵逼
  5. oracle能否生成mdb,oracle怎么导入.mdb文件
  6. flash和html5
  7. postgresql update使用别名_PostgreSQL逻辑复制之pglogical
  8. 如何打卡后缀为3ds的文件
  9. python判断某年是否为闰年的程序_Python 学习--从0到1(4. 题3)
  10. [Craftor整理]PCB设计参考和建议
  11. 使用Navicat为数据库表建立触发器
  12. 微软Tech·Ed与中国IT行业一同成长
  13. java语言程序设计基础篇课后答案_《Java语言程序设计:基础篇》课后复习题答案-第十五章.pdf...
  14. 作为Scala语法糖的设计模式
  15. 【Java愚公】gitlab关闭注册功能
  16. 【设计模式系列】--单例模式
  17. 10-不用加减乘除做加法
  18. 面对中小型机房动力环境该如何实现监控?
  19. squad战术小队steam服务器搭建教程。
  20. 解决标准“痛点” 京东联手公安部检测中心将推指纹锁电商标准

热门文章

  1. 达梦安装与基本使用【进阶】
  2. 个人笔记:C语言逻辑运算符
  3. 在App Store提交应用时,提示“app名称已被使用”
  4. 格力集团投资小米,或是对董明珠和格力电器的复仇
  5. php 中文网qq互联,QQ互联在tp中的运用
  6. [深度学习概念]·深度学习的人脸识别技术发展综述
  7. 【BP回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
  8. 我们试用了市面上几款微信自动化软件,哪家弱哪家强?
  9. C语言程序设计(十七)12.12
  10. 怎么用计算机求5次根号,学生用计算器上面5次根号怎么按?