使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂

34 篇文章 4 订阅
19 篇文章 3 订阅

使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂

项目使用到的知识点已经单独整理出来了

一、拟订实现功能

系统实现架构
在这里插入图片描述

系统模块组成

  • 该系统包含实时通讯模块和疲劳检测模块
  • 后续会增加疲劳窗口优先排序(老师客户端),屏幕共享,即时通讯(聊天框)模块。

系统运行要求

  • 老师客户端和学生客户端可以实现音视频实时通讯。
  • 学生客户端在摄像头完成人脸视频采集之后,会通过疲劳检测模块实现学生疲劳状态的自测,并将检测结果返回到服务器中。
  • 服务器会将各个学生的疲劳结果转发给老师客户端。

二、技术方案

要实现以上功能,需要完成1个服务器 + 2个客户端的设计(老师不需要疲劳自测),实时通讯功能则使用agoraRTC SDK来实现

1、方案1:(丢弃)

  • 使用Chrome浏览器实现学生端和老师端的实时通讯
  • 将疲劳检测模块单独打包到学生系统上,开启进程实现监听
  • 开发Chrome浏览器插件
  • 教学页面开启时,会开启本地摄像头,此时通过Chrome插件告知疲劳检测模块(python实现的)完成视频流的采集和检测,并将结果发送给leanCloud服务器。
  • 使用leanCloud,实现疲劳检测结果的转发。

在这里插入图片描述

好处

  • 基于HTML5,js开发的浏览器端比较好实现,使用AgoraRTC SDK也不那么困难

不足

  • Chrome插件开发难度可能比较大,受Chrome浏览器版本影响较大
  • 实现Chrome插件与疲劳检测模块的通讯可能有点困难

2、方案2:(使用)

  • 在学生windows端上安装学生桌面应用,在老师windows端安装老师桌面应用
  • 学生在使用桌面应用进入房间、开启摄像头时,会完成学生的疲劳自测(python实现),并将自测结果上传到leanCloud服务器。
  • leanCloud向老师客户端完成学生疲劳检测结果的转发。

在这里插入图片描述

好处

  • windows端实现在线课堂,效果比手机端好。
  • leanCloud是BaaS层的软件,自己可以不用专门开发后端,只需要在前端通过SDK访问leanCloud,就可以实现客户端信息的交互。

不足

  • windows桌面应用的实现需要学习Visual C++,MFC知识,学习成本较大

Note

  • 在student客户端和leanCloud之间需要设置一个队列,用于暂存学生的检测信息,通过简单数据整合(避免冗余信息的更新)之后,减少leanCloud服务器的访问量。

解决方法

关于Agora的其他参考资料

三、功能设计(学生端 & 老师端)

在这里插入图片描述

四、实现过程记录

具体实现步骤参考

项目具体实现流程参考

1、一些bug处理人脸识别小demo

  • 要求

    • 学生端在本地完成人脸定位之后,会将自己的人脸检测数据上传到leanCloud中,老师端会从leanCloud中实时获取当前时刻每个学生端数据,检测学生人脸是否在屏幕上
    • leanCloud有API访问限制(3万次/天),以及数据存储限制(1GB)
  • 一些bug处理

    在实现滚动条展示小流视频窗时,存在很多bug,主要是由于多线程操作导致状态出现各种不确定性变化,以及对用户陆续登录的模拟较为困难。

    在频道上的用户个数用户正常情况出现bug是否解决
    1学生端/老师端用户点击上台,此时本地的小流窗口关闭大流窗口正常,但小流窗口没有关闭
    3老师端用户点击下台,此时本地的小流窗口打开,大流窗口关闭大流窗口正常关闭,但本地小流窗口把其他用户的小流窗口挤掉了。主要存在问题是初始化的stream_low比当前的stream_low少,导致每次下台时就会把学生给挤掉
    /学生端/老师端需要修改GUI界面大小,有些笔记本根本无法显示笔记本在小于1400x900分辨率的笔记本上显示出界
    通过预留人数(100),利用ScrollArea中的VerticalLayout来添加QLabel(初始化时已固定好座位),然后设置verticalLayoutWidget、scrollAreaWidgetContents的geometry,接着把QLabel分配给uid即可。

    这里要注意的是,如果不用VerticalLayout来对QLabel布局,就会导致后台数据更新时,虽然QLabel已经生成了,图片也绘制成功了,就是不能显示在界面上!!!

    在这里插入图片描述

    可以理解成:班级上有100个座位,如果有人想加入这个频道是可以的,只不过看不到他的人脸,他只能站着旁观。

2、使用Pyinstaller打包项目

参考

一开始使用是torch加载模型(人脸关键点检测模型mobileNetV2),但是打包一直失败,提示关于gpu的dll文件没有找到,虽然想尝试安装torch cpu版本,看看能不能正常打包,但是当运行项目时,发现很卡,就放弃了。

在这里插入图片描述

后来找到mobileNetV2 - onnx版本(原项目地址https://github.com/cunjian/pytorch_face_landmark,人脸关键点检测精度还挺高)pyinstaller打包才能成功。

这里需要对学生端和教师端单独打包,项目地址为https://gitee.com/wangxiaoxi-1/edu_fatigue_recog,建议不要单独打包成一个exe,这样运行会很慢,打包成dll文件比较好。
在这里插入图片描述

由于student端用到了人脸检测SCRFD-0.5F模型,人脸关键点检测mobileNetV2 - onnx模型,头部姿态校准模型,疲劳检测模型,打包后需要将student项目下的所有文件夹 + config.yaml,原封不动地拷贝到dist.main_window文件夹下,因为项目的运行需要通过相对路径找到这些权重文件并加载模型(文件夹中的py文件可以去掉)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值