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开发一个在线课堂学生疲劳检测系统。通过视频流捕获、面部检测、疲劳检测和结果展示,我们展示了整个系统的搭建过程。

相关推荐
凡人的AI工具箱4 分钟前
15分钟学 Go 第 54 天 :项目总结与经验分享
开发语言·人工智能·后端·算法·golang
R-sz8 分钟前
java如何利用流式计算筛选出同一天时间最新的一条数据
java·windows·python
B站计算机毕业设计超人12 分钟前
计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化
观沧海12 分钟前
LangChain实战课-1.开篇词|带你亲证AI应用开发的“奇点”时刻
python
程序员阿龙19 分钟前
基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统
java·spring boot·后端·性格测评平台开发·用户性格测评系统·个性分析与推荐系统·心理测评与数据分析
青龙摄影23 分钟前
如何用re从第1排第2个位置中找到两个数字返回(0,1)
python
Future_yzx24 分钟前
Spring基础之——控制反转(IOC)、依赖注入(DI)与切面编程(AOP)概念详解(适合小白,初学者必看)
java·后端·spring
斗-匕27 分钟前
Java 语言的强大特性
java·开发语言·python
小爬虫程序猿33 分钟前
当API遇上“交通堵塞”:处理API限制的艺术
android·爬虫·python
DongHappyyy41 分钟前
Python读取prophesee相机输出的raw文件
python·event·raw·prophesee