毕业设计:学生坐姿识别系统(3)——中期:基本功能介绍以及少部分代码的注释

前期准备工作请看:

毕业设计:学生坐姿识别系统(1)——前期准备_一个爱python的小袁子的博客-CSDN博客

前期研究的方法以及思路请看:

毕业设计:学生坐姿识别系统(2)——中期:前期研究的方法以及思路_一个爱python的小袁子的博客-CSDN博客 

本篇内容安排如下:介绍本设计的基本功能、基本思路、代码程序以及结果展示。

1.基本功能

所设计的系统设有登录界面和主界面。其中主界面所拥有的功能有选择图片文件、开始识别、显示识别结果、显示识别时间、显示所打开的图片文件、显示处理后的图片、退出登录以及最小化和退出。

2.基本思路

以学生坐姿识别为研究对象,将从图像提取到的人体关键点进行训练,构建学生坐姿分类模型,设计出一种用于学生坐姿识别的实现方法。具体内容如下:

(1)将常用的坐姿分为标准坐姿、驼背、手撑头坐(不分左右)、趴着(不分左右)四种类别,采用USB摄像头进行拍照以采集图像作为坐姿分类识别的原始数据。

(2)利用Blaze pose姿势估计模型实现人体骨骼关键点检测。每个关键点都使用三个自由度以及可见性分数进行预测,其精度优于大多数现有模型。

(3)使用SVM分类器对坐姿图像进行训练和识别,将训练后的数据加上目标值,构建最终的坐姿分类模型,利用目标值对坐姿图像进行分类识别。

(4)考虑到用户需求,使用PyQt5设计一个用户界面,包括登录界面和检测的主界面。

3.代码程序

(1)数据集处理:datecsv.py

import mediapipe as mp
import cv2
import numpy as np
import pandas as pd
import os

mpPose = mp.solutions.pose
pose = mpPose.Pose()
mpDraw = mp.solutions.drawing_utils # For drawing keypoints
points = mpPose.PoseLandmark # Landmarks

data = []
for p in points:
        x = str(p)[13:]
        data.append(x + "_x")
        data.append(x + "_y")
        data.append(x + "_z")
        data.append(x + "_vis")
data = pd.DataFrame(columns = data) # Empty dataset
count = 0

#----------------------------------------------------------------------------------
# 第一步 切分训练集和测试集
#----------------------------------------------------------------------------------
X = [] #定义图像名称
Y = [] #定义图像分类类标
Z = [] #定义图像像素

for t in range(1, 5):
    #遍历文件夹,读取图片,本例中的图像文件可以在上面分享的链接中提取
    for f in os.listdir("posedatatrain/%s" % t):
        temp = []
        #获取图像名称
        #X.append("TRAIN\\" +str(i) + "\\" + str(f))
        img = cv2.imread("posedatatrain/" + str(t) + "/" + str(f))
        imageWidth, imageHeight = img.shape[:2]
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        blackie = np.zeros(img.shape)  # Blank image
        results = pose.process(imgRGB)
        if results.pose_landmarks:
            # mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS) #draw landmarks on image
            mpDraw.draw_landmarks(blackie, results.pose_landmarks, mpPose.POSE_CONNECTIONS)  # draw landmarks on blackie
            landmarks = results.pose_landmarks.landmark
            for i, j in zip(points, landmarks):
                temp = temp + [j.x, j.y, j.z, j.visibility]
            data.loc[count] = temp
            count += 1
        list = t
        X.append("posedata/" + str(t) + "//" + str(f))  # 获取图像名称
        Y.append(t)  # 获取图像类标即为文件夹名称


        cv2.imshow("Image", img)
        cv2.imshow("blackie", blackie)
        cv2.waitKey(100)
Y = np.array(Y)
print(len(data))
print(Y)
print(len(Y))
print('本次执行检索到 ' + str(len(Y)) + ' 张图像\n')
data.to_csv("dataset.csv")
reData=pd.read_csv("dataset.csv")
reData['target']= pd.Series(Y)
reData.to_csv("dataset1.csv",index=False)

(2)模型参数设定:svmtest.py

SVC模型关于参数的设置主要有惩罚参数C、核函数kernel、核函数参数gamma等,本文使用的核函数是图像处理中最为常用的“RBF”,只需要调整惩罚参数C和核函数参数gamma两个参数,使用学习曲线即可获得这两个参数的实验最佳值。

惩罚参数C的最佳取值:1.30,核函数gamma的最佳取值:0.001。

参考地址:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值