pythononvif控制云台移动

tech2025-05-16  12

本文简单介绍一下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})
最新回复(0)