我使用python-onvif查找我的相机的URI以获取静态快照。它工作正常,我可以得到快照。
但是决议并不是完整的' 720我的相机可以实现。流式传输时会得到。快照只有640x352或其他东西。
如何告诉ONVIF以全分辨率拍摄快照?
我尝试使用getSnapshotUri(令牌)生成URI并输入具有最高分辨率的主配置文件的令牌,但我得到相同的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
我得到以下打印出来的很长时间,所以我把它放在一个pastebin中。
没有关于JPEG的内容。有H264分辨率,所以我知道相机可以以更高的分辨率进行视频。但是,获取快照的uri仍然只有较低的分辨率。
答案 0 :(得分:0)
快照分辨率由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)
根据相机的容量,编码器配置之间的某些组合可能无法实现。
答案 1 :(得分:0)
您可以使用VLC python插件播放相机Feed。
它还提供了名为video_take_snapshot()
我确信,它会拍摄视频分辨率的快照,因此如果您通过onvif更改视频分辨率,vlc会自动调整这些更改。
从here
了解有关video_take_snapshot()的更多信息