运行前应检测摄像头是否开启onvif协议,并添加添加用户

import time
import zeep
import requests
from onvif import ONVIFCamera
from requests.auth import HTTPDigestAuthdef zeep_pythonvalue(self, xmlvalue):return xmlvalue# ########################## Move Camera ##########################
class CameraZoom:def __init__(self, ip="172.22.49.9", port=80, username="abcd", password="123456"):mycam = ONVIFCamera(ip, port, username, password)mycam.devicemgmt.GetServices(False)media = mycam.create_media_service()        # Create media service objectself.ptz = mycam.create_ptz_service()            # Create self.ptz service object# Get target profilezeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemedia_profile = media.GetProfiles()[0]self.ptz.Stop({'ProfileToken': media_profile.token})# Get PTZ configuration options for getting continuous move rangeconfig = self.ptz.create_type('GetConfigurationOptions')config.ConfigurationToken = media_profile.PTZConfiguration.tokenptz_configuration_options = self.ptz.GetConfigurationOptions(config)# RelativeMoveself.requestr = self.ptz.create_type('RelativeMove')self.requestr.ProfileToken = media_profile.tokenif self.requestr.Translation is None:self.requestr.Translation = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Positionself.requestr.Translation.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URIself.requestr.Translation.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URIif self.requestr.Speed is None:self.requestr.Speed = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Positionself.requestr.Speed.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URIself.requestr.Speed.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URI# AbsoluteMoveself.requesta = self.ptz.create_type('AbsoluteMove')self.requesta.ProfileToken = media_profile.tokenif self.requesta.Position is None:self.requesta.Position = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Positionself.requesta.Position.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URIself.requesta.Position.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URIif self.requesta.Speed is None:self.requesta.Speed = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Positionself.requesta.Speed.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URIself.requesta.Speed.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URI# CurrentStatusparams = self.ptz.create_type('GetStatus')params.ProfileToken = media_profile.tokenself.res = self.ptz.GetStatus(params)# variablesself.default = Falseself.defaultx = Noneself.defaulty = Noneself.defaultzoom = Noneself.x_speed = 3self.y_speed = 3self.zoom_speed = 3self.zoomflag = 0def addFlag(self):self.zoomflag += 1def preformRelativeMove(self, xshift, yshift, zoom):# record origin positionif self.default is False:# set defaultcx, cy, cz = self.getCurrentStatus()self.default = Trueself.defaultx = cxself.defaulty = cyself.defaultzoom = cz# RelativeMoveself.requestr.Translation.PanTilt.x = xshiftself.requestr.Speed.PanTilt.x = self.x_speedself.requestr.Translation.PanTilt.y = yshiftself.requestr.Speed.PanTilt.y = self.y_speedself.requestr.Translation.Zoom = zoomself.requestr.Speed.Zoom = self.zoom_speedself.ptz.RelativeMove(self.requestr)print('finish relative_move')def preformAbsoluteMove(self):# AbsoluteMoveif self.default is True:self.requesta.Position.PanTilt.x = self.defaultxself.requesta.Speed.PanTilt.x = self.x_speedself.requesta.Position.PanTilt.y = self.defaultyself.requesta.Speed.PanTilt.y = self.y_speedself.requesta.Position.Zoom = self.defaultzoomself.requesta.Speed.Zoom = self.zoom_speedself.ptz.AbsoluteMove(self.requesta)print('finish absolute_move')else:print('default is False, do not perform absolute move')# resetself.default = Falseself.defaultx = Noneself.defaulty = Noneself.defaultzoom = Noneself.zoomflag = 0def getCurrentStatus(self):#获取当前位置信息pantilt = self.res['Position']['PanTilt']zoom = self.res['Position']['Zoom']cx = pantilt['x']cy = pantilt['y']cz = zoom['x']return (cx, cy, cz)

测试脚本

from camera_zoom import CameraZoomcam = CameraZoom()for i in range(100):num = int(input("2:down, 4:left, 8:up, 6:right, 1:enlarge, 3:shrink -> "))if num == 2:cam.preformRelativeMove(0, -0.04, 0)elif num == 4:cam.preformRelativeMove(-0.04, 0, 0)elif num == 6:cam.preformRelativeMove(0.04, 0, 0)elif num == 8:cam.preformRelativeMove(0, 0.04, 0)elif num == 1:cam.preformRelativeMove(0, 0, 0.02)elif num == 3:cam.preformRelativeMove(0, 0, -0.02)else:break

其他相关代码

import time
from onvif import ONVIFCamera
import zeep
import requests
from requests.auth import HTTPDigestAuthdef zeep_pythonvalue(self, xmlvalue):return xmlvaluedef continuous_move():x = 0#0.001                   # 360 : (left)-1 ~ +1(right)y = -0.004                   # 180 : (up)-1 ~ +1(down)zoom = 0#0.02                      # (min)0 ~ 1(max)mycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")# Create media service objectmedia = mycam.create_media_service()# Create ptz service objectptz = mycam.create_ptz_service()# Get target profilezeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemedia_profile = media.GetProfiles()[0]# Get PTZ configuration options for getting continuous move rangeconfig = ptz.create_type('GetConfigurationOptions')config.ConfigurationToken = media_profile.PTZConfiguration.tokenptz_configuration_options = ptz.GetConfigurationOptions(config)request = self.ptz.create_type('ContinuousMove')request.ProfileToken = media_profile.tokenptz.Stop({'ProfileToken': media_profile.token})if request.Velocity is None:request.Velocity = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Positionrequest.Velocity.PanTilt.space = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].URIrequest.Velocity.Zoom.space = ptz_configuration_options.Spaces.ContinuousZoomVelocitySpace[0].URI#持续移动request.Velocity.PanTilt.x = xrequest.Velocity.PanTilt.y = yrequest.Velocity.Zoom = zoomptz.ContinuousMove(request)time.sleep(timeout)ptz.Stop({'ProfileToken': request.ProfileToken})print('finish continuous_move')def relative_move():x = 0#0.004                   # 360 : (left)-1 ~ +1(right)x_speed = 1y = 0.004                   # 180 : (up)-1 ~ +1(down)y_speed = 1zoom = 0#0.02                      # (min)0 ~ 1(max)zoom_speed = 1mycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")# Create media service objectmedia = mycam.create_media_service()# Create ptz service objectptz = mycam.create_ptz_service()# Get target profilezeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemedia_profile = media.GetProfiles()[0]# Get PTZ configuration options for getting continuous move rangeconfig = ptz.create_type('GetConfigurationOptions')config.ConfigurationToken = media_profile.PTZConfiguration.tokenptz_configuration_options = ptz.GetConfigurationOptions(config)requestr = ptz.create_type('RelativeMove')requestr.ProfileToken = media_profile.tokenptz.Stop({'ProfileToken': media_profile.token})if requestr.Translation is None:requestr.Translation = ptz.GetStatus({'ProfileToken': media_profile.token}).Positionrequestr.Translation.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URIrequestr.Translation.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URIif requestr.Speed is None:requestr.Speed = ptz.GetStatus({'ProfileToken': media_profile.token}).Positionrequestr.Speed.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URIrequestr.Speed.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URI#相对移动requestr.Translation.PanTilt.x = xrequestr.Speed.PanTilt.x = x_speedrequestr.Translation.PanTilt.y = yrequestr.Speed.PanTilt.y = y_speedrequestr.Translation.Zoom = zoomrequestr.Speed.Zoom = zoom_speedptz.RelativeMove(requestr)print('finish relative_move')#坐标跳转
def absolute_move():x = -0.415                    # 360 : (left)-1 ~ +1(right)x_speed = 2y = -0.374                   # 180 : (up)-1 ~ +1(down)y_speed = 2zoom = 0.4                      # (min)0 ~ 1(max)zoom_speed = 1mycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")# Create media service objectmedia = mycam.create_media_service()# Create ptz service objectptz = mycam.create_ptz_service()# Get target profilezeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemedia_profile = media.GetProfiles()[0]# Get PTZ configuration options for getting continuous move rangeconfig = ptz.create_type('GetConfigurationOptions')config.ConfigurationToken = media_profile.PTZConfiguration.tokenptz_configuration_options = ptz.GetConfigurationOptions(config)request = ptz.create_type('AbsoluteMove')request.ProfileToken = media_profile.tokenptz.Stop({'ProfileToken': media_profile.token})if request.Position is None:request.Position = ptz.GetStatus({'ProfileToken': media_profile.token}).Positionrequest.Position.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URIrequest.Position.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URIif request.Speed is None:request.Speed = ptz.GetStatus({'ProfileToken': media_profile.token}).Positionrequest.Speed.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URIrequest.Speed.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URIrequest.Position.PanTilt.x = xrequest.Speed.PanTilt.x = x_speedrequest.Position.PanTilt.y = yrequest.Speed.PanTilt.y = y_speedrequest.Position.Zoom = zoomrequest.Speed.Zoom = zoom_speedptz.AbsoluteMove(request)print('finish absolute_move')#抓图
def snap():# Get target profilezeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")media = mycam.create_media_service()  # 创建媒体服务media_profile = media.GetProfiles()[0]  # 获取配置信息res = media.GetSnapshotUri({'ProfileToken': media_profile.token})response = requests.get(res.Uri, auth=HTTPDigestAuth("zhy", "zhy12345"))res = "{_time}.jpg".format(_time=time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime(time.time())))with open(res, 'wb') as f:  # 保存截图f.write(response.content)#预置位跳转
def gotoPreset():zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")media = mycam.create_media_service()ptz = mycam.create_ptz_service()params = ptz.create_type('GotoPreset')media_profile = media.GetProfiles()[0]  # 获取配置信息print(media_profile.token)params.ProfileToken = media_profile.tokenparams.PresetToken = 1re = ptz.GotoPreset(params)print(re)#获取当前位置信息
def getStatus():mycam = ONVIFCamera("172.22.49.9", 80, "abcd", "wl123456")media = mycam.create_media_service()ptz = mycam.create_ptz_service()zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvaluemedia_profile = media.GetProfiles()[0]  # 获取配置信息params = ptz.create_type('GetStatus')print(f"media_profile.token is {media_profile.token}")params.ProfileToken = media_profile.tokenres = ptz.GetStatus(params)print(f"res is {res}")if __name__ == '__main__':
#    absolute_move()
#    snap()
#    gotoPreset()relative_move()getStatus()

使用ONVIF协议控制海康威视球机相关推荐

  1. golang通过onvif协议控制云台

    golang通过onvif协议控制云台 onvif协议 推荐使用github三方库 代码示例 onvif协议 协议详情参考onvif官网, 本文章只是go通过onvif协议控制云台 推荐使用githu ...

  2. 基于AIS数据坐标联动海康威视球机进行船舶动态跟踪

    通过AIS串解码得出AIS经纬度坐标,随后转换成海康威视/大华球机坐标进行联合跟踪目标 该船舶的AIS轨迹: 效果视频:点我观看效果

  3. LiveNVR中使用Onvif协议控制预置位

    LiveNVR支持预置位控制,包括转到指定预置位,设置指定预置位,删除指定预置位 预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便 之前我们说过如何用Onvif协议进行设备的发现, ...

  4. 海康威视球机 SDK 实现画面预览和基本转向控制(Linux)

    一.下载官方sdk 使用版本 CH-HCNetSDKV6.1.9.4_build20220413_linux64 ubuntu 18.04 QT5 二.搭建环境 根据动态库加载文档进行设置 三.运行效 ...

  5. 【其他】松下球机配置以及PELCO-P云台控制协议

    上学期尝试用串口来直接控制松下的球机,具体型号记不清了,长得跟下面的图片差不多.总结一下配置松下球机为串口控制模式的方法以及使用PELCO-P进行云台控制的协议. 松下球机配置 Step1: 4位DI ...

  6. 结合实战,浅析GB/T28181(七)—— 球机云台控制

    1 简介说明 28181设备控制包括球机/云台控制.录像控制.报警布放/撤防及复位.设备配置等类型,本节主要介绍球机/云台控制流程.协议规定,及实战对接时碰到的常见问题和排查思路. 依据规范定义,球机 ...

  7. java 使用onvif协议 PTZ 登录认证,获取摄像头位置, 控制摄像头转动,digest认证,拍照截图

    1. 介绍 前面公司做摄像头相关的项目,一开始使用的海康威视提供的相关接口来控制摄像头转动,获取位置等,后面发现由于大华的很多摄像头使用该接口却行不通,后面所以就转用通用的 onvif 协议来做相关的 ...

  8. android studio集成onvif协议的网络摄像头

    android版本的onvif及rtsp协议基本使用介绍 onvif协议实现源码 rtsp源码 Onvif协议基本介绍 1.搜索可用的设备 2.获取摄像头信息 3.获取摄像头截图 4.其他功能不一一介 ...

  9. Onvif协议客户端开发(8)--球机云台的控制

    球机的云台控制 一.介绍 在安防摄像头中,不仅仅涉及到固定摄像头的枪击,同样还包含可以360°转动的球机.因此对球机的云台方向控制是Onvif协议开发过程中必不可少的过程 球机的云台控制主要包含:八个 ...

最新文章

  1. 有哪些适合放在程序员办公桌上的高逼格物件?哈哈哈哈哈哈哈!
  2. SpringBoot(十二):springboot如何测试打包部署
  3. python详细安装教程 path-Python解释器安装教程以及环境变量配置
  4. python3 “from PIL import...“报错
  5. 回调函数 相当于线程_Java中的回调机制,这篇给你整的明明白白的
  6. Linux 每日一练习!!反单引号·(键盘上数字1左边)··
  7. RHEL5 基于虚拟用户验证的VSFTP服务器
  8. 一个关于C++ Inline关键字的引发的一个错误
  9. 年轻人“躺平”的生活方式,引起不少争议
  10. 第11章 Tkinter 概述
  11. python写ppt_python可以写PPT吗
  12. DSP ADC模数转换
  13. 网络安全建设网络可用性管理方法
  14. BUUCTF 荷兰宽带数据泄露
  15. 矩阵行列式引理 Matrix Determinant Lemma
  16. 2017国庆假期学习总结
  17. C-kermit使用
  18. 编辑混合变形变形器(Blend Shape)
  19. 计算机服务用什么打开,bonjour是什么软件_在win7电脑中打开itunes程序却提示bonjour服务已被禁用怎么办?...
  20. 状压DP TSP不回到原点

热门文章

  1. 【MM模块】Invoice with Variances 差异
  2. 【MM模块】 External Services 外部服务
  3. ALV动态列Demo
  4. SAP快速找到定制配置
  5. 工作总结书写的意义及要求
  6. ABAP中的动态运算函数
  7. SAP自定义查询工具SQVI
  8. 计算机无法显示移动硬盘,移动硬盘在我的电脑中不显示了 怎么处理?
  9. Python教程:shift函数实现数据偏移的方法
  10. 【Python教程】 print 和return 的区别