Python3-onvif協(xié)議之相機(jī)截圖、相機(jī)獲取預(yù)置點(diǎn)、移動(dòng)到預(yù)置點(diǎn)

安裝模塊
實(shí)現(xiàn)功能:相機(jī)截圖、獲取預(yù)置點(diǎn)、移動(dòng)到預(yù)置點(diǎn)、變焦
pip3 install --upgrade onvif_zeep

前提準(zhǔn)備:
1:相機(jī)支持onvif協(xié)議并已打開(kāi)此功能
2:創(chuàng)建onvif協(xié)議下的賬號(hào)和密碼,用此賬號(hào)來(lái)登錄下面的方法

獲取截圖
from onvif import ONVIFCamera
import zeep
import time
import requests
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
        zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue
        self.save_path = "./{}T{}.jpg".format(self.ip, str(time.time()))  # 截圖保存路徑

    def content_cam(self):
        """
        鏈接相機(jī)地址
        :return:
        """
        try:
            self.mycam = ONVIFCamera(self.ip, 80, self.username, self.password)
            self.media = self.mycam.create_media_service()  # 創(chuàng)建媒體服務(wù)
            self.media_profile = self.media.GetProfiles()[0]  # 獲取配置信息
            self.ptz = self.mycam.create_ptz_service()  # 創(chuàng)建控制臺(tái)服務(wù)
            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):
        """
        獲取預(yù)置點(diǎn)列表
        :return:預(yù)置點(diǎn)列表--所有的預(yù)置點(diǎn)
        """
        presets = self.ptz.GetPresets({'ProfileToken': self.media_profile.token})  # 獲取所有預(yù)置點(diǎn),返回值:list
        return presets

   def goto_preset(self, presets_token: int):
        """
        移動(dòng)到指定預(yù)置點(diǎn)
        :param presets_token: 目的位置的token,獲取預(yù)置點(diǎn)返回值中
        :return: 
        """
        try:
            self.ptz.GotoPreset(
                {'ProfileToken': self.media_profile.token, "PresetToken": presets_token})  # 移動(dòng)到指定預(yù)置點(diǎn)位置
        except Exception as e:
            print(e)

   def zoom(self, zoom: str, timeout: int = 0.1):
        """
        變焦
        :param zoom: 拉近或遠(yuǎn)離
        :param timeout: 生效時(shí)間
        :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})

相關(guān)鏈接:
官方onvif協(xié)議API:https://www.onvif.org/onvif/ver20/util/operationIndex.html
注意點(diǎn):API中參數(shù)均為字典格式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容