示例#1
0
    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
示例#2
0
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)
示例#3
0
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')
示例#4
0
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])
示例#5
0
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