相关文章推荐
长情的充电器  ·  MySQL :: MySQL 8.4 ...·  4 周前    · 
风流的春卷  ·  SAS常用函数 - 简书·  1 年前    · 

我就职与在海康附近的一家中小型公司,所以公司业务也和海康产品摄像头做相关业务,所以需要调动控制摄像头,在python代码发现onvif协议可以操作,亲测后记笔录一张

ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。2008年11月,论坛正式发布了ONVIF第一版规范——ONVIF核心规范1.0。随着视频监控的网络化应用,产业链的分工将越来越细。有些厂商专门做摄像头,有些厂商专门做DVS,有些厂商则可能专门做平台等,然后通过集成商进行集成,提供给最终客户。这种产业合作模式,已经迫切的需要行业提供越来越标准化的接口平台。

1 安装python-onvif

1.1 pip安装

python官方已经提供了onvif包的安装,因此可直接通过pip来安装,如下

pip install --upgrade onvif_zeep

要注意这里pip必须对应python3以上版本

1.2 源码安装

git clone https://github.com/FalkTannhaeuser/python-onvif-zeep.git
cd python-onvif-zeep
python setup.py install
pip3 install --upgrade onvif_zeep

1.3使用规则

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})  # 获取所有预置点,返回值:list
        return presets
    def goto_preset(self, presets_token: int):
        移动到指定预置点
        :param presets_token: 目的位置的token,获取预置点返回值中
        :return:
        try:
            # self.ptz.GotoPreset(
            #     {'ProfileToken': self.media_profile.token, "PresetToken": presets_token})  # 移动到指定预置点位置
            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)
        # print(res)
        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助手: 非常感谢博主的辛勤创作,这篇博客对于想要获取内部信息的人来说非常有帮助。博主的讲解非常清晰详细,让人一下子就能理解并应用到实际中去。希望博主能够再接再厉,分享更多的知识和经验,让更多的读者受益。感谢博主的付出,期待更多精彩内容。 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 python定时启动程序方法 冷^ω^情: 好像你少了一个datetime模块 vue3动态路由刷新后空白或者404 你按我写的简单写个demo看下哪有问题,我这都是实操后的,可能你没做好浏览器缓存 vue3动态路由刷新后空白或者404 是和我的一样么,需要在app.vue上将菜单保存在缓存中,