基于Mediapipe的坐姿识别系统(内附github地址,有用记得star一下)

毕设需要在树莓派上完成一个坐姿识别系统,完成后记录一下大致的过程。首先现在pycahrm上进行编程在把代码移植到树莓派上,树莓派上的环境需要自行配置。(由于选用了mediapipe作为姿势识别工具需要python的版本大于3.7才能运行)。本系统主要用到了PyQt5、mediapipe、sqlite3等技术。PyQt5使用QT Designer进行页面的设计实现页面设计和逻辑分离,符合MVC框架。本文没有选用openpose而选用了mediapipe进行姿势识别对于(对于本人而言mediapipe比较好安装一点),获取坐标点之后设计各种坐姿的识别阈值以进行坐姿的判断。对于坐姿不端正的进行语音提醒以及邮件发送(这里用到了PyQt里的多线程QTheard以及QTimer)。

一:PyQt5页面的设计

根据作者TEDxPY的博客_CSDN博客-python学习,python资源,LeetCode领域博主提供的ui界面进行修改,先使用QT Designer进行设计再进行逻辑的设计。完成后的登录界面如下图所示(背景图是个动画载入.gif动画):

点击注册账号跳转到注册页面,注册页面如下图所示:

这里没有对手机号进行验证(在考虑要不要添加)只有当所有字段填写完整并且手机号输入11位之后才可以点击注册按钮。先前用的是pymysql模块对mysql进行操作。由于树莓派下载mysql不成功随后改成sqlite3进行数据库的配置。

二:对于mediapipe的使用

pycharm和树莓派上的mediapipe版本略有不同,电脑上的版本为0.9.0.1,树莓派上的版本为0.8。刚开始使用mediapipe是使用demo案例,后来需要和PyQt5想结合所以把mediapipe的使用变成一个模块方便使用。mediapipe可以检查手部也可以选择检查全身关键节点有参数可以进行选择。关于mediapipe 的模块化代码如下:

class poseDetector():

    def __init__(self,mode= False,complex=1,smooth=True,enable=False,segment=True,
                 detectionCon=0.5,trackCon=0.5):
        self.mode=mode
        self.complex=complex
        self.smooth=smooth
        self.enable=enable
        self.segment=segment
        self.detectionCon=detectionCon
        self.trackCon=trackCon
        self.mpDraw=mp.solutions.drawing_utils
        self.mpPose=mp.solutions.pose #人体姿态检测
        self.pose=self.mpPose.Pose(self.mode,self.complex,self.smooth,self.enable,self.segment,
                                   self.detectionCon,self.trackCon)#姿态关键点检测函数
    def findpose(self,img,draw=True):
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将导入的BGR格式图像转为RGB格式
        self.results = self.pose.process(imgRGB)  # 将图像传给姿态识别模型
        if self.results.pose_landmarks: # 如果采集到图像
            if draw:
                self.mpDraw.draw_landmarks(img, self.results.pose_landmarks,
                                           self.mpPose.POSE_CONNECTIONS)  # 绘制姿态坐标点,img为画板,传入姿态点坐标,坐标连线
        return img
    def findPosition(self,img,draw=True):
        lmList=[]
        if self.results.pose_landmarks:
            for id,lm in enumerate(self.results.pose_landmarks.landmark):
                h,w,c=img.shape
                cx,cy=int(lm.x * w),int(lm.y * h)
                lmList.append([id,cx,cy])
                if draw:
                    cv2.circle(img,(cx,cy),5,(255,0,0),cv2.FILLED)
        return lmList

使用此模块可以很方便的得到人体的关键节点信息,需要注意的是得到的关键节点信息是这个点在图像种的比例位置(即区间在0-1之间),所以我们需要获取图像的大小乘以得到的比例才可以得到关键节点的像素数据,关键节点的数据是我们判断坐姿的依据。(这里本来的构思是根据深度学习对图像进行学习分类,但是无奈数据量太大了无法找到太多的原始图片数据),接下来需要进行坐姿识别的识别公式和如何把识别的图像嵌入PyQt5中。

三:Mediapipe和OpenPose

如果想要详细了解的话建议观看B站教程讲解或者arvix网站研究论文。

四:关于数据库的配置

再PC端上本来使用的是mysql,在使用pycharm的pymysql模块进行连接。(工作台使用MySQL Workbench)。由于树莓派安装不了MySQL所以选择了python内置的sqlite3模块,sqlite3有着占用空间小使用便捷等优点。其实对于python来说两者的语言基本上都是相同的,不过这里需要学习一下数据库中关于自定义变量的插入和查询(网上都搜得到)。

这边建议邮箱和电话验证都加个Uniuqe限制。 

五:关于得到关键节点后的坐姿识别计算

这里是本系统的重点,因为有众多的参数(参数的变化容易导致识别坐姿的稳定性)。本系统把坐姿分为头左倾斜、头右倾斜、身体左倾、身体右倾、头前倾、斜眼等。这里主要的就是要拿到关键节点准确的值才可以进行判断。由于人在使用电脑时可能坐姿都是端正的但是在看电脑时不是正向的看摄像头而是偏着一边看摄像头所以存在一定的水平误差。这里添加了一个参数α,这里α的参数设置为2个像素点。

对于图中判断的阈值,需要进行参数的调整。不过由于没有太多的坐姿识别图片让你来验证模型取什么参数的时候识别率是最好的。(所以这边建议调整后运行一下只要自己觉得识别效果还行即可,如果要有数据建议多找几组坐姿的照片打标签在进行验证)。

对于图中公式的讲解:

头左右倾斜判断的是两个眼睛的高度差。身体倾斜判断的是两个肩宽的高度差。头前倾的判断方法为:假设人在正常情况下鼻子到肩膀的高度是保持一定的距离的(这个数据可以测量也可以让用户自己拍一张坐姿准确的照片在用模型进行计算提取正确的距离)。如果你头前倾代表着你低头那么这个间距将会缩小。对于斜眼的判断则为:假设正常状况下鼻子在水平上位置和肩膀中间位置的水平位置是一致的。如果你斜眼则会导致鼻子的水平位置与肩膀中间位置的水平位置有偏差即可得到斜眼。

b站有完整展示【基于mediapipe的坐姿识别系统 (树莓派 PyQt5 Opencv Mediapipe )附带语音提醒和短信提醒】 https://www.bilibili.com/video/BV1Mz4y1Y7XU/?share_source=copy_web&vd_source=bc65e527b7ed9427aa99da6cb43b5ff5

github地址:kuailexuexi123/sitting-posture-recognition (github.com)

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip 基于mediapipe+摄像头实时疲劳检测坐姿检测的提醒小工具python源码+详细注释.zip
### 回答1: 目前,在GitHub上可以找到许多基于图像识别的Qt系统的源码。这些源码主要分为两大类:一类是基于已有的图像识别算法进行二次开发的系统,另一类是完全自主研发的系统。 对于第一类,很多开发者通过使用Qt框架封装和优化开源图像识别算法,实现了一系列图像识别应用。这些源码提供了诸如人脸识别、物体检测、手势识别等功能的实现。这些系统独立于底层图像识别算法库,通过Qt的强大功能和良好的跨平台性能,为系统提供了友好的用户界面和良好的交互体验。 对于第二类,一些开发者基于Qt自主研发了一整套图像识别系统。这些系统往往包含了图像采集、特征提取、模式匹配等多个流程,并采用了很多成熟的图像算法和深度学习模型。这些源码通常是商业级别的系统,可以应用于各种场景,如智能安防、自动驾驶、智能机器人等。 无论是哪一类的源码,都具有一定的参考和学习价值。通过研究这些源码,可以了解到图像识别技术的应用和实现方式,同时也可以借鉴其中的优秀设计和实现思路。对于想要进行图像识别系统开发的开发者来说,GitHub上的这些源码是宝贵的资源。 总结来说,Qt基于图像识别系统的源码在GitHub上有很多可供参考的项目。开发者可以通过研究这些源码,了解图像识别技术的应用和实现方式,同时也可以借鉴其中的优秀设计和实现思路。 ### 回答2: 在GitHub上可以找到许多基于图像识别系统的Qt源代码项目。Qt是一个功能强大且跨平台的应用程序开发框架,它提供了丰富的图形和用户界面库,非常适合用于开发图像识别相关的应用程序。 这些基于图像识别系统的Qt源码项目通常包含了实现基本图像处理和计算机视觉算法的代码,以及与用户界面交互的界面设计。例如,有些项目使用Qt的图像处理库实现了图像预处理操作,比如灰度化、二值化、滤波等;同时,它们还包括了计算机视觉算法,比如特征提取、目标检测、图像匹配等。 这些项目还常常结合了Qt的图形界面模块,提供了友好的用户界面。通过这些界面,用户可以输入图像,设置识别参数,预览和保存处理后的图像,以及查看和分析识别结果。同时,一些项目还提供了图像标注和训练模块,以便用户可以通过标注和训练自定义模型,提高识别系统的性能。 总的来说,GitHub上的这些基于图像识别系统的Qt源码项目,提供了一种方便快捷的方式,让开发者能够基于这些项目进行二次开发,快速搭建自己的图像识别应用程序。通过使用Qt这个强大的应用程序开发框架,我们可以轻松实现图像处理和计算机视觉算法,并提供友好的用户界面,让用户能够方便地使用和操作识别系统,达到更好的用户体验和效果。 ### 回答3: 有关基于图像识别系统的Qt源码,可以在GitHub上找到很多开源项目。 其中一些受欢迎的图像识别库包括OpenCV、TensorFlow和Caffe等。这些库提供了用于图像处理和机器学习的丰富函数和算法,可以帮助开发者实现图像识别系统。 在GitHub上,你可以搜索这些图像识别库的关键词,然后根据自己的需求选择适合的项目。选择一个活跃的项目可以确保源码的稳定性和更新性。一般来说,活跃的项目会有较多的贡献者和更新日志。 一旦找到符合需求的项目,你就可以从GitHub上克隆源码到本地进行使用和修改。Qt作为一个跨平台的开发框架,可以与这些图像识别库结合使用,为图像识别系统提供用户界面和图像展示功能。 在使用GitHub上的源码时,注意遵守开源协议,遵循项目的授权要求。如果你对项目有改进或者增加功能的想法,也可以向原作者提交贡献,使得项目不断进步发展。 总而言之,通过在GitHub上搜索图像识别相关的开源项目,可以找到满足需求的Qt源码,并进行二次开发或者直接使用,提高开发效率和图像识别系统的质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值