跳转到主要内容

ONVIF摄像头的异步Python客户端

项目描述

Python 3的ONVIF客户端实现

依赖关系

zeep[async] >= 4.1.0, < 5.0.0 httpx >= 0.19.0, < 1.0.0

安装python-onvif-zeep-async

从源代码安装

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

cd python-onvif-zeep-async && python setup.py install

或者,您可以运行

pip install --upgrade onvif-zeep-async

入门指南

初始化ONVIFCamera实例

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

现在,一个ONVIFCamera实例已经可用。如果一切正常,默认情况下,devicemgmt服务也是可用的。

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

/etc/onvif/wsdl/devicemgmt.wsdl

都是可用的。

从您的摄像机获取信息

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

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

配置(控制)您的摄像机

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

字典

这是更简单的方法

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

类型实例

这是推荐的方法。类型实例将在设置无效(或不存在)的参数时引发异常。

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

time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
time_params.DateTimeType = 'Manual'
time_params.DaylightSavings = True
time_params.TimeZone.TZ = '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
await mycam.devicemgmt.SetSystemDateAndTime(time_params)

使用其他服务

ONVIF协议已定义了许多服务。您可以在此处找到所有服务和操作。ONVIFCamera支持创建新服务的方法

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

或创建非官方服务

xaddr = 'http://192.168.0.3:8888/onvif/yourservice'
yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')
await yourservice.SomeOperation()
# Another way
# await 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

注意:交互模式支持Tab补全。

批处理模式

$ 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}

参考资料

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

onvif-zeep-async-3.1.12.tar.gz (180.2 kB 查看哈希值)

上传时间

构建分发

onvif_zeep_async-3.1.12-py2.py3-none-any.whl (198.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者