onvif摄像机的python客户端

onvif-py3的Python项目详细描述


python中的onvif客户端实现

在vif上安装python

来自源

您应该克隆此存储库并运行setup.py:

cd python-onvif && python setup.py install

来自pypi

pip install onvif-py3

开始

初始化onvifcamera实例

from onvif import ONVIFCamera
mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd', '/etc/onvif/wsdl/')

现在,onvifcamera实例可用。默认情况下,如果一切正常,设备GMT服务也可用。

因此,wsdl文档中定义的所有操作:

/etc/onvif/wsdl/devicemgmt.wsdl

有空。

从您的相机获取信息

# Get Hostname
resp = mycam.devicemgmt.GetHostname()
print 'My camera`s hostname: ' + str(resp.Name)

# Get system date and time
dt = mycam.devicemgmt.GetSystemDateAndTime()
tz = dt.TimeZone
year = dt.UTCDateTime.Date.Year
hour = dt.UTCDateTime.Time.Hour

配置(控制)您的相机

要配置相机,有两种方法可以将参数传递给服务方法。

dict

这是更简单的方法:

params = {'Name': 'NewHostName'}
device_service.SetHostname(params)

类型实例

这是推荐的方法。类型实例将引发 如果设置无效(或不存在)参数,则为例外。

params = mycam.devicemgmt.create_type('SetHostname')
params.Hostname = 'NewHostName'
mycam.devicemgmt.SetHostname(params)

time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
time_params.DateTimeType = 'Manual'
time_params.DaylightSavings = True
time_params.TimeZone = 'CST-8:00:00'
time_params.UTCDateTime.Date.Year = 2014
time_params.UTCDateTime.Date.Month = 12
time_params.UTCDateTime.Date.Day = 3
time_params.UTCDateTime.Time.Hour = 9
time_params.UTCDateTime.Time.Minute = 36
time_params.UTCDateTime.Time.Second = 11
mycam.devicemgmt.SetSystemDateAndTime(time_params)

使用其他服务

onvif协议定义了许多服务。 您可以找到所有的服务和操作here。 onvifcamera有创建新服务的支持方法:

# Create ptz service
ptz_service = mycam.create_ptz_service()
# Get ptz configuration
mycam.ptz.GetConfiguration()
# Another way
# ptz_service.GetConfiguration()

或创建非官方服务:

xaddr = 'http://192.168.0.3:8888/onvif/yourservice'
yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')
yourservice.SomeOperation()
# Another way
# mycam.yourservice.SomeOperation()

onvif cli

python onvif还提供了一个命令行交互界面:onvif cli。 自动安装onvif cli。

单个命令示例

$ onvif-cli devicemgmt GetHostname --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {'FromDHCP': True, 'Name': hision}
$ onvif-cli devicemgmt SetHostname "{'Name': 'NewerHostname'}" --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {}

交互模式

$ onvif-cli -u 'admin' -a '12345' --host '192.168.0.112' --port 80 --wsdl /etc/onvif/wsdl/
ONVIF >>> cmd
analytics   devicemgmt  events      imaging     media       ptz
ONVIF >>> cmd devicemgmt GetWsdlUrl
True: http://www.onvif.org/
ONVIF >>> cmd devicemgmt SetHostname {'Name': 'NewHostname'}
ONVIF >>> cmd devicemgmt GetHostname
True: {'Name': 'NewHostName'}
ONVIF >>> cmd devicemgmt SomeOperation
False: No Operation: SomeOperation

注意:交互模式支持制表符完成。

批处理模式

$ vim batchcmds
$ cat batchcmds
cmd devicemgmt GetWsdlUrl
cmd devicemgmt SetHostname {'Name': 'NewHostname', 'FromDHCP': True}
cmd devicemgmt GetHostname
$ onvif-cli --host 192.168.0.112 -u admin -a 12345 -w /etc/onvif/wsdl/ < batchcmds
ONVIF >>> True: http://www.onvif.org/
ONVIF >>> True: {}
ONVIF >>> True: {'FromDHCP': False, 'Name': NewHostname}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
哦,我需要在这里重建Java吗?   java在按键后做一些事情(但需要等待一点)   java迭代ArrayList的泛型类型<User>   Android Studio和WebStorm之间的java语言级别不一致   java如何在复杂模型中使用@valid注释   Java字符串初始化为基元类型   java外键级联删除在OpenJPA/Postgresql中未按预期工作   java运行时堆分析;匹配模式的字符串何时初始化   java Selenium webdriver我无法将webdriver设置为Firefox I   java服务器发送事件(SSE)和Jetty(编程设置)   linux java。lang.NullPointerException和返回代码   OpenGL VBO多维数据集未正确渲染(Java、LWJGL)   java JavaFX如何将图形“裁剪”到按钮   java数据库插入未向表中添加数据   java在字符串数组中添加数字   在java中识别一串字符串中的编号系统/序列/模式