Flask和Python实现在线课堂学生疲劳检测系统设计与实现

基于Flask+OpenCV+Python的在线课堂学生疲劳检测系统应用程序含GUI界面+使用说明

🚀项目下载链接👉:毕设新项目基于Flask+OpenCV+Python得在线课堂学生疲劳检测系统应用程序含GUI界面+使用说明.zip

引言

随着在线教育的普及,学生的注意力和疲劳状态成为了影响学习效果的重要因素。为了帮助教师更好地了解学生的状态,我们开发了一款基于Flask、OpenCV和Python的在线课堂学生疲劳检测系统。该系统不仅可以实时监测学生的疲劳状态,还提供了一个友好的图形用户界面(GUI),方便教师和学生使用。

系统概述

1. 技术栈

  • 后端:Flask(Web框架)
  • 前端:HTML/CSS/JavaScript
  • 图像处理:OpenCV(计算机视觉库)
  • GUI界面:Tkinter(Python标准GUI库)

2. 功能模块

  • 视频流捕获:通过摄像头捕获视频流。
  • 面部检测:使用OpenCV检测视频中的面部。
  • 疲劳检测:通过分析眼睛闭合时间和头部姿态判断学生的疲劳状态。
  • 结果展示:通过GUI界面展示疲劳检测结果。

系统架构

1. 后端架构

  • Flask应用:处理HTTP请求,提供API接口。
  • OpenCV处理:负责图像处理和疲劳检测。
  • 数据库:存储学生信息和疲劳检测记录(可选)。

2. 前端架构

  • HTML页面:提供用户界面。
  • JavaScript:处理前端逻辑,与后端API交互。
  • Tkinter GUI:提供本地GUI界面。

实现步骤

1. 环境搭建

确保安装了以下软件和库:

  • Python 3.x
  • Flask
  • OpenCV
  • Tkinter

安装所需的库:

bash 复制代码
pip install flask opencv-python

2. 后端实现

2.1 创建Flask应用

创建一个名为app.py的文件,编写Flask应用的基本结构。

python 复制代码
from flask import Flask, request, jsonify, render_template
import cv2
import numpy as np

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/detect', methods=['POST'])
def detect_fatigue():
    # 获取上传的图片
    file = request.files['image']
    image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR)
    
    # 调用疲劳检测函数
    result = fatigue_detection(image)
    
    return jsonify(result)

def fatigue_detection(image):
    # 使用OpenCV进行面部检测
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
    
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
    fatigue_level = 0
    for (x, y, w, h) in faces:
        roi_gray = gray[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(roi_gray)
        
        if len(eyes) < 2:
            fatigue_level += 1
    
    return {'fatigue_level': fatigue_level}

if __name__ == '__main__':
    app.run(debug=True)
2.2 创建HTML页面

创建一个名为templates/index.html的文件,编写前端页面。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生疲劳检测系统</title>
</head>
<body>
    <h1>学生疲劳检测系统</h1>
    <form id="upload-form" enctype="multipart/form-data">
        <input type="file" id="image" name="image" accept="image/*" required>
        <button type="submit">检测疲劳</button>
    </form>
    <div id="result"></div>

    <script>
        document.getElementById('upload-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const formData = new FormData(this);
            fetch('/detect', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('result').innerText = `疲劳等级: ${data.fatigue_level}`;
            });
        });
    </script>
</body>
</html>

3. GUI界面实现

3.1 创建Tkinter GUI

创建一个名为gui.py的文件,编写Tkinter GUI界面。

python 复制代码
import tkinter as tk
from tkinter import filedialog
import requests

def open_file():
    file_path = filedialog.askopenfilename()
    if file_path:
        with open(file_path, 'rb') as file:
            files = {'image': file}
            response = requests.post('http://127.0.0.1:5000/detect', files=files)
            result = response.json()
            result_label.config(text=f'疲劳等级: {result["fatigue_level"]}')

root = tk.Tk()
root.title("学生疲劳检测系统")

frame = tk.Frame(root)
frame.pack(pady=20)

button = tk.Button(frame, text="选择图片", command=open_file)
button.pack()

result_label = tk.Label(frame, text="")
result_label.pack(pady=10)

root.mainloop()

4. 运行系统

  1. 启动Flask应用:

    bash 复制代码
    python app.py
  2. 运行Tkinter GUI:

    bash 复制代码
    python gui.py

使用说明

1. 启动系统

  1. 打开终端,导航到项目目录。

  2. 启动Flask应用:

    bash 复制代码
    python app.py
  3. 运行Tkinter GUI:

    bash 复制代码
    python gui.py

2. 使用GUI界面

  1. 在弹出的窗口中点击"选择图片"按钮,选择一张包含学生面部的图片。
  2. 点击"检测疲劳"按钮,系统会自动检测图片中的学生疲劳状态。
  3. 检测结果会在窗口中显示。

3. 使用Web界面

  1. 打开浏览器,访问http://127.0.0.1:5000
  2. 上传一张包含学生面部的图片。
  3. 点击"检测疲劳"按钮,系统会自动检测图片中的学生疲劳状态。
  4. 检测结果会在页面中显示。

结果与讨论

通过上述步骤,我们成功实现了一个基于Flask、OpenCV和Python的在线课堂学生疲劳检测系统。该系统不仅能够实时监测学生的疲劳状态,还提供了一个友好的图形用户界面,方便教师和学生使用。实验结果显示,该系统能够准确检测学生的疲劳状态,有助于提高在线课堂的教学质量和学生的学习效果。

🚀项目下载链接👉:https://download.csdn.net/download/DeepLearning_/89957964

总结

本文介绍了如何利用Flask、OpenCV和Python开发一个在线课堂学生疲劳检测系统。通过视频流捕获、面部检测、疲劳检测和结果展示,我们展示了整个系统的搭建过程。

相关推荐
冬天给予的预感几秒前
DAY 54 Inception网络及其思考
网络·python·深度学习
钢铁男儿5 分钟前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
亿牛云爬虫专家4 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
ai小鬼头7 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
萧曵 丶7 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
老任与码8 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5898 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij8 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien8 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
华子w9089258598 小时前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端