我就职与在海康附近的一家中小型公司,所以公司业务也和海康产品摄像头做相关业务,所以需要调动控制摄像头,在python代码发现onvif协议可以操作,亲测后记笔录一张
ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。2008年11月,论坛正式发布了ONVIF第一版规范——ONVIF核心规范1.0。随着视频监控的网络化应用,产业链的分工将越来越细。有些厂商专门做摄像头,有些厂商专门做DVS,有些厂商则可能专门做平台等,然后通过集成商进行集成,提供给最终客户。这种产业合作模式,已经迫切的需要行业提供越来越标准化的接口平台。
python官方已经提供了onvif包的安装,因此可直接通过pip来安装,如下
pip install --upgrade onvif_zeep
要注意这里pip必须对应python3以上版本
git clone https://github.com/FalkTannhaeuser/python-onvif-zeep.git
cd python-onvif-zeep
python setup.py install
pip3 install --upgrade onvif_zeep
python API:https://pypi.org/project/onvif/
wsdl文档:http://www.onvif.org/onvif/ver20/util/operationIndex.html
import time
import requests
import zeep
from onvif import ONVIFCamera
from requests.auth import HTTPDigestAuth
def zeep_pythonvalue(self, xmlvalue):
return xmlvalue
class Onvif_hik(object):
def __init__(self, ip: str, username: str, password: str):
self.ip = ip
self.username = username
self.password = password
self.save_path = "./{}T{}.jpg".format(self.ip, str(time.time()))
self.content_cam()
def content_cam(self):
链接相机地址
:return:
try:
self.mycam = ONVIFCamera(self.ip, 80, self.username, self.password)
self.media = self.mycam.create_media_service()
zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue
self.media_profile = self.media.GetProfiles()[0]
self.ptz = self.mycam.create_ptz_service()
return True
except Exception as e:
return False
def Snapshot(self):
:return:
res = self.media.GetSnapshotUri({'ProfileToken': self.media_profile.token})
response = requests.get(res.Uri, auth=HTTPDigestAuth(self.username, self.password))
with open(self.save_path, 'wb') as f:
f.write(response.content)
def get_presets(self):
获取预置点列表
:return:预置点列表--所有的预置点
presets = self.ptz.GetPresets({'ProfileToken': self.media_profile.token})
return presets
def goto_preset(self, presets_token: int):
移动到指定预置点
:param presets_token: 目的位置的token,获取预置点返回值中
:return:
try:
params = self.ptz.create_type('GotoPreset')
params.ProfileToken = self.media_profile.token
params.PresetToken = presets_token
self.ptz.GotoPreset(params)
except Exception as e:
print(e)
def zoom(self, zoom: str, timeout: int = 1):
:param zoom: 1为拉近或-1为远离
:param timeout: 生效时间
:return:
request = self.ptz.create_type('ContinuousMove')
request.ProfileToken = self.media_profile.token
request.Velocity = {"Zoom": zoom}
self.ptz.ContinuousMove(request)
time.sleep(timeout)
self.ptz.Stop({'ProfileToken': request.ProfileToken})
def get_status(self):
获取当前预置点的信息
:return:
params = self.ptz.create_type('GetStatus')
params.ProfileToken = self.media_profile.token
res = self.ptz.GetStatus(params)
return res
if __name__ == '__main__':
o = Onvif_hik(ip="192.168.0.1", username="admin", password="password")
o.goto_preset(3)
注:海康摄像头需要查看配置是否支持onvif协议,帐号密码为添加的用户列表
使用zeep的Python中的ONVIF客户端
你好! 我将此文件推送到github,以便人们可以使用zeep向摄像机发送ONVIF命令的示例。
我必须下载和编辑wsdl文件-必须在底部添加wsdl:service部分。 由于我使用的是下载的wsdl文件,因此还必须更改schemaLocation文件顶部的相对地址。
首先,向摄像机发送WS-Discovery探针以获取摄像机的设备服务的URI。 是的,我知道它始终是ip_addr / onvif / device_service,但是我认为说我发送了一个探针听起来很酷:)
我向相机发送一个GetServices请求,以查看其支持的所有服务,然后获取媒体服务的URI。
我发送一个GetProfiles请求,让用户选择一个配置文件,然后发送GetStreamUri以获取所选配置文件的视频URI。
我使用Python
初始化ONVIFCamera实例
from onvif import ONVIFCamera
mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd', '/etc/onvif/wsdl/')
现在,ONVIFCamera实例可用。 默认情况下,如果一切正常,devicemgmt服务也将可用。
因此,WSDL文档中定义的所有操作:
/etc/onv
from camera_discovery import CameraDiscovery
camera_ip = CameraDiscovery.ws_discovery()
print(camera_ip)
成功的话会返回一个摄像头ip列表
不过笔者在使用过程中遇到了一个莫名其妙的问题erro 101 network is unreachable(网络不可达)可我ping的通网络,连接也没问题。查询
参考:https://github.com/quatanium/python-onvif
python3: https://github.com/FalkTannhaeuser/python-onvif-zeep
本文将介绍如何调用onvif协议的接口,来实现代码控制海康相机云台转动,查询的大多数代码是使用C++来实现,感觉有点复杂,本文直接采用python接口来实现。C版本的请查看《ONVIF系列——c++操控onvif(C版)》
1 安装python-onvif
1.1 pip安装
python官方已经
最近由于工作需要,需要用ONVIF来快速验证一个想法,发现在Python下验证还蛮方便的,但是也遇到了一些问题,在这里总结一下,如有有缘人看见,或许可以节约一些时间。
一、Python对接onvif的工具
二、Onvif快速用起来
三、使用原理简析
一、Python对接onvif的工具
使用python-onvif,但需要注意一点,不同python版本使用的python-onvif包是不一样的,不注意的话会安装失败。
Python 2....
最近新项目中要把一套现有的系统移植到华为Atlas终端上,因为现在这套系统里关于摄像头预置位跳转,抓图等功能是调用海康SDK实现的;但是Atlas终端是ARM平台的,海康的SDK是x86平台的,并没有提供ARM版本的,所以考虑使用onvif协议实现预置位跳转和抓图功能,这样就不用考虑平台差异了。
onvif接口说白了就是webservice接口的调用,各个语言也都提供了相关的类库,大致看了一下C...
python实现onvif客户端及问题小结
文章目录python实现onvif客户端及问题小结1. 前言2. python-onvif安装及ptz示例2.1 openwrt下安装pip及python-onvif2.2 ptz示例3. 使用时可能的错误
1. 前言
原本一直使用的go方式进行摄像头的搜索、改网络地址、获取media、ptz以及preset等,但是目前测试go的库在部分摄像头上无法正常ptz,于是在分析c/c++的库和python的库后,暂时打算测试一下python的库,使用python在pi
参考:https://github.com/quatanium/python-onvif
在《海康相机之onvif测试工具使用》这篇文章中,介绍了利用onvif测试工具来调试海康相机,并且介绍了如何配置海康相机。
本文将介绍如何调用onvif协议的接口,来实现代码控制海康相机云台转动,查询的大多数代码是使用C++来实现,感觉有点复杂,本文直接采用python接口来实现。C版本的请查看《ONVI...
CSDN-Ada助手:
python定时启动程序方法
冷^ω^情:
vue3动态路由刷新后空白或者404
vue3动态路由刷新后空白或者404