python onvif 控制云台移动

本文讲述了如何在Python3.7环境下利用Onvif库实现对摄像头云台的控制,首先确保安装了onvif-zeep库,然后通过示例代码展示具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文简单介绍一下python37版本通过onvif协议控制摄像头云台移动。
首先准备环境,需要安装onvif-zeep
直接上代码

from onvif import ONVIFCamera
import zeep

def zeep_pythonvalue(self, xmlvalue):
    return xmlvalue
    
cameraConnection = ONVIFCamera("ip", "port", "username", "password")
media = cameraConnection.create_media_service()
# Create ptz service object
ptz = cameraConnection.create_ptz_service()
# Get target profile
zeep.xsd.simple.AnySimpleType.pythonvalue = self.zeep_pythonvalue
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 = self.ptz.create_type('ContinuousMove')
request.ProfileToken = media_profile.token
ptz.Stop({'ProfileToken': media_profile.token})
if request.Velocity is None:
    request.Velocity = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Position
    request.Velocity.PanTilt.space = ptz_configuration_options.Spaces.ContinuousPanTiltVelocitySpace[0].URI
    request.Velocity.Zoom.space = ptz_configuration_options.Spaces.ContinuousZoomVelocitySpace[0].URI
    requesta = self.ptz.create_type('AbsoluteMove')
requesta.ProfileToken = media_profile.token
    ptz.Stop({'ProfileToken': media_profile.token})
if requesta.Position is None:
    requesta.Position = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Position
    requesta.Position.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URI
    requesta.Position.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URI
if requesta.Speed is None:
    requesta.Speed = ptz.GetStatus({'ProfileToken': media_profile.token}).Position
    requesta.Speed.PanTilt.space = ptz_configuration_options.Spaces.AbsolutePanTiltPositionSpace[0].URI
    requesta.Speed.Zoom.space = ptz_configuration_options.Spaces.AbsoluteZoomPositionSpace[0].URI

requestr = self.ptz.create_type('RelativeMove')
requestr.ProfileToken = media_profile.token
ptz.Stop({'ProfileToken': media_profile.token})
if requestr.Translation is None:
    requestr.Translation = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Position
    requestr.Translation.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URI
    requestr.Translation.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URI
if requestr.Speed is None:
    requestr.Speed = self.ptz.GetStatus({'ProfileToken': media_profile.token}).Position
    requestr.Speed.PanTilt.space = ptz_configuration_options.Spaces.RelativePanTiltTranslationSpace[0].URI
    requestr.Speed.Zoom.space = ptz_configuration_options.Spaces.RelativeZoomTranslationSpace[0].URI
#绝对移动
requesta.Position.PanTilt.x = 0.1
requesta.Position.PanTilt.y = 0.1
requesta.Position.Zoom = 0          #取值范围在0~1之间
ptz.AbsoluteMove(requesta)
#相对移动
requestr.Translation.PanTilt.x = float(0.1)
requestr.Translation.PanTilt.y = float(-0.1)
requestr.Translation.Zoom = float(0.1)
requestr.Speed.PanTilt.x = 1
requestr.Speed.PanTilt.y = 1
requestr.Speed.Zoom = 1
ptz.RelativeMove(requestr)
#持续移动
request.Velocity.PanTilt.x = 0.1
request.Velocity.PanTilt.y = 0.1
request.Velocity.Zoom = 0
ptz.ContinuousMove(request) 
time.sleep(timeout)  
ptz.Stop({'ProfileToken': request.ProfileToken}) 
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值