将相机角度调整到预置点

要点:

重点参考项目:Onvif(Python)将相机调整到预置点

参考项目:Python3-onvif协议之相机获取预置点、移动到预置点 


一 定义调整相机到预置点

from onvif import ONVIFCamera  # 导入ONVIFCamera模块
import zeep  # 导入zeep模块
import time  # 导入time模块
import requests  # 导入requests模块
from requests.auth import HTTPDigestAuth  # 导入HTTPDigestAuth类

def zeep_pythonvalue(self, xmlvalue):
    return xmlvalue

class Onvif_hik(object):
    def __init__(self, ip: str, username: str, password: str):
        self.ip = ip  # 相机的IP地址
        self.username = username  # 相机的用户名
        self.password = password  # 相机的密码
        zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue
        self.save_path = "./{}T{}.jpg".format(self.ip, str(time.time()))  # 截图保存路径

    def content_cam(self):
        """
        链接相机地址
        :return: 是否连接成功的布尔值
        """
        try:
            self.mycam = ONVIFCamera(self.ip, 80, self.username, self.password)  # 创建ONVIFCamera对象
            self.media = self.mycam.create_media_service()  # 创建媒体服务
            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})  # 获取截图的URI
        response = requests.get(res.Uri, auth=HTTPDigestAuth(self.username, self.password))  # 发送HTTP请求获取截图
        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:
            self.ptz.GotoPreset({'ProfileToken': self.media_profile.token, "PresetToken": presets_token})  # 移动到指定预置点位置
        except Exception as e:
            print(e)

    def zoom(self, zoom: str, timeout: int = 0.1):
        """
        变焦
        :param zoom: 拉近或远离
        :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})  # 停止变焦

1.1 实际执行调整相机到预置点

# 创建Onvif_hik对象
camera = Onvif_hik("192.168.1.100", "admin", "password")

# 连接相机
if camera.content_cam():
    print("相机连接成功")
else:
    print("相机连接失败")

# 获取预置点列表
presets = camera.get_presets()
print("预置点列表:")
for preset in presets:
    print("名称: {}, Token: {}".format(preset.Name, preset.token))

# 移动到指定的预置点
preset_token = "预置点的Token"  # 替换为实际的预置点的token
camera.goto_preset(preset_token)

# 停止变焦
camera.zoom("Stop")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值