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()