qt可视化例子

该代码实现了一个基于PyQt5的GUI界面,包含两个按钮。一个用于关闭窗口,另一个用于打开摄像头并使用TensorFlow的SSD模型进行实时物体检测。检测到的物体在视频流中以框的形式显示,并计算并显示帧率。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'close.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import sys
import time

import cv2
import cv2 as cv
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow



class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(989, 649)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(280, 240, 191, 61))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(550, 250, 121, 51))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 989, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.close) # type: ignore
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.pushButton_2.clicked.connect(self.opencap)
    def opencap(self):
        import numpy as np
        import cv2
        import os, time

        import tensorflow as tf
        from object_detection.utils import label_map_util
        from object_detection.utils import visualization_utils as vis_utils
        # Init camera
        cap = cv2.VideoCapture(0)
        cap.set(3, 640)  # set Width
        cap.set(4, 480)  # set Height

        TEST_CAM_ONLY = False

        if TEST_CAM_ONLY:
            t_start = time.time()
            fps = 0

            while True:
                ret, frame = cap.read()
                #         frame = cv2.flip(frame, -1) # Flip camera vertically
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                canny = cv2.Canny(frame, 50, 150)

                fps = fps + 1
                mfps = fps / (time.time() - t_start)
                cv2.putText(frame, "FPS " + str(int(mfps)), (10, 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
                cv2.imshow('frame', frame)
                cv2.imshow('Canny', canny)

                k = cv2.waitKey(30) & 0xff
                if k == 27:  # press 'ESC' to quit
                    break

            cap.release()
            cv2.destroyAllWindows()
            exit()

        # Init tf model

        MODEL_NAME = 'ssdlite_mobilenet_v2_coco_2018_05_09'  # fast
        PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
        PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')
        NUM_CLASSES = 90
        IMAGE_SIZE = (12, 8)
        fileAlreadyExists = os.path.isfile(PATH_TO_CKPT)

        if not fileAlreadyExists:
            print('Model does not exsist !')
            exit

        # LOAD GRAPH
        print('Loading...')
        detection_graph = tf.Graph()
        with detection_graph.as_default():
            od_graph_def = tf.compat.v1.GraphDef()
            with tf.io.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
                serialized_graph = fid.read()
                od_graph_def.ParseFromString(serialized_graph)
                tf.import_graph_def(od_graph_def, name='')
        label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
        categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES,
                                                                    use_display_name=True)
        category_index = label_map_util.create_category_index(categories)
        print('Finish Load Graph..')

        # Main
        t_start = time.time()
        fps = 0

        with detection_graph.as_default():
            with tf.compat.v1.Session(graph=detection_graph) as sess:
                while True:
                    ret, frame = cap.read()
                    #            frame = cv2.flip(frame, -1) # Flip camera vertically
                    #             frame = cv2.resize(frame,(320,240))
                    ##############
                    image_np_expanded = np.expand_dims(frame, axis=0)
                    image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
                    detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
                    detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
                    detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
                    num_detections = detection_graph.get_tensor_by_name('num_detections:0')

                    print('Running detection..')
                    (boxes, scores, classes, num) = sess.run(
                        [detection_boxes, detection_scores, detection_classes, num_detections],
                        feed_dict={image_tensor: image_np_expanded})

                    print('Done.  Visualizing..')
                    vis_utils.visualize_boxes_and_labels_on_image_array(
                        frame,
                        np.squeeze(boxes),
                        np.squeeze(classes).astype(np.int32),
                        np.squeeze(scores),
                        category_index,
                        use_normalized_coordinates=True,
                        line_thickness=8)

                    ##############
                    fps = fps + 1
                    mfps = fps / (time.time() - t_start)
                    cv2.putText(frame, "FPS " + str(int(mfps)), (10, 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
                    cv2.imshow('frame', frame)

                    k = cv2.waitKey(30) & 0xff
                    if k == 27:  # press 'ESC' to quit
                        break

        cap.release()
        cv2.destroyAllWindows()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "关闭窗口"))
        self.pushButton_2.setText(_translate("MainWindow", "打开摄像头"))

if __name__ =='__main__':#运行要添加的模板
    app=QApplication(sys.argv)
    MainWindow1=QMainWindow()#mainwidow1随便改,创建窗体对象
    ui=Ui_MainWindow()#随便改,与上边一致
    ui.setupUi(MainWindow1)#对窗体对象进行初始化设置
    MainWindow1.show()#显示窗体
    sys.exit(app.exec_())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Qt Echarts是一种基于Qt框架的可视化图表库,可以帮助开发人员快速创建大屏可视化界面。它提供了丰富多样的图表类型和交互功能,使得数据可视化变得简单而强大。 在大屏可视化界面的编写过程中,Qt Echarts提供了丰富的API和文档支持,使开发人员能够轻松地自定义图表样式、添加动态效果和交互行为。通过对数据进行适当的处理和转换,我们可以使用Qt Echarts绘制饼图、柱状图、折线图等不同类型的图表,以展示数据的分布、趋势和关联性。 除了基本的图表绘制功能,Qt Echarts还支持动画效果、数据的导入导出、事件的响应等高级功能,使得大屏可视化界面更具吸引力和交互性。开发人员可以根据具体需求,灵活运用这些功能,实现各种精美的大屏展示效果,提高用户的数据分析和决策效率。 在网上可以找到很多关于Qt Echarts编写大屏可视化界面的好例子。其中一个典型的例子是展示股票市场行情的大屏界面。通过使用Qt Echarts,开发人员可以实时获取股票行情数据,并将其以动态的形式展示在界面上。通过调整图表的样式和配置交互行为,用户可以自由地探索数据、比较不同股票的走势,并根据这些信息做出相应的投资决策。 综上所述,Qt Echarts在编写大屏可视化界面方面提供了强大的功能和便利性。它能够帮助开发人员快速实现各种图表的绘制和交互效果,提高数据分析和决策的效率。在网上可以找到许多优秀的案例,可以帮助开发人员更好地了解和应用Qt Echarts。 ### 回答2: Qt Echarts是一个基于Qt框架的图表绘制工具库,可以在大屏可视化界面中实现丰富的数据展示和交互。下面给出一个关于Qt Echarts的好例子网。 好例子网是一个网站,旨在展示和分享Qt Echarts的应用案例。这个网站上收集了许多基于Qt Echarts开发的大屏可视化界面的示例,并提供了源代码和详细的开发文档。通过这个网站,用户可以找到灵感、学习如何使用Qt Echarts来创建精美的数据可视化界面。 在好例子网上,用户可以浏览各种类型的大屏可视化界面示例,例如实时数据监控、地理信息展示、统计分析等。每个示例页面都包含一个演示图表和相应的代码。用户可以查看图表的效果,并阅读代码来理解实现的方式和细节。 用户还可以从好例子网上下载示例代码,该代码是用Qt Echarts编写的完整的大屏可视化界面项目。下载后,用户可以直接在自己的工程中使用这些代码,加入自己的数据,来定制自己的可视化界面。 好例子网还提供了丰富的开发文档,介绍了Qt Echarts的基本使用方法、常用图表类型的配置、数据的处理和更新等方面的知识。用户可以通过这些文档学习如何更好地使用Qt Echarts来开发自己的大屏可视化界面。 总之,好例子网为开发者提供了一个学习、交流和创作的平台,通过Qt Echarts编写大屏可视化界面的好例子,帮助开发者快速上手、掌握技巧,同时也促进了Qt Echarts的推广和发展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值