76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
'''
|
|||
|
|
# @Time : 2024/10/11 10:43
|
|||
|
|
# @Author : hjw
|
|||
|
|
# @File : CameraHIK.py
|
|||
|
|
'''
|
|||
|
|
import cv2
|
|||
|
|
import socket
|
|||
|
|
|
|||
|
|
def portisopen(ip, port):
|
|||
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|||
|
|
sock.settimeout(1)
|
|||
|
|
state = sock.connect_ex((ip, port))
|
|||
|
|
if 0 == state:
|
|||
|
|
# print("port is open")
|
|||
|
|
return True
|
|||
|
|
else:
|
|||
|
|
# print("port is closed")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
class camera_HIK():
|
|||
|
|
|
|||
|
|
def __init__(self, ip, port, name, pw):
|
|||
|
|
# "rtsp://admin:zlzk.123@192.168.1.64:554"
|
|||
|
|
ret = portisopen(ip, port)
|
|||
|
|
self.camera_url = "rtsp://" + str(name) + ":" + str(pw) + "@" + str(ip) + ":" + str(port)
|
|||
|
|
self.ip = ip
|
|||
|
|
self.port = port
|
|||
|
|
self.init_success = False
|
|||
|
|
if ret:
|
|||
|
|
self.cap = cv2.VideoCapture(self.camera_url)
|
|||
|
|
self.init_success = True
|
|||
|
|
else:
|
|||
|
|
print('海康摄像头网络错误,请检测IP')
|
|||
|
|
|
|||
|
|
def get_img(self):
|
|||
|
|
ret = False
|
|||
|
|
frame = None
|
|||
|
|
if self.init_success==True:
|
|||
|
|
if portisopen(self.ip, self.port):
|
|||
|
|
# ret, frame = self.cap.read()
|
|||
|
|
# if ret == False:
|
|||
|
|
self.reconnect_camera()
|
|||
|
|
ret, frame = self.cap.read()
|
|||
|
|
else:
|
|||
|
|
print('海康摄像头网络断开')
|
|||
|
|
else:
|
|||
|
|
if portisopen(self.ip, self.port):
|
|||
|
|
self.reconnect_camera()
|
|||
|
|
ret, frame = self.cap.read()
|
|||
|
|
# if ret == False:
|
|||
|
|
# self.init_success =False
|
|||
|
|
# else:
|
|||
|
|
# self.init_success = True
|
|||
|
|
else:
|
|||
|
|
print('海康摄像头网络断开')
|
|||
|
|
|
|||
|
|
return ret, frame
|
|||
|
|
|
|||
|
|
def reconnect_camera(self):
|
|||
|
|
if self.init_success == True:
|
|||
|
|
self.cap.release()
|
|||
|
|
self.cap = cv2.VideoCapture(self.camera_url)
|
|||
|
|
ret, _ = self.cap.read()
|
|||
|
|
if ret:
|
|||
|
|
self.init_success = True
|
|||
|
|
else:
|
|||
|
|
self.init_success = False
|
|||
|
|
print("海康摄像头重连")
|
|||
|
|
|
|||
|
|
def release_camera(self):
|
|||
|
|
self.cap.release()
|
|||
|
|
|
|||
|
|
|