用 pyqt5给深度学习目标检测+跟踪(yolov3+siamrpn)搭建界面(3)

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


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

登录界面程序

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_())

注册界面程序

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_())

检测与跟踪界面程序

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_())

主程序

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_())

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

  • 11
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值