python实现海康球机预置点的切换并抓图

python实现海康球机预置点的切换并抓图


本文演示了如何通过ISAPI协议切换球机的预置点,并且通过rtsp抓取图片.

代码

import requests
from requests.auth import HTTPDigestAuth
import time, datetime
import traceback
import cv2
import os
import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "loglevel;quiet"
import sys

def generate_filename():
    from datetime import datetime
    return datetime.now().strftime("%Y%m%d%H%M%S")
    
class HikCameraClient(object):

    def __init__(self, ip, username, password,devIndex,rtsp_port,isapi_port):
        self.ip = ip
        self.username = username
        self.password = password
        self.devIndex = devIndex
        self.rtsp_port = rtsp_port
        self.isapi_port = isapi_port

    def capture(self,preset):

        file_name=generate_filename() + '.jpg'
        save_root='records/{}/{}'.format(preset,str(datetime.date.today()))
        
        if not os.path.isdir(save_root):
            os.makedirs(save_root)
            
        url="rtsp://{}:{}@{}:{}/dac/realplay/{}1/SUB/TCP?streamform=rtp".format(self.username,self.password,self.ip,self.rtsp_port,self.devIndex)
        print(url)
                
        video = cv2.VideoCapture(url) 
        
        while True:
            success, img = video.read()
            if success:
                cv2.imwrite(os.path.join(save_root,file_name), img)
                break

    def goto_presets(self, point):
        session = requests.Session()
        url = 'http://%s:%d/ISAPI/PTZCtrl/channels/1/presets/%d/goto?format=json&devIndex=%s' % (self.ip,self.isapi_port,point,self.devIndex)    
        res=session.put(url, auth=HTTPDigestAuth(self.username, self.password))
        print(url,res)
        
def main():
    client = HikCameraClient(ip='192.168.1.100', 
                             username='admin',password='admin',
                             devIndex='8527EC1F-9835-3645-E7D6-94D516D42BCA',
                             rtsp_port=554,
                             isapi_port=8700)
                             
    for preset in [1,2,3,4,5,6,7,8,9,10,1]:
        client.goto_presets(preset)
        time.sleep(3)
        client.capture(preset)
        time.sleep(10)
    
if __name__ == '__main__':
    main()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi20240217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值