def __init__ \ ( self, host, port = constants.DEFAULT_PORT, username = constants.DEFAULT_USERNAME, password = constants.DEFAULT_PASSWORD, ): """ Initialises super Initialises class attributes Default port: constants.DEFAULT_PORT Default username: constants.DEFAULT_USERNAME Default password: constants.DEFAULT_PASSWORD """ self._init_attrs() self.ONVIFCamera = onvif.ONVIFCamera(host, port, username, password) self.username = username self.password = password self.host = host self.port = port if constants.AUTO_BUILD: self.build() # There will be a time cost
def auto(ip, port): #Подключаемся к камере mycam = onvif.ONVIFCamera(ip, port, config.login, config.password, config.way) #Без кода ниже не работает def zeep_pythonvalue(self, xmlvalue): return xmlvalue zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue # Создаём сервис media media = mycam.create_media_service() # Получаем Media Profile media_profile = media.GetProfiles()[0] #Создаём сервис для работы с изображением image = mycam.create_imaging_service() #Формируем запрос, с помощью которого будем получатьтекущие параметры съёмки request_get = image.create_type('GetImagingSettings') request_get.VideoSourceToken = media_profile.VideoSourceConfiguration.SourceToken #Получаем текущие параметры съёмки image_settings = image.GetImagingSettings(request_get) # Создаём запрос, с помошью которого будем менять параметры съёмки request_set = copy.deepcopy(request_get) # Говорим камере, что мы сами корректировать цвет image_settings.WhiteBalance.Mode = 'MANUAL' request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) #Задаём настройки баланса белого image_settings.WhiteBalance.CrGain = 80 image_settings.WhiteBalance.CbGain = 40 request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set)
import cv2 from matplotlib import pyplot as plt import onvif import zeep import config import copy rtsp = 'rtsp://192.168.15.45:554/Streaming/Channels/1' # Подключаемся к камере mycam = onvif.ONVIFCamera(config.ip_42, config.port_42, config.login, config.password, config.way) # Без кода ниже не работает def zeep_pythonvalue(self, xmlvalue): return xmlvalue zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue # Создаём сервис media media = mycam.create_media_service() # Получаем Media Profile media_profile = media.GetProfiles()[0] # Создаём сервис для работы с изображением image = mycam.create_imaging_service() # Формируем запрос, с помощью которого будем получатьтекущие параметры съёмки request_get = image.create_type('GetImagingSettings')
def auto_2(): # Подключаемся к камере mycam = onvif.ONVIFCamera(config.ip_42, config.port_42, config.login, config.password, config.way) # Без кода ниже не работает def zeep_pythonvalue(self, xmlvalue): return xmlvalue zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue # Создаём сервис media media = mycam.create_media_service() # Получаем Media Profile media_profile = media.GetProfiles()[0] # Получаем кадр с видео cap = cv2.VideoCapture(rtsp_42) # Получаем из кадра изображение ret, img = cap.read() hist = plt.hist(img.ravel(), 256, [0, 256]) # Озвобождаем не нужную память cap.release() # Создаём сервис для работы с изображением image = mycam.create_imaging_service() # Формируем запрос, с помощью которого будем получатьтекущие параметры съёмки request_get = image.create_type('GetImagingSettings') request_get.VideoSourceToken = media_profile.VideoSourceConfiguration.SourceToken # Получаем текущие параметры съёмки image_settings = image.GetImagingSettings(request_get) print(image_settings) # Создаём запрос, с помошью которого будем менять параметры съёмки request_set = copy.deepcopy(request_get) # Говорим камере, что мы сами будем регулировать экспозицию и корректировать цвет image_settings.Exposure.Mode = 'MANUAL' image_settings.WhiteBalance.Mode = 'MANUAL' request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) gain = 0 # Задаём настройки баланса белого image_settings.WhiteBalance.CrGain = 80 image_settings.WhiteBalance.CrGain = 40 request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) # Создаём список значений, которые может принимать выдержка ex_time = [ 33.0, 100.0, 166.0, 285.0, 400.0, 571.0, 800.0, 1000.0, 1666.0, 2352.0, 3333.0, 4000.0, 4444.0, 5000.0, 5714.0, 6666.0, 8333.0, 10000.0, 13333.0, 20000.0, 40000.0 ] while (True): # Строим гистограмму полученного изображения cap = cv2.VideoCapture(rtsp_42) ret, frame = cap.read() cap.release() hist = plt.hist(frame.ravel(), 256, [0, 256]) plt.show() print(hist[0][128]) while ( hist[0][128] < 8000.0 ): # Проверяем, достаточно ли яркие полутона, если нет то идём дальше по услловию if (image_settings.Exposure.ExposureTime < 40000.0 ): # Проверяем, максимальное ли значение имеет выдержка # time += 2667 cur_ind = ex_time.index(image_settings.Exposure.ExposureTime) # image_settings.Exposure.ExposureTime = time # request_set.ImagingSettings = image_settings # image.SetImagingSettings(request_set) # image_settings = image.GetImagingSettings(request_get) if (ex_time[cur_ind] < 10000): image_settings.Exposure.ExposureTime = 10000 else: image_settings.Exposure.ExposureTime = ex_time[cur_ind + 1] request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) cap = cv2.VideoCapture(rtsp_42) ret, frame = cap.read() cap.release() hist = plt.hist(frame.ravel(), 256, [0, 256]) print('H', hist[0][128]) else: gain += 7 image_settings.Exposure.Gain = gain request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) cap = cv2.VideoCapture(rtsp_42) ret, frame = cap.read() cap.release() hist = plt.hist(frame.ravel(), 256, [0, 256]) print('H', hist[0][128]) while ( hist[0][128] > 80000.0 ): # Проверяем, достаточно ли яркие полутона, если нет то идём дальше по услловию if image_settings.Exposure.Gain > 0: gain -= 7 image_settings.Exposure.Gain = gain request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) cap = cv2.VideoCapture(rtsp_42) ret, frame = cap.read() cap.release() hist = plt.hist(frame.ravel(), 256, [0, 256]) print('D', hist[0][128]) else: # time -= 2667 cur_ind = ex_time.index(image_settings.Exposure.ExposureTime) # image_settings.Exposure.ExposureTime = time # request_set.ImagingSettings = image_settings # image.SetImagingSettings(request_set) # image_settings = image.GetImagingSettings(request_get) # print('D', hist[0][128]) image_settings.Exposure.ExposureTime = ex_time[cur_ind - 1] request_set.ImagingSettings = image_settings image.SetImagingSettings(request_set) image_settings = image.GetImagingSettings(request_get) cap = cv2.VideoCapture(rtsp_42) ret, frame = cap.read() cap.release() hist = plt.hist(frame.ravel(), 256, [0, 256])
def setup_cameras(): global cameras cameras = [] for camera_number, camera in enumerate(cameras_table.all()): try: camera_kwargs = {} if getattr(sys, 'frozen', False): camera_kwargs['wsdl_dir'] = f'{executable_path}wsdl' elif sys.platform == 'win32': camera_kwargs['wsdl_dir'] = 'C:\\Users\\ehigdon\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\\LocalCache\\local-packages\\Lib\\site-packages\\wsdl' camera_obj = onvif.ONVIFCamera( camera['ip'], camera['port'], camera['user_name'], camera['password'], **camera_kwargs ) camera_obj.name = camera['name'] camera_obj.preset_timeout = camera['preset_timeout'] try: camera_obj.midi_note = camera['midi_note'] except KeyError: camera_obj.midi_note = '0' camera_obj.camera_number = camera_number camera_obj.create_media_service() camera_obj.media_profile = camera_obj.media.GetProfiles()[0] request = camera_obj.media.create_type('GetStreamUri') request.ProfileToken = camera_obj.media_profile.token request.StreamSetup = { 'Stream': 'RTP-Unicast', 'Transport': { 'Protocol': 'HTTP' } } camera_obj.stream = camera_obj.media.GetStreamUri(request) camera_obj.create_ptz_service() camera_obj.presets = camera_obj.ptz.GetPresets({ 'ProfileToken': camera_obj.media_profile.token }) camera_obj.ptz_config_options = camera_obj.ptz.GetConfigurationOptions({ 'ConfigurationToken': camera_obj.media_profile.PTZConfiguration.token }) camera_obj.XMAX = camera_obj.ptz_config_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Max camera_obj.XMIN = camera_obj.ptz_config_options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Min camera_obj.YMAX = camera_obj.ptz_config_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Max camera_obj.YMIN = camera_obj.ptz_config_options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Min camera_obj.ZMAX = camera_obj.ptz_config_options.Spaces.ContinuousZoomVelocitySpace[0].XRange.Max camera_obj.ZMIN = camera_obj.ptz_config_options.Spaces.ContinuousZoomVelocitySpace[0].XRange.Min camera_obj.PTSPEED_MIN = camera_obj.ptz_config_options.Spaces.PanTiltSpeedSpace[0].XRange.Min camera_obj.PTSPEED_MAX = camera_obj.ptz_config_options.Spaces.PanTiltSpeedSpace[0].XRange.Max camera_obj.PTSPEED_RANGE = camera_obj.PTSPEED_MAX - camera_obj.PTSPEED_MIN camera_obj.ZSPEED_MIN = camera_obj.ptz_config_options.Spaces.ZoomSpeedSpace[0].XRange.Min camera_obj.ZSPEED_MAX = camera_obj.ptz_config_options.Spaces.ZoomSpeedSpace[0].XRange.Max camera_obj.ZSPEED_RANGE = camera_obj.ZSPEED_MAX - camera_obj.ZSPEED_MIN camera_obj.video_source_token = camera_obj.media_profile.VideoSourceConfiguration.SourceToken camera_obj.create_imaging_service() camera_obj.move_options = camera_obj.imaging.GetMoveOptions({ 'VideoSourceToken': camera_obj.video_source_token }) camera_obj.FMIN = camera_obj.move_options.Continuous.Speed.Min camera_obj.FMAX = camera_obj.move_options.Continuous.Speed.Max cameras.append(camera_obj) except onvif.exceptions.ONVIFError as e: print(type(e), e) pass return cameras