Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *******script py*******
- 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.11.13', 80, 'admin', 'Supervisor')
- # 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 left
- move_down(ptz, request)
- cam = ONVIFCamera('192.168.1.110', 80, 'admin', 'Supervisor')
- media_service = cam.create_media_service()
- #anlytics = cam.create_analytics_service()
- ptz = cam.create_ptz_service()
- profile = media_service.GetProfiles()[0]
- token = profile._token
- tourtoken = "0"
- request = ptz.GetStatus({'ProfileToken': profile._token})
- print(request)
- #continuous_move()
- ***ptz.py***
- 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.11.42', 80, 'admin', 'Supervisor')
- # 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()
- ******discovery.py*******
- import subprocess
- import WSDiscovery
- from onvif import ONVIFCamera
- def ws_discovery(scope=None):
- """List of IPs found in network"""
- lst = list()
- if (scope == None):
- cmd = 'hostname -I'
- scope = subprocess.check_output(cmd, shell=True).decode('utf-8')
- wsd = WSDiscovery.WSDiscovery()
- wsd.start()
- ret = wsd.searchServices()
- for service in ret:
- get_ip = str(service.getXAddrs())
- get_types = str(service.getTypes())
- for ip_scope in scope.split():
- result = get_ip.find(ip_scope.split('.')[0] + '.' + ip_scope.split('.')[1])
- if result > 0 and get_types.find('onvif') > 0:
- string_result = get_ip[result:result + 13]
- string_result = string_result.split('/')[0]
- lst.append(string_result)
- wsd.stop()
- lst.sort()
- return lst
- class CameraONVIF:
- def __init__(self, _ip, _user, _password):
- self.cam_ip = _ip
- self.cam_user = _user
- self.cam_password = _password
- def camera_start(self):
- mycam = ONVIFCamera(self.cam_ip, 80, self.cam_user, self.cam_password, no_cache=True)
- media = mycam.create_media_service()
- media_profile = media.GetProfiles()[0]
- self.mycam = mycam
- self.camera_media = media
- self.camera_media_profile = media_profile
- def get_hostname(self):
- response = self.mycam.devicemgmt.GetHostname()
- print response.Name
- def get_device_information(self):
- response = self.mycam.devicemgmt.GetDeviceInformation()
- print response
- print("Starting WS-Discovery")
- cam = ws_discovery()
- for ip in cam:
- print ip
- camera = CameraONVIF('192.168.11.34', 'admin', 'Supervisor')
- camera.camera_start()
- print camera.get_device_information()
- def get_resolutions_available(self):
- request = self.camera_media.create_type('GetVideoEncoderConfigurationOptions')
- request.ProfileToken = self.camera_media_profile.token
- config = self.camera_media.GetVideoEncoderConfigurationOptions(request)
- return [(res.Width, res.Height) for res in config.H264.ResolutionsAvailable]
- def get_frame_rate_range(self):
- request = self.camera_media.create_type('GetVideoEncoderConfigurationOptions')
- request.ProfileToken = self.camera_media_profile.token
- config = self.camera_media.GetVideoEncoderConfigurationOptions(request)
- return config.H264.FrameRateRange.Min, config.H264.FrameRateRange.Max
- def get_date(self):
- datetime = self.mycam.devicemgmt.GetSystemDateAndTime()
- return datetime.UTCDateTime.Date
- def get_time(self):
- datetime = self.mycam.devicemgmt.GetSystemDateAndTime()
- return datetime.UTCDateTime.Time
- def is_ptz(self):
- response = self.mycam.devicemgmt.GetCapabilities()
- return bool(response.PTZ)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement