基于Python和OpenCV的疲劳检测系统设计与实现

项目运行

需要先安装Python的相关依赖:pymysql,Django==3.2.8,pillow 使用pip install 安装

第一步:创建数据库

第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句

第三步:修改源代码中的settings.py文件,改成自己的mysql数据库用户名和密码

第四步:运行命令:python manage.py runserver 8000

第五步:打开浏览器查看http://127.0.0.1:8000

毕设帮助,指导,本源码分享(见文末)

系统介绍:

本系统是一款基于Python编程语言和OpenCV图像处理库开发的疲劳检测系统,旨在通过分析人脸图像来判断测试者的疲劳程度。系统通过检测测试者的眼睛闭合程度、眨眼频次以及面部表情来表征测试者的疲劳程度,并通过Mysql数据库存储和管理图像识别数据。

整体功能包含:
  • 用户登录与注册
  • 实时人脸图像捕捉与分析
  • 疲劳程度评估与预警
  • 数据存储与管理
前台模块:
  • 登录/注册页面:用户可以进行系统登录或注册新账户
  • 图片识别界面:用户可以通过摄像头进行实时人脸图像捕捉
  • 照片分析界面:展示用户眼睛状态、打哈欠占比等疲劳分析数据
后台模块:
  • 照片管理界面:管理用户上传的图像内容,包括删除异常图片
  • 用户管理界面:修改用户信息,新增用户等操作

功能截图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码实现:


def register(request):
    """
    注册账号
    :return:
    """
    try:
        name = request.POST.get('username')
        passwd = request.POST.get('password')
        phone = request.POST.get('phone')
        user = User.objects.filter(name=name)
        if user:
            return JsonResponse({'message': '用户已存在,请直接登录'}, status=403)
        User.objects.create(
            name=name,
            password=passwd,
            phone=phone,
            role=2,
            description=''
        )
        response_data = {'message': '注册成功'}
        return JsonResponse(response_data)
    except Exception as e:
        print(e)
        return JsonResponse({'message': '注册失败'}, status=401)


def password(request):
    username = request.session['username']
    role = int(request.session['role'])
    user_id = request.session['user_id']
    return render(request, 'modify_password.html', locals())


def get_user(request):
    """
    获取用户列表信息 | 模糊查询
    :param request:
    :return:
    """
    keyword = request.GET.get('name')
    page = request.GET.get("page", '')
    limit = request.GET.get("limit", '')
    role_id = request.GET.get('position', '')
    response_data = {}
    response_data['code'] = 0
    response_data['msg'] = ''
    data = []
    if keyword is None:
        results_obj = User.objects.all()
    else:
        results_obj = User.objects.filter(name__contains=keyword).all()
    paginator = Paginator(results_obj, limit)
    results = paginator.page(page)
    if results:
        for user in results:
            record = {
                "id": user.id,
                "name": user.name,
                "password": user.password,
                "phone": user.phone,
                "role": user.role,
                'create_time': user.create_time.strftime('%Y-%m-%d %H:%m:%S'),
                "desc": user.description,
            }
            data.append(record)
        response_data['count'] = len(results_obj)
        response_data['data'] = data

    return JsonResponse(response_data)


def user(request):
    """
    跳转用户页面
    """
    username = request.session['username']
    role = int(request.session['role'])
    user_id = request.session['user_id']
    return render(request, 'user.html', locals())


def login_check(request):
    """
    登录校验
    """
    response_data = {}
    name = request.POST.get('username')
    password = request.POST.get('password')
    user = User.objects.filter(name=name, password=password).first()
    info = {}
    if user:
        # 将用户名存入session中
        request.session["username"] = user.name
        request.session["role"] = user.role
        request.session["user_id"] = user.id
        response_data['message'] = '登录成功'
        return JsonResponse(response_data, status=201)
    else:
        return JsonResponse({'message': '用户名或者密码不正确'}, status=401)


def edit_user(request):
    """
    修改用户
    """
    response_data = {}
    user_id = request.POST.get('id')
    username = request.POST.get('username')
    phone = request.POST.get('phone')
    desc = request.POST.get('desc')

    User.objects.filter(id=user_id).update(
        name=username,
        desc=desc,
        phone=phone)
    response_data['msg'] = 'success'
    return JsonResponse(response_data, status=201)


def del_user(request):
    """
    删除用户
    """
    user_id = request.POST.get('id')
    result = User.objects.filter(id=user_id).first()
    try:
        if not result:
            response_data = {'error': '删除失败!', 'message': '找不到id为%s' % user_id}
            return JsonResponse(response_data, status=403)
        result.delete()
        response_data = {'message': '删除成功!'}
        return JsonResponse(response_data, status=201)
    except Exception as e:
        response_data = {'message': '删除失败!'}
        return JsonResponse(response_data, status=403)


def change_password(request):
    """
    修改密码
    """
    old_pwd = request.POST.get('password1')
    username = request.session["username"]
    user_obj = User.objects.filter(name=username).first()
    if user_obj.password == old_pwd:
        User.objects.filter(name=username).update(password=request.POST.get('password2'))
        return JsonResponse({'msg': '修改成功!', 'error': 0})
    else:
        return JsonResponse({'msg': '旧密码不正确,请重新输入', 'error': 403})

论文参考:

在这里插入图片描述

源码获取:

源码下载

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Web开发】什么是Nuxt? 利用Nuxt快速搭建前端项目

Nuxt官网&#xff1a;https://nuxt.com/ 启动一个Nuxt项目 在vscode的项目文件终端运行以下命令&#xff1a; npx nuxilatest init <my-app>npm installnpm run dev然后就启动了一个Nuxt项目 安装Nuxt UI Nuxt UI官网&#xff1a;https://ui.nuxt.com/ npx nuxilates…

【acwing】算法基础课-搜索与图论

目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…

JAVA基础:集合 (学习笔记)

集合 什么是集合&#xff1f; 一种引用数据类型&#xff0c;可以存储多个数据 为什么要学习集合&#xff1f; 数组的缺点&#xff1a; &#xff08;1&#xff09;空间长度不可以改变。 &#xff08;2&#xff09;没办法获得数组中真实的元素个数。 &#xff08;3&#xff…

江协科技STM32学习- P22 实验-ADC单通道/ADC多通道

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

『 Linux 』网络传输层 - TCP (一)

文章目录 TCP协议TCP数据段格式TCP确认应答机制TCP流量控制 TCP协议 TCP协议(Transmission Control Protocol , 传输控制协议) 是互联网协议套件中的核心协议之一; 主要用于确保数据在网络上的可靠传输,其具有以下特点: 面向连接 在数据传输前,TCP需要在通信双方之间建立一个连…

MySQL的group_concat函数:将分组中的多个值连接成一个字符串的聚合函数

MySQL的group_concat函数&#xff1a;将分组中的多个值连接成一个字符串的聚合函数 主要作用说人话解释举个&#x1f330; 主要作用 可以将同一组内的多个值合并为一个由指定分隔符分隔的字符串&#xff0c;简化数据展示和分析。 说人话解释 group_concat()会计算哪些行属于…

怎么找歌曲的伴奏?找伴奏不再难

在音乐创作、演唱练习或是娱乐活动中&#xff0c;找到一首歌曲的伴奏版本是一个常见的需求。伴奏不仅能够帮助我们更好地理解歌曲的结构和旋律&#xff0c;还能为演唱者提供一个专业的音乐背景。那么&#xff0c;我们该如何有效地找到歌曲的伴奏呢?本文将为你提供几种实用的方…

ubuntu18.04安装xenomai3.1(百分百成功版)

准备工作 1、下载ubuntu18.04.06。 https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso 2、安装虚拟机vmware或virtual machine。 开始安装xenomai 1、在桌面安装一个文件夹,文件夹名字叫xenomai。 2、 在终端输入uname-a 查看自己的内核版本。 3、下…

Linux学习笔记 | sudo命令的基本使用

sudo命令 sudo 命令是 Unix 和 Linux 系统中用于执行需要超级用户权限&#xff08;即 root 权限&#xff09;操作的工具。它允许系统管理员授予某些用户&#xff08;或用户组&#xff09;以 root 或其他指定用户的权限来运行特定命令&#xff0c;而无需知道 root 用户的密码。…

电脑怎么进行全盘加密?

1.使用Windows自带的BitLocker&#xff1a; 打开“控制面板”&#xff0c;选择“系统和安全”&#xff0c;然后点击“BitLocker驱动器加密”。 选择要加密的驱动器&#xff0c;点击“启用BitLocker”。 选择解锁驱动器的方式&#xff0c;通常选择“使用密码解锁驱动器”&…

内盘期货配资牛/文华财经有资管软件吗

文华财经不仅提供行情、交易、资讯于一体的综合性期货交易软件&#xff0c;还针对投资者的资产管理需求&#xff0c;开发了一系列功能强大的资管软件。这些软件的核心功能包括实时行情监控、技术分析工具、交易执行系统以及风险管理模块&#xff0c;全方位满足了期货配资投资者…

Python 函数返回值之None类型

什么是None None是类型‘NoneType’字面量&#xff0c;用于表示&#xff1a;空的、无意义的 函数如何返回None 不使用return语句即返回None 主动return None 使用场景 函数返回值if判断变量定义 练习&#xff1a; 练习一&#xff1a;无return语句的函数返回值 # 无ret…

自动发现-实现运维管理自动化

nVisual-Discovery是一款自动化工具软件&#xff0c;通过多种自动发现技术&#xff0c;协助运维管理人员快速建立可视化的网络文档&#xff0c;提升网络管理的效率与准确性。 01 IP扫描发现 当我们新接手一个网络运维项目&#xff0c;通常缺乏精准的网络文档数据&#xff0c;…

uniapp 引入了uview-ui后,打包错误,主包过大解决方案

原因&#xff1a;由于使用uniapp来设计小程序&#xff0c;使用uview的组件库&#xff0c;导致了主包过大&#xff0c;无法打包 前提条件&#xff1a;已经完成了分包&#xff0c;如果还没有分包的先分包&#xff0c;需要上传代码时用到 1. 通常情况&#xff0c;大多数都是通过点…

Oracle SQL Developer 同时打开多个table的设置

Oracle SQL Developer 同时打开多个table的设置 工具 》 首选项 》数据库 》对象查看器&#xff0c;勾选 “自动冻结对象查看器窗口”

面试题:JVM(一)

1. JVM概述 1.1 JVM的生命周期 说说Java虚拟机的生命周期&#xff08;阿里&#xff09; 虚拟机的启动 Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的&#xff0c;这个类是由虚拟机的具体实现指定的。 虚拟机的退出有如下…

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…

unity游戏开发之塔防游戏

如何制作塔防游戏 让我们以迷你游戏的形式创建一个休闲塔防。 从基本处理到适用技术&#xff0c;应有尽有&#xff0c;因此您只需制作一次即可获得 Unity 中的游戏制作专业知识。 与背景素材结合使用时&#xff0c;您将获得以下游戏视图&#xff1a; 由于在创建过程中使用了 …

Google DeepMind的研究人员提出了Talker-Reasoner框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…