基于轻量级CNN开发构建学生课堂行为识别系统

news2024/11/16 9:00:52

其实早在之前,我的一些文章里面就有做过关于学生课堂行为检测识别的项目,感兴趣的话可以自行移步阅读:

《yolov4-tiny目标检测模型实战——学生姿势行为检测》

《基于yolov5轻量级的学生上课姿势检测识别分析系统》

这些主要是偏目标检测类的项目

这里主要是想基于图像识别的方式来实现不同类型课堂行为的识别。首先来看下效果:

这里识别的课堂行为一共有以下5种,如下:

drink     喝水
listen    听课
phone     玩手机
trance    走神
write     记笔记

简单看下数据:

drink:

listen:

phone:

trance:

write:

首先解析构建标砖h5数据集如下:

for one_label in os.listdir(picDir):
    for one_pic in os.listdir(picDir + one_label + "/"):
        if (
            one_pic.endswith("jpg")
            or one_pic.endswith("png")
            or one_pic.endswith("jpeg")
        ):
            try:
                one_path = picDir + one_label + "/" + one_pic
                print("one_path: ", one_path)
                # 图片
                one_img = cv2.imread(one_path)
                one_img = cv2.resize(one_img, (100, 100))
                one_img = one_img.transpose((2, 0, 1))
                # 标签
                one_pic_classes = one_label
                one_y = getY(one_pic_classes)
                # 整合
                X_train.append(one_img)
                y_train.append(one_y)
            except Exception as e:
                print("Exception: ", e)

接下来搭建轻量级的CNN模型,核心实现如下:

model = Sequential()
model.add(
    Conv2D(
        64,
        (3, 3),
        strides=(2, 2),
        input_shape=input_shape,
        padding="same",
        activation="relu",
        kernel_initializer="uniform",
    )
)
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(
    Conv2D(
        128,
        (3, 3),
        strides=(2, 2),
        padding="same",
        activation="relu",
        kernel_initializer="uniform",
    )
)
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(
    Conv2D(
        256,
        (3, 3),
        strides=(2, 2),
        padding="same",
        activation="relu",
        kernel_initializer="uniform",
    )
)
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256, activation="relu"))
model.add(Dropout(0.1))
model.add(Dense(512, activation="relu"))
model.add(Dropout(0.15))
model.add(Dense(numbers, activation="softmax"))
model.compile(
    loss="categorical_crossentropy", optimizer="sgd", metrics=["accuracy"]
)

训练出来的模型很轻量级,只有不到5MB的大小。

训练集-测试集准确度曲线如下:

损失值曲线如下:

训练结束还绘制了混淆矩阵如下:

为了使得推理计算过程可视化,这里编写了专用的界面可以方便使用,如下:

点击上传自己想要测试的图片:

点击执行识别即可启动推理计算:

测试结果还是很不错的,这点从混淆矩阵上也可以印证。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Raft论文阅读

Raft 论文阅读 参考: Raft Paper 一文搞懂Raft算法 - xybaby Raft Demo Raft 实现汇总 Raft 为什么是更易理解的分布式一致性算法 空挡) Raft协议实现之etcd(一):基本架构 Raft 协议 - buttercup 【raft】学习二:etcd/raft raft数据结构学…

第四十八讲:神州路由器IPv6静态路由配置

实验拓扑图如下所示 配置步骤: 步骤1:配置R1接口 R1_config#ipv6 unicast-routing //启用IPv6路由 R1_config#in g0/4 R1_config-_g0/4#ipv6 address 2001:10::1/64 //手工配置IPv6地址 R1_config-…

LInux背景【Linux】

一、技术推动社会发展的基本动力作为万物之长的人类,我们相较于其他的生物哪里是特殊的?举一个例子:老虎需要几千上万年进化来的爪子,人类可以在更短的时间内通过制造石矛石斧这类工具变可以模拟。通过这一个例子我们得出——人的…

python自学之《21天学通Python》(7)

第10章 Python进阶话题 10.1 函数与命名空间 Python中可以通过模块来管理复杂的程序,而将不同功能的函数分布在不同的模块中,那么函数及其全局命名空间决定了函数中引用全局变量的值。函数的全局命名空间始终是定义该函数的模块,而不是调用该…

java面试之Spring篇

一、Spring概述 1. Spring由哪些模块组成 spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。spring beans…

windows无线连接Linux服务器,实现终端操作与文件传输

0、建议安装完Ubuntu后按照百问网的设置安装必要的linux软件 执行: git clone https://e.coding.net/weidongshan/DevelopmentEnvConf.git cd DevelopmentEnvConf sudo ./Configuring_ubuntu.sh 等待安装完成,大约半个小时事件。 我搭建的环境 家…

git的使用

一、创建仓库 gitee官网创建好用户之后,我们点创建仓库。 选择好语言,开源许可证随便选一个即可,模板我们最好设置一个Readme文件,方便后面写明仓库的介绍。 分支模型我们新手选一个单分支模型就可以了。 因为仓库创建的时候只能…

Windows下Canal.admin-1.1.6安装部署

一、下载解压 1 下载 进入页面:Release v1.1.6 alibaba/canal GitHub 下载 canal.admin-1.1.6.tar.gz 2 解压 解压至目录:D:\Tools\canal.admin-1.1.6 二、创建数据库 canal_manager 1 创建时间数据库:canal_manager 2 初始化元数据…

并发编程学习案例-模拟抢红包

一、前言 再来系统动手学习一下Java并发编程。 知识点:CountDownLatch 的发令枪使用模式;红包均分,最后一个分不完的解决方法 抢红包的需求,每个红包均分,最后一个除外 1. 设置红包总额 2. 设置红包的个数 3. 模拟抢红包的人数 &a…

图文结合带你搞懂MySQL日志之relay log(中继日志)

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者: KAiTO文章来源:GreatSQL社区原创 什么是中继日志(relay log) 中继日志&a…

线程,协程,异步编程模型

线程,协程,异步编程模型 1.线程编程模型 我们知道线程是 cpu 调度的基本单位。 如果是一个单核的cpu, 而且现在有3个线程需要执行。那么可能是 线程 1, 2, 3 通过 cpu分片, 轮流执行。 那么 如果不将 cpu 进行分片, 而是 线程 1,2,3 轮流执行&#x…

Springboot中如何优雅的写好controller层代码

前言优雅?看到这个词,我第一反应是什么是优雅?怎么写才算优雅?一千个读者有一千个哈姆雷特,每个人的经验、阅历不同,也许理解就不同。我对优雅的理解很简单,就是简洁有效、容易理解,…

递归、迭代、单向快排的实现和两种优化方法

目录 快速排序 实现代码​​​​​​​ 时间复杂度 快排的优化 随机选择策略 三位取中法 非递归的快排 单向快排 快速排序 快速排序算法是基于分治策略的一个排序算法,其基本思想是对于输入的子数组进行分解、递归求解,最后合并。 分解&#xff…

Fiddler - 夜神模拟器证书安装App抓包

Fiddler- 夜神模拟器证书安装App抓包 文章目录Fiddler- 夜神模拟器证书安装App抓包前言一、软件安装1.Openssl安装1.1下载安装1.2配置环境变量1.3查看openssl版本,输入命令:openssl version2.夜神模拟器安装1.1 下载安装1.2工具准备,MT管理器…

React相关扩展一(setState、lazyLoad、Hooks相关)(九)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…

基于轻量级CNN的WHDLD多标签遥感分类识别系统

WHDLD数据成像波段包括R、G、B波段,数据覆盖包括6类地貌:裸地、建筑物、人行道、道路、植被、水域。数据集中包含4940张遥感影像及对应地物分类标记样本,影像大小为256x256像素,影像以jpg格式存储,标签数据格式为单通道…

高级前端常考手写面试题合集

解析 URL Params 为对象 let url http://www.domain.com/?useranonymous&id123&id456&city%E5%8C%97%E4%BA%AC&enabled; parseParam(url) /* 结果 { user: anonymous,id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字…

React(coderwhy)- 09(项目实战 - 1)

创建React项目 ◼ 创建项目的方式:create-react-app ◼ 项目配置:  配置项目的icon  配置项目的标题  配置jsconfig.json 新建jsconfig.json文件,在文件中粘贴以下内容{"compilerOptions": {"target": "es5","…

【数据结构趣味多】循环队列

目录 函数介绍及模拟实现 Front()函数 Rear()函数 enQueue()函数 deQueue()函数 isEmpty()函数 isFull()函数 循环队列模拟题 定义:把队列的头尾相连接的的顺序存储结构称为循环队列;循环队列的是由顺序表实现的。 为什么要使用循环队列&#…

Android MVVM之SavedStateHandle数据保存之详解与使用。

一、介绍 SavedStateHandle从名字可以看出,是保存状态的。这个类常和MVVM中的ViewModel搭配使用,对页面生命周期的数据状态的缓存与恢复做一个容器。这个容易相对onSaveInstanceState(Bundle)要更强一点,保存的数据类型也比较丰富&#xff0c…