IPCam.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from PySide6.QtWidgets import QLabel
  2. from PySide6.QtCore import Qt
  3. from threading import Thread
  4. from PySide6.QtGui import QImage, QPixmap
  5. from PySide6.QtWidgets import QMessageBox
  6. import cv2
  7. from module.ImageTool import create_filename
  8. from logger import logger
  9. class IPCam(Thread):
  10. lnk_connect: str = None
  11. qLabel: QLabel = None
  12. net_work_error: bool = False
  13. def __init__(self, parent=None) -> None:
  14. Thread.__init__(self, parent)
  15. self.status = True
  16. self.cap = True
  17. def run(self) -> None:
  18. logger.info("srarting take image from ip cam")
  19. self.net_work_error = False
  20. try:
  21. self.cap = cv2.VideoCapture()
  22. if 'rtsp' in self.lnk_connect:
  23. self.cap.open(self.lnk_connect)
  24. if not self.cap.isOpened():
  25. raise ConnectionError
  26. while self.status:
  27. if 'http' in self.lnk_connect:
  28. self.cap.open(self.lnk_connect)
  29. if not self.cap.isOpened():
  30. raise ConnectionError
  31. ret, frame = self.cap.read()
  32. if not ret:
  33. continue
  34. color_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  35. h, w, ch = color_frame.shape
  36. img = QImage(color_frame.data, w, h,
  37. ch * w, QImage.Format_RGB888)
  38. self.__scaled_img = QPixmap.fromImage(
  39. img.scaled(h, w, Qt.KeepAspectRatio))
  40. self.qLabel.setPixmap(self.__scaled_img)
  41. # "http://admin:admin102030@192.168.1.108/cgi-bin/snapshot.cgi?2"\
  42. except ConnectionError:
  43. logger.error("Нет сети или не правильная строка подключения")
  44. logger.info("stop take image from ip cam")
  45. self.status = False
  46. self.qLabel.setText(
  47. 'Нет сети или не правильная строка подключения')
  48. except RuntimeError:
  49. self.status = False
  50. def stop_cam(self):
  51. logger.info("stop take image from ip cam")
  52. self.cap.release()
  53. self.status = False
  54. # cv2.destroyAllWindows()
  55. self.join()
  56. def cupture_image(self, qLabel: QLabel) -> str:
  57. name_file = create_filename()
  58. qLabel.setPixmap(self.__scaled_img)
  59. self.__scaled_img.save(name_file, 'jpg')
  60. return name_file