返回顶部
首页 > 资讯 > 后端开发 > Python >Python+PyQt5自制监控小工具
  • 355
分享到

Python+PyQt5自制监控小工具

PythonPyQt5监控工具PythonPyQt5监控Python监控PythonPyQt5 2023-03-19 17:03:14 355人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。 利用OpenCV的图像处理功能可以轻松对计算机摄像头的调用实现实时图像的采集效果。 最终将图片进行保存后

本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。

利用OpenCV的图像处理功能可以轻松对计算机摄像头的调用实现实时图像的采集效果。

最终将图片进行保存后生成监控的历史视频记录。

pip install PyQt5

pip install Python-opencv

若是没有安装相关的模块,可以选择上述pip的方式进行安装。

接下来我们将需要的python模块导入到代码块中。

# It's just an alias for the cv2 module.
import cv2 as cv_

# It's importing all the classes from the QtGui module.
from PyQt5.QtGui import *

# It's importing all the classes from the QtCore module.
from PyQt5.QtCore import *

# It's importing all the classes from the QtWidgets module.
from PyQt5.QtWidgets import *

# It's importing the sys module.
import sys

# It's importing the os module.
import os

# It's importing the time module.
import time

# It's importing the traceback module.
import traceback

创建名称为CameraUI的python类,开发监控工具相关的页面组件及布局。

将控件按钮等对应的槽函数也放到该类中。

class CameraUI(QWidget):
    def __init__(self):
        super(CameraUI, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('本地监控工具 公众号:Python 集中营')
        self.setWindowIcon(QIcon('ico.png'))
        self.resize(600, 400)

        self.label_view = QLabel()

        self.image_path = QLineEdit()
        self.image_path.setReadOnly(True)
        self.image_path.setPlaceholderText('视频流图片保存地址')

        self.image_path_btn = QPushButton()
        self.image_path_btn.setText('打开')
        self.image_path_btn.clicked.connect(self.image_path_btn_clk)

        self.video_path = QLineEdit()
        self.video_path.setReadOnly(True)
        self.video_path.setPlaceholderText('监控视频保存地址')

        self.video_path_btn = QPushButton()
        self.video_path_btn.setText('打开')
        self.video_path_btn.clicked.connect(self.video_path_btn_clk)

        self.start_listen_btn = QPushButton()
        self.start_listen_btn.setText('开启监控')
        self.start_listen_btn.clicked.connect(self.start_listen_btn_clk)

        self.brower = QTextBrowser()
        self.brower.setReadOnly(True)
        self.brower.setFont(QFont('宋体', 8))
        self.brower.setPlaceholderText('日志处理过程区域...')
        self.brower.ensureCursorVisible()

        hbox = QHBoxLayout()
        vbox_left = QVBoxLayout()
        vbox_right = QVBoxLayout()

        vbox_left.addWidget(self.label_view)
        vbox_right_grid1 = QGridLayout()
        vbox_right_grid1.addWidget(self.image_path, 0, 0, 1, 2)
        vbox_right_grid1.addWidget(self.image_path_btn, 0, 2, 1, 1)
        vbox_right_grid1.addWidget(self.video_path, 1, 0, 1, 2)
        vbox_right_grid1.addWidget(self.video_path_btn, 1, 2, 1, 1)

        vbox_right_grid2 = QGridLayout()
        vbox_right_grid2.addWidget(self.brower, 0, 0, 1, 3)
        vbox_right_grid2.addWidget(self.start_listen_btn, 1, 0, 1, 3)

        vbox_right.addLayout(vbox_right_grid1)
        vbox_right.addLayout(vbox_right_grid2)

        hbox.addLayout(vbox_left)
        hbox.addLayout(vbox_right)

        self.listen_thread = ListenWorkThread(self)
        self.listen_thread.message.connect(self.show_message)
        self.listen_thread.finished.connect(lambda: self.start_listen_btn.setEnabled(True))

        self.setLayout(hbox)

    def show_message(self, text):
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def image_path_btn_clk(self):
        dir = QFileDialog.getExistingDirectory(self, "选择文件夹", os.getcwd())
        self.image_path.setText(dir)

    def video_path_btn_clk(self):
        dir = QFileDialog.getExistingDirectory(self, "选择文件夹", os.getcwd())
        self.video_path.setText(dir)

    def start_listen_btn_clk(self):
        self.listen_thread.start()

开发一个ListenWorkThread类并且继承自QThread的子线程

将该线程作为业务类实现调用本地摄像头完成监控的效果。

class ListenWorkThread(QThread):
    message = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(ListenWorkThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False

    def run(self):
        try:
            image_path = self.parent.image_path.text()
            video_path = self.parent.video_path.text()
            if image_path.strip() == '' or video_path.strip() == '':
                self.message.emit('相关路径设置不能为空,请检查设置!')
                return
            self.cap = cv_.VideoCapture(0)
            self.cap.set(3, 300)
            self.cap.set(4, 400)
            if self.cap.isOpened():
                self.message.emit('摄像头已成功打开!')
                n = 0
                self.message.emit('正在进行视频 监控中....')
                start_time = time.clock()
                while True:
                    ret, img = self.cap.read()
                    if os.path.exists(os.path.join(image_path, str(n) + '.jpg')):
                        os.remove(os.path.join(image_path, str(n) + '.jpg'))
                    self.save_image(img, str(n), image_path)
                    time.sleep(0.1)
                    pixmap_ = QPixmap(os.path.join(image_path, str(n) + '.jpg'))
                    self.parent.label_view.setPixmap(pixmap_)
                    n = n + 1

            self.finished.emit(True)
        except Exception as e:
            traceback.print_exc()
            self.message.emit('程序运行错误,请检查参数是否设置正确!')
            self.finished.emit(True)

    def save_image(self, image=None, file_name=None, image_path=None):
        if image is not None:
            cv_.imwrite(os.path.join(image_path, file_name + '.jpg'), image)

以上整个业务子线程的逻辑就开发完成了,然后使用python模块的main函数调用。

将整个程序的运行加入到主体循环当中。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = CameraUI()
    main.show()
    sys.exit(app.exec_())

到此这篇关于Python+PyQt5自制监控小工具的文章就介绍到这了,更多相关Python PyQt5监控内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python+PyQt5自制监控小工具

本文链接: https://lsjlt.com/news/200300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python+PyQt5自制监控小工具
    本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。 利用opencv的图像处理功能可以轻松对计算机摄像头的调用实现实时图像的采集效果。 最终将图片进行保存后...
    99+
    2023-03-19
    Python PyQt5监控工具 Python PyQt5监控 Python 监控 Python PyQt5
  • 怎么使用Python+PyQt5自制监控小工具
    本篇内容介绍了“怎么使用Python+PyQt5自制监控小工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!利用opencv的图像处理功能可...
    99+
    2023-07-05
  • 基于PyQt5制作数据处理小工具
    需求分析: 现在有一大堆的Excel数据文件,需要根据每个Excel数据文件里面的Sheet批量将数据文件合并成为一个汇总后的Excel数据文件。或者是将一个汇总后的Excel数据文...
    99+
    2024-04-02
  • Windows GUI自动化控制工具之python uiAutomation
    对 Windows GUI进行自动化控制的工具有很多,比如pywinauto、pyautogui、pywin32、Autoit、airtest、UIAutomation等,UI Automation ...
    99+
    2023-09-01
    自动化 python uiautomation windows gui 自动化
  • ASP 健康监控的革命:自动化和监控工具
    自动化的力量 传统上,健康监控是一个繁琐的手动过程,需要开发人员手动检查指标和事件日志。然而,自动化工具可以简化这一过程,通过自动执行以下任务: 定期监控关键指标(例如 CPU 使用率、内存消耗) 检测异常模式和阈值违规情况 生成警报...
    99+
    2024-02-28
    ASP.NET、健康监控、自动化、监控工具
  • mongodb监控工具mongosniff
    mongodb监控工具mongosniff 介绍 mongosniff提供了对数据库实时活动的低级别操作跟踪和嗅探视图。可以将mongosniff认为是专为MongoDB定制的,类似于t...
    99+
    2024-04-02
  • 如何基于PyQt5制作数据处理小工具
    小编给大家分享一下如何基于PyQt5制作数据处理小工具,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!需求分析:现在有一大堆的Excel数据文件,需要根据每个Excel数据文件里面的Sheet批量将数据文件合并成为一个汇总后...
    99+
    2023-06-29
  • orzdba监控工具【增加远程监控】
    orzdba工具默认必须在本地使用,这不是很方便,现增加了远程调用。使用方法:./orzdba_remote --host=192.168.148.1 --user=admin  --passwo...
    99+
    2024-04-02
  • 基于PyQt5制作Excel文件数据去重小工具
    需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定。 开始源码说明之前,先说明一下工具的使用过程。 1、准备需要去重的数据文件。 2、使用工具执行...
    99+
    2024-04-02
  • redis性能监控工具
    环境描述OS:centos 6.6_x64DB:redis 3.0.3192.168.1.91 -->数据库服务器192.168.1.92 -->监控程序主机2.监控工具redis-stat下载...
    99+
    2024-04-02
  • 网络监控工具ntopng
    网络监控工具ntopng...
    99+
    2023-06-04
  • 《Python趣味工具》——自制emoji3
    今日目标 在上次,我们绘制了静态的emoji图。并且总结了turtle中的常用函数。 本次我们将尝试制作一个动态的emoji,让你的表情包动起来! 文章目录 一、动画原理:二、制作动画:...
    99+
    2023-09-21
    python 开发语言
  • 利用Python实现自制文件搜索小工具
    目录前言环境准备完整代码前言 嗨嗨,大家晚上好 ~ 当自己电脑文件很多还有点乱,不记得自己文件放哪里的时候,用电脑自带的搜索文件,这个等待时间可慢了 对我们这种敲代码的,这能忍吗,...
    99+
    2024-04-02
  • 如何自制Python函数帮助查询小工具
    今天就跟大家聊聊有关如何自制Python函数帮助查询小工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的自带文档功能很不错,给与我耳目一新的感觉。如果在CMD中进行“行...
    99+
    2023-06-17
  • Hadoop监控分析工具Dr.Elephant
    公司基础架构这边想提取慢作业和获悉资源浪费的情况,所以装个dr elephant看看。LinkIn开源的系统,可以对基于yarn的mr和spark作业进行性能分析和调优建议。DRE大部分基于java开发,s...
    99+
    2024-04-02
  • redis监控工具之redis-live
    介绍 监控redis的一款工具 安装(linux下) yum install python-devel 安装 setuptools 1) wget http://p...
    99+
    2024-04-02
  • linux监控工具有哪些
    常见的linux监控工具有:1.dstat,系统监控工具;2.pidstat,系统资源监控工具;3.Netstat,TCP/IP网络监控工具;4.iotop,磁盘操作监控工具;5.Saidar,CLI系统数据监控和统计工具;6.top,性能...
    99+
    2024-04-02
  • ​性能监控工具集合
    性能监控工具集合性能监控工具集合(vmstat,dstat,htop,top,iotop,sar,iostat,iftop,netlog,glances,lm_sersors)一.vmstatvmstat 虚拟内存工具vmstat 刷新时间...
    99+
    2023-06-05
  • Centos7部署nmon监控工具
    Nmon是一款计算机性能系统监控工具,因为它免费,体积小,安装简单,耗费资源低,广泛应用于AIX和Linux系统上传软件包...
    99+
    2023-06-05
  • Linux 流量监控工具 iftop
    iftop 可以用来监控网卡的实时流量(可以指定网段)、反向解析ip、显示端口信息等。直接运行[root@yoon ~]# iftopiftop 界面相关说明界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的.中间的<...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作