1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- from PySide6.QtWidgets import QLabel
- from PySide6.QtCore import Qt
- from threading import Thread
- from PySide6.QtGui import QImage, QPixmap
- from PySide6.QtWidgets import QMessageBox
- import cv2
- from module.ImageTool import create_filename
- from logger import logger
- def check_error(func):
- def wrapper(*args):
- try:
- print(args)
- return func(*args)
- except ConnectionError:
- args[0].stop_cam()
-
- return wrapper
- class IPCam(Thread):
- lnk_connect: str = None
- qLabel: QLabel = None
- net_work_error: bool = False
- def __init__(self, parent=None) -> None:
- Thread.__init__(self, parent)
- self.status = True
- self.cap = True
-
- def run(self) -> None:
- logger.info("srarting take image from ip cam")
- self.net_work_error = False
- try:
- self.cap = cv2.VideoCapture()
-
- if 'rtsp' in self.lnk_connect:
- self.cap.open(self.lnk_connect)
-
- if not self.cap.isOpened():
- raise ConnectionError
-
- while self.status:
-
- if 'http' in self.lnk_connect:
- self.cap.open(self.lnk_connect)
-
- if not self.cap.isOpened():
- raise ConnectionError
-
- ret, frame = self.cap.read()
- if not ret:
- continue
- color_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
-
- h, w, ch = color_frame.shape
- img = QImage(color_frame.data, w, h, ch * w, QImage.Format_RGB888)
- self.__scaled_img = QPixmap.fromImage(img.scaled(640, 480, Qt.KeepAspectRatio))
- self.qLabel.setPixmap(self.__scaled_img)
- # "http://admin:admin102030@192.168.1.108/cgi-bin/snapshot.cgi?2"\
-
- except ConnectionError:
- logger.error("Нет сети или не правильная строка подключения")
- logger.info("stop take image from ip cam")
- self.status = False
- self.qLabel.setText('Нет сети или не правильная строка подключения')
- except RuntimeError:
- self.status = False
- def stop_cam(self):
- logger.info("stop take image from ip cam")
- self.cap.release()
- self.status = False
- # cv2.destroyAllWindows()
- self.join()
- def cupture_image(self, qLabel: QLabel) -> str:
- name_file = create_filename()
- qLabel.setPixmap(self.__scaled_img)
- self.__scaled_img.save(name_file, 'jpg')
- return name_file
-
|