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

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

文章目录

  • 使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂
    • 一、拟订实现功能
    • 二、技术方案
      • 1、方案1:(丢弃)
      • 2、方案2:(使用)
    • 三、功能设计(学生端 & 老师端)
    • 四、实现过程记录
      • 1、一些bug处理人脸识别小demo
      • 2、使用Pyinstaller打包项目

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

  • PyQt5知识点整理

  • leanCloud python SDK的使用

  • Agora python SDK的使用

  • AgoraRTC_local_face_regonization项目

  • 基于学生疲劳检测的在线课堂项目(附效果图)

一、拟订实现功能

系统实现架构
使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第1张图片

系统模块组成

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

系统运行要求

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

二、技术方案

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

1、方案1:(丢弃)

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

使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第2张图片

好处

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

不足

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

2、方案2:(使用)

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

使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第3张图片

好处

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

不足

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

Note

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

解决方法

  • python可以使用pyQt或者kivy开发windows桌面应用,并打包转化exe可执行文件;参考windows中python环境打包五种方式,无python的电脑也可用
  • pyQt基础知识;参考PyQt5基础知识 超详细!!!(含代码),PyQt+cv实现视频播放
  • python使用AgoraRTC API;参考https://github.com/AgoraIO-Community/Agora-Python-QuickStart(agora python项目),https://github.com/AgoraIO-Community/python-token-builder(agora token生成器),https://github.com/AgoraIO-Community/Agora-Python-SDK(agora python SDK源码,需要编译)
  • python使用leanCloud;参考Python SDK 安装指南
  • AgoraRTC和leanCloud的使用;参考跑通 Livecast 示例项目

关于Agora的其他参考资料

  • 示例代码
  • 基础示例
  • Agora社区
  • Build A Group Video Chat App In 15 Minutes

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

使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第4张图片

四、实现过程记录

具体实现步骤参考

  • PyQt5知识点整理

  • leanCloud python SDK的使用

  • Agora python SDK的使用

项目具体实现流程参考

  • 基于学生疲劳检测的在线课堂项目(附效果图)

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已经生成了,图片也绘制成功了,就是不能显示在界面上!!!

    使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第5张图片

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

2、使用Pyinstaller打包项目

参考

  • Python打包:PyInstaller 教程
  • Pyinstaller打包文件太大的解决方案
  • Pyinstaller打包torch程序终极保姆级历程-预防解决若干问题以及防止打包文件过大
  • pyinstaller打包sklearn库生成exe出错

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

使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第6张图片

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

这里需要对学生端和教师端单独打包,项目地址为https://gitee.com/wangxiaoxi-1/edu_fatigue_recog,建议不要单独打包成一个exe,这样运行会很慢,打包成dll文件比较好。
使用pyQt5 + agora + leanCloud实现基于学生疲劳检测的在线课堂_第7张图片

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

你可能感兴趣的:(项目,#,python,机器学习,qt,python,agora,leanCloud)