pyqt5界面+myql+跳绳系统设计

news2025/1/18 3:26:42

pyqt5界面+myql+跳绳系统设计

改项目主要是学习界面的设计开发,已把一些流行的算法做成功能较好的系统,这里以跳绳计数算法为例子,进行一个开发流程。

跳绳计数算法

1.基于Mediapipe(本文使用0.8的版本)进行人体骨架关键点的提取
在这里插入图片描述

2.提取出中心点,即上图的24和23两个点的中心点
3.求出来之后,我们可以计算中心点的相对变化,以适应多种视频的情况,关键代码如下:

while success:
    success, img = cap.read()
    if success:
        img = cv2.resize(img, (640, 480))
        img = detector.findPose(img, False)
        lmList = detector.findPosition(img, False)

        if len(lmList) != 0:
            point = detector.midpoint(img, 24, 23)
            if point_sd == 0:  # 只执行一次
                point_sd = point
                his_point = point
                # print(point_sd["y"])

            # 当前点比上一时刻的大,计算累加距离
            if point["y"] > his_point["y"]:
                y_lon = point["y"] - his_point["y"]
                his_point = point  # 更新
                y_down = 0

            # 当前点比上一时刻的小,计算累加距离
            if point["y"] < his_point["y"]:
                y_down = his_point["y"] - point["y"]
                his_point = point  # 更新
                y_lon = 0

            # 若向上浮动
            if y_lon > 7:
                if dir == 0:
                    count += 0.5
                    dir = 1

            # 若向下浮动
            if y_down > 6:
                if dir == 1:
                    count += 0.5
                    dir = 0

            cv2.putText(img, str(int(count)), (45, 460), cv2.FONT_HERSHEY_PLAIN, 7, (0, 0, 255), 8)
        cTime = time.time()
        fps = 1 / (cTime - pTime)
        pTime = cTime
        cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5, (255, 0, 0), 5)
        cv2.imshow("Image", img)
        cv2.waitKey(50)

很多教程使用的是绝对位置变化,这样会导致通用性问题。

界面设计

在这里插入图片描述
这里主界面的功能是这样,学生和老师登录是不同的界面,当然,可以添加注册功能。

登录注册功能需要用到mysql数据集,这里贴上mysql5.7的安装配置,以及便捷工具navicat的安装:
https://blog.csdn.net/m0_50089886/article/details/119984141
https://blog.csdn.net/qq_43884946/article/details/126827022

代码在初始化的时候需要连接msyql数据库,使用pymysql这个库:

 # 链接数据库
 try:
     self.sql_connection = pymysql.connect(host='localhost', user='root',
                                      password='', db='jumpdata',
                                      port=3306,
                                      autocommit=False,
                                      charset='utf8')
 except:
     print("Unable to link to myql database")
     sys.exit()
 # 如果想要操作数据库,还需要获取db上的cursor对象
 cursor = self.sql_connection.cursor()

登录学生账号后显示:
在这里插入图片描述
这里加载视频播放有点难度,需要使用QTimer来控制播放,大致代码如下:

# 显示视频图像
  def show_pic(self):
      ret, img = self.cap.read()
      if ret:
          cur_frame = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
          # 视频流的长和宽
          height, width = cur_frame.shape[:2]
          pixmap = QImage(cur_frame, width, height, QImage.Format_RGB888)
          pixmap = QPixmap.fromImage(pixmap)
          # 获取是视频流和label窗口的长宽比值的最大值,适应label窗口播放,不然显示不全
          ratio = max(width / self.label.width(), height / self.label.height())
          pixmap.setDevicePixelRatio(ratio)
          # 视频流置于label中间部分播放
          self.label.setAlignment(Qt.AlignCenter)
          self.label.setPixmap(pixmap)

          # 检测
          image, self.count = self.defect.defect_image(cur_frame)
          height, width = image.shape[:2]
          pixmap1 = QImage(image, width, height, QImage.Format_RGB888)
          pixmap1 = QPixmap.fromImage(pixmap1)
          # 获取是视频流和label窗口的长宽比值的最大值,适应label窗口播放,不然显示不全
          ratio1 = max(width / self.label_2.width(), height / self.label_2.height())
          pixmap1.setDevicePixelRatio(ratio1)
          # 视频流置于label中间部分播放
          self.label_2.setAlignment(Qt.AlignCenter)
          self.label_2.setPixmap(pixmap1)

          cv2.waitKey(40)

选择视频文件:

def pre_judge(self):
    self.label.clear()
    self.label_2.clear()
    self.num = 1
    # 在label中播放视频
    self.init_timer()
    # 当self.video = None时,报错。
    self.defect.clear_data()
    self.video = None
    self.timer.blockSignals(True)
    self.img_path = QFileDialog.getOpenFileName()[0]
    self.lineEdit.setText(self.img_path)
    video_type = [".mp4", ".mkv", ".MOV", "avi"]
    for vdi in video_type:
        if vdi not in self.img_path:
            continue
        else:
            self.video = True
            # 当是视频时,将开始按钮置为可点击状态
            self.pushButton_2.setEnabled(True)
    if self.video is None:
        QMessageBox.information(self, "警告", "暂不支持此格式的文件!", QMessageBox.Ok)

登录老师账号后显示:
在这里插入图片描述
这里主要采用读取mysql数据库数据的方式,关键代码如下:

 # 如果想要操作数据库,还需要获取db上的cursor对象
  cursor = self.sql_connection.cursor()

  # 获取学生账号表数据
  cursor.execute("select * from student_account")
  student_account = cursor.fetchall()
  for i in student_account:
      self.student_account[i[0]] = i[1]
      self.student_name[i[0]] = i[2]

  # 获取教师账号表数据
  cursor.execute("select * from teacher_account")
  teacher_account = cursor.fetchall()
  for i in teacher_account:
      self.teacher_account[i[0]] = i[1]

效果:
在这里插入图片描述
在这里插入图片描述

上传记录可以将调试记录上传到mysql数据库。

需要源码的可以私信我,需要定制界面,增加功能也可以私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolo v8

这个系列代码被封装的非常的精致&#xff0c;对二次开发不太友好&#xff0c;虽然也还是可以做些调节 模型的导出 有三种方式试过&#xff0c;都可以导出onnx的模型 1. 用yolov8 源码来自&#xff1a;ultralytics\yolo\engine\exporter.py (不固定尺寸) yolo export modelpa…

Unity HybridCLR 热更工具学习日记(一)

目录 导入HybridCLR包、安装设置相关选项 导入HybridCLR包 先找到HybridCLR包的git地址&#xff1a;https://github.com/focus-creative-games/hybridclr 复制包的http地址&#xff0c;打开unity - window - package Manager&#xff1b;点击左上角的 选择Add Package for…

Ch4.字符串

文章目录 4.字符串KMP算法next数组nextval数组 (优化后的next数组)4.字符串 1.串: 串是一种特殊的线性表,数据直接呈线性关系 2.字符集编码 3.串的存储 (1)顺序存储 ①静态数组 ②动态数组 王道教材采用静态数组 (2)链式存储 4.字符串模式匹配 (1)概念

7.免交互

文章目录 Here Document免交互Expect例子 Here Document免交互 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如ftp、 cat或read命令。是标准输入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&a…

深度学习笔记2——CNN识别手写数字

深度学习笔记2——CNN识别手写数字 本文将介绍LeNet-5和MNIST手写数字识别的PyTorch实现案例。 参考文献&#xff1a;《Gradient-Based Learning Applied to Document Recognition》数据集&#xff08;MNIST&#xff09;&#xff1a;THE MNIST DATABASE完整代码&#xff08;G…

ChatGPT接入微信公众号(手把手教学)

前言 本篇文章参考国内服务器 3 分钟将 ChatGPT 接入微信公众号&#xff08;超详细&#xff09;配置&#xff0c;纠正了一些过时的信息。 准备 一个微信公众号 一个能访问外网的梯子 一个ChatGPT账号 有了这些就可以配置了 注册免费服务器&#xff0c;并部署代码 前往Laf…

CloudCompare二次开发之如何通过PCL进行点云配准?

文章目录 0.引言1.CloudCompare界面设计配准(registrate)按钮2.ICP配准&#xff08;ICP_Reg&#xff09;3.多幅点云逐步配准&#xff08;Many_Reg&#xff09; 0.引言 因笔者课题涉及点云处理&#xff0c;需要通过PCL进行点云数据一系列处理分析&#xff0c;查阅现有网络资料&a…

ChatgGPT生成Excel统计公式

需求背景 编写excel公式&#xff0c;提取下图中符号之前的内容并填充到“修改后的内容”这一列 流程思路 借助ChatGPT完成Excel公式的大致流程如下&#xff1a; 确定要解决的问题&#xff1a;明确你需要在Excel中实现的具体任务或计算需求。例如&#xff0c;求和、平均值、…

优思学院|用ChatGPT人工智能制作FMEA可以吗?

问题和缺陷是昂贵的&#xff0c;它们是质量成本的主要构成部分。同时&#xff0c;顾客可以对制造商和服务提供商抱有很高的期望&#xff0c;希望他们提供高质量和高可靠性。 通常&#xff0c;很多企业只会在产品和服务的开发后期&#xff0c;通过广泛的测试和檢查来发现问题。…

提高 Maya 渲染质量和速度的4个小技巧

Autodesk Maya&#xff0c;通常简称为Maya&#xff0c;是一种3D计算机图形应用程序&#xff0c;可在Windows、macOS和Linux上运行&#xff0c;最初由Alias开发&#xff0c;目前由Autodesk拥有和开发。它用于为交互式3D应用程序、动画电影、电视剧和视觉效果创建资产。 您可以通…

以 29K 成功入职字节跳动,这份《 软件测试面试笔记》让我受益匪浅

朋友入职已经两周了&#xff0c;整体工作环境还是非常满意的&#xff01;所以这次特意抽空给我写出了这份面试题&#xff0c;而我把它分享给小伙伴们&#xff0c;面试&入职的经验&#xff01; 大概是在3月中的时候他告诉我投递了简历&#xff0c;4月的时候经过了3轮面试收…

【C++】4. 类和对象终章

专栏导读 &#x1f341;作者简介&#xff1a;余悸&#xff0c;在读本科生一枚&#xff0c;致力于 C方向学习。 &#x1f341;收录于 C专栏&#xff0c;本专栏主要内容为 C初阶、 C 进阶、STL 详解等&#xff0c;持续更新中&#xff01; &#x1f341;相关专栏推荐&#xff1a; …

做F牌独立站要做好功课,拒绝被割韭菜!

做过爆品独立站的朋友们都知道&#xff0c;遇到爆品不容易&#xff0c;很多都具有滞后性&#xff0c;都是当你发现了之后&#xff0c;这个帖子/视频/产品已经被人跑烂了&#xff0c;你再去跑&#xff0c;这样只会浪费大量的广告费。既然爆品独立站的广告费烧不过大卖&#xff0…

知识图谱学习笔记——(五)知识图谱推理

一、知识学习 声明&#xff1a;知识学习中本文主体按照浙江大学陈华钧教授的《知识图谱》公开课讲义进行介绍&#xff0c;并个别地方加入了自己的注释和思考&#xff0c;希望大家尊重陈华钧教授的知识产权&#xff0c;在使用时加上出处。感谢陈华钧教授。 &#xff08;一&…

Java配置方式使用Spring MVC:实战练习

文章目录 续写任务1、创建登录页面、登录成功与登录失败页面1、创建登录页面2、创建登录成功页面3、创建登录失败页面 任务2、首页添加登录链接&#xff0c;单击可跳转到登录页面1、 修改首页&#xff0c;添加超链接2、修改Spring MVC配置类&#xff0c;定义视图控制器3、创建登…

Spark - 创建 _SUCCESS 文件与获取最新可用文件

目录 一.引言 二.增加 _SUCCESS 标识 1.SparkContext 生成 2.FileSystem 生成 3.Hadoop 生成 三.获取最新文件 1.获取 SparkContext 2.按照时间排序 3.遍历生成 Input 四.总结 一.引言 有任务需要每小时生成多个 split 文件分片&#xff0c;为了保证线上任务读取最新…

Linux实操篇---常用的基本命令5(进程管理类和crontab系统定时任务)

一、进程管理类 进程是正在执行的一个程序或命令&#xff0c;每一个进程都是一个运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占用一定的系统资源。 守护进程和系统服务就是一一对应的关系。 有系统级别的进程和用户级别的进程。 进程管理&#xff1a;所有的进…

如何使用自定义知识库构建自定义ChatGPT机器人

目录 隐藏 使用自定义数据源为您的 ChatGPT 机器人提供数据 1. 通过Prompt提示工程提供数据 2. 使用 LlamaIndex&#xff08;GPT 索引&#xff09;扩展 ChatGPT 如何添加自定义数据源 先决条件 怎么运行的 最后的总结 使用自定义数据源为您的 ChatGPT 机器人提供数据…

rt-thread启动流程

资料下载 RT-Thread Simulator 例程 操作流程 将上面的仿真例程下载并解压&#xff0c;通过MDK打开&#xff0c;编译&#xff0c;调试&#xff0c;并打开串口点击运行&#xff0c;就可以看到如下输出了&#xff1a; 添加自己的 thread&#xff1a;在main()函数中添加即可&am…

[Java基础]基本概念(上)(标识符,关键字,基本数据类型)

hello 大家好&#xff0c;计算机语言各有不同&#xff0c;但本质上都是操作内存和计算。这章的内容是介绍Java中的基本概念展开&#xff0c;包括&#xff1a;标识符&#xff0c;关键字&#xff0c;Java基本数据类型&#xff0c;运算符&#xff0c;表达式和语句&#xff0c;分支…