当前位置:   article > 正文

用 pyqt5给深度学习目标检测+跟踪(yolov3+siamrpn)搭建界面(3)_结合pyqt的操作界面,实现行人的标记和识别功能

结合pyqt的操作界面,实现行人的标记和识别功能

本次的改进与前面两次变动很大,加入了登录与注册界面,检测跟踪界面也重新规划,界面进行了美化,加入了界面跳转功能等等。先上图


检测跟踪界面目前只实现打开摄像头这个功能,后续更新其他功能。

登录界面程序

from PyQt5.Qt import *
from pyqt5_demo.resource.login_pane import Ui_Form
import csv
def user_message():
    USER_PWD = {}
    with open('usermessage.csv', 'r') as csvfile:
        spamreader = csv.reader(csvfile)
        for row in spamreader:
            USER_PWD[row[0]] = row[1]
    return USER_PWD
    
class LoginPane(QWidget, Ui_Form):
    show_register_pane_signal = pyqtSignal()
    show_login_in_signal = pyqtSignal()

    def __init__(self, parent=None, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setupUi(self)

    def login(self):
        if self.username_ld.text() and self.password_ld.text():
            self.login_in_btn.setEnabled(True)
        else:
            self.login_in_btn.setEnabled(False)

    def login_in(self):
        self.USER_PWD = user_message()
        if self.USER_PWD.get(self.username_ld.text()) == self.password_ld.text():
            # QMessageBox.information(self, 'Information', 'Log in Successfully!')
            self.show_login_in_signal.emit()
        else:
            QMessageBox.critical(self, 'Wrong', '帐号密码错误!')

        self.username_ld.clear()
        self.password_ld.clear()

    def sign_in(self):
        self.show_register_pane_signal.emit()
        
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = LoginPane()
    window.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

注册界面程序

from PyQt5.Qt import *
from pyqt5_demo.resource.sign_pane import Ui_Form
import csv

class SignPane(QWidget, Ui_Form):
    exit_signal = pyqtSignal()
    check_login_signal = pyqtSignal(str, str)

    def __init__(self, parent=None, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setupUi(self)
        self.USER_PWD = {}
        with open('usermessage.csv', 'r') as csvfile:
            spamreader = csv.reader(csvfile)
            for row in spamreader:
                self.USER_PWD[row[0]] = row[1]

    def sign_input_func(self):  # 文本
        if self.password_le.text() and self.username_le.text() and self.password_le1.text():
            self.sign_in_btn.setEnabled(True)
        else:
            self.sign_in_btn.setEnabled(False)

    def sign_in_func(self):   # 注册按键
        if self.password_le.text() != self.password_le1.text():
            QMessageBox.critical(self, 'Wrong', '两次输入密码不一样!')
        elif self.username_le.text() not in self.USER_PWD:
            self.USER_PWD[self.username_le.text()] = self.password_le.text()
            QMessageBox.information(self, 'Information', '注册成功!')
            self.check_login_signal.emit(self.username_le.text(), self.password_le.text())
        else:
            QMessageBox.critical(self, 'Wrong', '该用户已存在!')
        self.password_le1.clear()
        self.password_le.clear()
        self.username_le.clear()

    def exit_func(self):
        self.exit_signal.emit()

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = SignPane()
    window.show()

    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

检测与跟踪界面程序

from PyQt5.Qt import *
from pyqt5_demo.resource.detect_and_track import Ui_Form
import cv2
from PyQt5 import QtGui

class DetectAndTrack(QWidget, Ui_Form):

    def __init__(self, parent=None, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setupUi(self)
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.TimerOutFun)
        self.camera = cv2.VideoCapture(0)

    def open_cam_func(self):
        self.timer.start(1)
        print("打开摄像头")

    def TimerOutFun(self):
        success, img = self.camera.read()
        if success:
            self.Image = img
            self.DispImg()

    def DispImg(self):
        self.img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
        showImage = QtGui.QImage(self.img.data, self.img.shape[1], self.img.shape[0], QtGui.QImage.Format_RGB888)
        self.label.setPixmap(QtGui.QPixmap.fromImage(showImage))
        
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = DetectAndTrack()
    window.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

主程序

from pyqt5_demo.login_in_pane import LoginPane
from pyqt5_demo.sign_in_pane import SignPane
from PyQt5.Qt import *
from pyqt5_demo.detect_track_demo import DetectAndTrack
import csv

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    # 控件面板的创建

    login_pane = LoginPane()
    register_pane = SignPane(login_pane)
    detect_track_pane = DetectAndTrack()
    register_pane.move(0, login_pane.height())
    register_pane.show()

    # 槽函数
    def exit_register_pane():
        animation = QPropertyAnimation(register_pane)
        animation.setTargetObject(register_pane)
        animation.setPropertyName(b"pos")
        animation.setStartValue(QPoint(0, 0))
        animation.setEndValue(QPoint(login_pane.width(), 0))
        animation.setDuration(300)
        animation.setEasingCurve(QEasingCurve.InBounce)
        animation.start(QAbstractAnimation.DeleteWhenStopped)


    def show_register_pane():
        animation = QPropertyAnimation(register_pane)
        animation.setTargetObject(register_pane)
        animation.setPropertyName(b"pos")
        animation.setStartValue(QPoint(0, login_pane.height()))
        animation.setEndValue(QPoint(0, 0))
        animation.setDuration(300)
        animation.setEasingCurve(QEasingCurve.OutBounce)
        animation.start(QAbstractAnimation.DeleteWhenStopped)


    def save_message(account, pwd):
        headers = ['username', 'password']
        values = [{'username': account, 'password': pwd}]
        with open('usermessage.csv', 'a', encoding='utf-8', newline='') as fp:
            writer = csv.DictWriter(fp, headers)
            # 写入表头数据的时候,需要调用writeheader方法
            # writer.writeheader()
            writer.writerows(values)

    def show_detct_track():
        print("a")
        detect_track_pane.show()
        login_pane.close()
        
        # 信号的链接
    login_pane.show_register_pane_signal.connect(show_register_pane)
    login_pane.show_login_in_signal.connect(show_detct_track)
    register_pane.exit_signal.connect(exit_register_pane)
    register_pane.check_login_signal.connect(save_message)
    login_pane.show()
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

每个界面的程序都可以单独运行。主程序可以完整运行所有界面,并实现界面跳转。界面用qtdesigner设计,生成的py文件就不上传。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/150985?site
推荐阅读
相关标签
  

闽ICP备14008679号