ONVIF Изменение разрешения снимка камеры (getSnaphotUri)

Я использую python-onvif, чтобы найти URI моей камеры и получить статический снимок. И работает нормально, снимок могу.

Но разрешение не на «полных» 720, которые может показать моя камера. И действительно получается при потоковой передаче. Снимок только как 640x352 или что-то в этом роде.

Как я могу указать ONVIF сделать снимок с полным разрешением?

Я попытался создать URI с помощью getSnapshotUri (token) и вставить токен основного профиля с наивысшим разрешением, но я получил тот же URI и такое же разрешение.

Есть ли способ получить снимок с полным разрешением?

В документации говорится, что он будет использовать настройки jpeg «из профиля», но я не могу понять, как указать ему, какой профиль или какие настройки разрешения использовать.

Я не уверен, что код действительно нужен в этом случае, но я все равно делаю вот что. В случае, если это кому-то поможет

 from onvif import ONVIFCamera

 # Set up the camera object using the ONVIF port.
 mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass', '/etc/onvif/wsdl/')


 #access media service
 media = mycam.create_media_service()                

 allProfiles = media.GetProfiles()
 mainProfile = media.GetProfile({'ProfileToken' : allProfiles[0]._token})

 snapshot = media.GetSnapshotUri({'ProfileToken' : mainProfile._token})

 print 'My Cam: ' + str(snapshot)

***** Обновление 20160412

Вот еще некоторая информация по запросу.

Я запустил следующее

for p in media.GetVideoEncoderConfigurations():
    print p

И я получил следующую распечатку, которая была длинной, поэтому я положил ее в пастебин.

http://pastebin.com/Wfe4CPLy

О JPEG ничего не известно. Разрешение H264 есть, поэтому я знаю, что камера может снимать видео с более высоким разрешением. Но у getnapshot uri по-прежнему только более низкое разрешение.


person Nertskull    schedule 01.04.2016    source источник


Ответы (1)


Разрешение снимка настраивается видеокодером JPEG.
В media.wsdl встроенной документации написано:

GetSnapshotUri
Описание. Клиент использует команду GetSnapshotUri для получения снимка в формате JPEG с устройства. [...]. URI может использоваться для получения изображения JPEG с помощью операции HTTP GET. Кодирование изображения всегда будет JPEG независимо от настройки кодировки в профиле мультимедиа. При необходимости настройки Jpeg (например, разрешение или качество) можно взять из профиля. Предоставленное изображение будет обновляться автоматически и независимо от вызовов GetSnapshotUri.

Чтобы изменить разрешение кодировщика JPEG, вы можете поступить следующим образом:

from onvif import ONVIFCamera

# Set up the camera object using the ONVIF port.
mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass')

#access media service
media = mycam.create_media_service()                

# iterate on encoder configurations
for p in media.GetVideoEncoderConfigurations():
    if p.Encoding == "JPEG":
        print 'JPEG Encoder:' + p._token

        # get encoder options    
        options = media.GetVideoEncoderConfigurationOptions({'ConfigurationToken':p._token})
        print options.JPEG.ResolutionsAvailable

        # get encoder configuration
        cfg = media.GetVideoEncoderConfiguration({'ConfigurationToken':p._token})

        # select the resolution  
        cfg.Resolution = options.JPEG.ResolutionsAvailable[0]

        # update the encoder configuration
        request = media.create_type('SetVideoEncoderConfiguration')
        request.Configuration = cfg
        request.ForcePersistence = True
        media.SetVideoEncoderConfiguration(request)

В зависимости от возможностей камеры некоторая комбинация конфигураций кодировщиков может быть невозможна.

person mpromonet    schedule 07.04.2016
comment
Когда я выполняю цикл for, p.Encoding всегда возвращает H264 и никогда не имеет JPEG. Означает ли это, что у этой дешевой камеры нет кодировщика JPEG? «H264» поддерживает разрешение 1280x720, так что я чувствую, что каким-то образом смогу получить JPEG с полным разрешением. Но p.Encoding never == 'JPEG' и ничего не делает. - person Nertskull; 12.04.2016
comment
Я не знаю, почему форум ONVIF не добавил аргумент разрешения в GetSnaptshotUri? Это кажется естественным способом попросить конкретное разрешение. Кстати, есть ли в конфигурации кодировщика H264 какие-то опции JPEG? - person mpromonet; 12.04.2016
comment
Я обновил свой вопрос, указав все параметры кодировщика. Но в основном нет, я нигде не вижу вариантов JPEG. - person Nertskull; 12.04.2016
comment
Мне было интересно, возвращает ли GetVideoEncoderConfigurationOptions некоторые разрешения JPEG (включая разрешение 640x352, которое вы получаете). - person mpromonet; 13.04.2016