IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于 M5Stack-UnitV2 实现的宿舍口罩佩戴情况监测系统 -> 正文阅读

[人工智能]基于 M5Stack-UnitV2 实现的宿舍口罩佩戴情况监测系统

我生来就是高山而非溪流,我欲于群峰之巅俯视平庸的沟壑。我生来就是人杰而非草芥,我站在伟人之肩藐视卑微的懦夫。
---- 华坪女高校训
烂漫的山花中,我们发现你。自然击你以风雪,你报之以歌唱。命运置你于危崖,你馈人间以芬芳。不惧碾作尘,无意苦争春,以怒放的生命,向世界表达倔强。你是崖畔的桂,雪中的梅。
---- 2020年度《感动中国》人物给张桂梅的颁奖词

一、概括

本次项目的源于硬禾学堂和 M5Stack 联合举办的活动 【你玩转我全返】M5Stack UnitV2 - 首款全功能一体化AI摄像头,活动采用的是 M5Stack UnitV2,是M5Stack 的首款全功能一体化AI摄像头,功能强大,可玩性很高,稍后会详细介绍这款硬件。

image-20210717161944852

来看下本次项目实现的任务:

识别宿舍出入人员是否有正常佩戴口罩,发现异常立即报警,并将每日的数据发送到PC端或者云端,形成报表。

现在拆解一下任务,看看如何分成简单的部分去实现,如下图所示:

image-20210717152413393

文章就按照这四个部分去实现,然后整合后,就能够得到最终的结果。

简述一下我的思路,通过 M5Stack 官方提供的 V-Training(Ai模型训练服务),轻松构建出口罩佩戴与否的识别模型,然后就能够得到人员是否佩戴口罩的情况,然后将数据传送给电脑,然后通过在 PC 端使用 python 来分析 M5Stack UnitV2 传过来的数据,根据数据得知人员是否佩戴口罩,若不佩戴则连接电脑的音箱发出报警声,同时提取需要的数据进行保存,同样使用 python 将数据可视化,得到每天口罩佩戴情况的报表。

image-20210717154426790

这个网站也有很多大佬基于这款硬件开发一些有趣的项目,可以参考一下:M5Stack UnitV2 - 用于边缘计算的独立 AI 摄像头 (SSD202D)

二、硬件模块介绍:M5Stack UnitV2 - 用于边缘计算的独立 AI 摄像头

我们来看看这款硬件,

UnitV2 是 M5Stack 推出的一款高效率的AI识别模块,采用 Sigmstar SSD202D(集成双核Cortex-A7 1.2Ghz处理器)控制核心,集成128MB-DDR3内存,512MB NAND Flash, 1080P摄像头。内嵌Linux操作系统,集成丰富的软硬件资源与开发工具,致力带给用户开箱即用,简洁高效的Ai开发体验。

UnitV2 采用 SigmstarSSD202D (集成双核 Cortex-A7 1.2Ghz处理器)控制核心,集成了 M5Stack 开发的多个即用型AI识别应用程序(例如:人脸识别、对象跟踪、颜色跟踪器、形状检测器、条形码检测器和其他常用功能),可以帮助用户快速构建自己的AI应用程序。

主要应用在以下方面:

  • Ai识别功能开发
  • 工业视觉识别分类
  • 机器视觉学习

UnitV2即插即用,具有内置的USBLAN。通过USB-C接口连接到PC时,他将自动与UnitV2建立网络连接,也可以通过Wi-Fi连接和调试。UART串口通讯,所有标识内容通过串口自动以JSON格式输出,调用方便。内嵌Linux操作系统,集成丰富的软硬件资源与开发工具。可点击链接了解板卡详情:https://docs.m5stack.com/zh_CN/unit/unitv2。

产品特性如下:

  • Sigmstar SSD202D:双核 Cortex-A7 1.2Ghz 处理器
  • 128MB DDR3
  • 512MB NAND Flash
  • GC2145 1080P Colored Sensor
  • 内置麦克风
  • WiFi 2.4GHz

产品原理图如下:

image-20210717161759761

更多信息,请到官网查看:UnitV2 中文文档

三、项目实现

image-20210718163934487

下面就根据上图的四个点展开详细描述,尽量把实现细节描述地清楚一些。

3.1、M5Stack UnitV2实现口罩佩戴识别

本人是 AI 方面的小白,虽然不懂这个实现的底层原理,但是依葫芦画瓢的能力还是有的,直接使用 M5Stack 官方提供的 V-Training(Ai模型训练服务)即可轻松构建自定义的识别模型。具体详细操作步骤见 V-Training 教程

下面讲述几个关键的步骤:

  • 获取训练素材

    也就是训练的图片,数量越多越好,素材拍摄场景要贴合实际识别的的场景,可以使用 M5Stack UnitV2 直接拍摄保存,然后保存下来:

    如下所示:

    image-20210718184413335

    上文只是使用了网图,我们最好是得到自己监测环境的效果图,这样训练之后,效果会更好些。

    下面是我自己在宿舍拍摄的人脸图片数据,包括人脸戴口罩与不戴口罩的图片,我们待会会对这些图片进行标记。

    image-20210718183216455

  • 标记素材

    登陆 V-Training在线训练平台,对拍摄的图片进行标记,主要标记是否为人和是否佩戴口罩,

    佩戴口罩的做如下标记,就是标记人和佩戴口罩:person 和 Mask

    image-20210718233729828

    未佩戴口罩的做如下标记,就是标记人和未佩戴口罩:person 和 NoMask

    image-20210718233859548

    按照上图的方式操作拍摄的几十张图,给每一个图都做上上面两种标记方式。

    最后点击训练即可,等待服务器训练完成,得到训练后的模型。

    image-20210719190139783

  • 将训练模型加载到 M5Stack UnitV2 上,即可实现检测某人是否佩戴口罩的目标。

    下图是训练后得到的模型:

    image-20210719190710602

    我们来看一下识别效果,我们可以得到置信度比较高的戴口罩情况,同时 UnitV2 还会反馈相关的识别数据给到我们,这些数据的格式是 json格式。

    image-20210719191450287

  • 获取 json 格式的识别数据

    M5Stack UnitV2 会在是识别过程同时通过串口将数据传输出来,我们通过电脑的串口接收数据,然后分析即可。

    得到UnitV2发送的数据其实是 json 格式,样式如下:

    image-20210719192539164

很容易就能看出来,我们能够从中得到两个信息:是否为人 和 是否佩戴口罩。当然还有这些信息的置信度。由于有时识别不清楚等原因,这些数据并不都是正确的,我们需要对这些数据进行“清洗”,以便我们能够得到有效数据。

3.2、数据的接收和处理

由于使用串口助手直接接收数据不方便处理数据,所以决定用 python 直接一套带走,方便很多。

打开对应串口:

ser = serial.Serial('com16',115200) #打开串口

通过串口发送切换命令:(其中 v2model_0b5431c82a9b1d32是之前训练的模型)

send_data = '{"function": "Object Recognition","args":["v2model_0b5431c82a9b1d32"]}\r\n'

然后模块就源源不断地传送数据过来,我们使用 python的 json 模块对字符串数据解析得到 json数据:

dict_data = json.loads(data_str)#字符串转换成字典

得到的数据如下所示:

{
    "num":2,
	"obj":[
		{
        	"prob":0.966078572,
        	"x":214,
        	"y":12,
        	"w":250,
        	"h":276,
            "type":"NoMask"
    	},
		{
            "prob":0.847388446,
            "x":16,
            "y":0,
            "w":595,
            "h":457,
            "type":"person"
    	}	

	],
	"running":"Object Recognition"
}

我们可以通过这些数据的来判断该识别是否符合我们要监测的对象。比如 是否有人、佩戴口罩是否识别到、置信度是否满足要求等来清洗数据。

判断是否接收到两个对象的数据,且是否运行的是目标识别模式

if dict_data["num"] == 2 and dict_data["running"] == "Object Recognition" :
    #符合则处理

判断置信度是否符合要求,由于我训练的样本较少(标记太苦了,完全就是体力活),置信度大于0.8我就认为是可以的了:

if res["prob"] > 0.8:#概率值为80%
    #符合处理数据

接着就是判断是否佩戴口罩了,同时打印判断结果和将数据记录下来,方便后面处理。

if res["type"] == "NoMask":
	print("NoMask")
    dict_target["type"] = "NoMask"
elif res["type"] == "Mask":
    print("Mask")
    dict_target["type"] = "NoMask"

3.3、实现发现未佩戴口罩者报警功能

用声音报警无疑是最好的,既然都用电脑来接收和处理数据了,那也用电脑配合音箱来报警吧,毕竟能者多劳嘛。

还是使用万能的python实现,使用 ctypes 模块来实现:

import ctypes

player = ctypes.windll.kernel32
if res["type"] == "NoMask":
	player.Beep(800,500)#报警音

很轻松。

3.4、记录每天人员佩戴口罩的情况

人生苦短,还是用 python。

将UnitV2模块连着电脑,放于宿舍的某个监测位置,用于识别走过的人的佩戴口罩的情况:

image-20210719205220655

将识别的数据直接写入txt文件即可。

首先,获取系统时间:

import timedate = time.strftime("%Y-%m-%d", time.localtime())

将时间和佩戴口罩情况数据写入文件:

if res["type"] == "NoMask":	
	dict_target["type"] = "NoMask"    
	dict_target["date"] = date #当前系统的时间 	
	writeDict2File('daily_mask_wearing_data.txt',dict_target)
elif res["type"] == "Mask":	
	dict_target["type"] = "NoMask"    
	dict_target["date"] = date #当前系统的时间	
	writeDict2File('daily_mask_wearing_data.txt',dict_target)

打开文件即可看到最近检测到的数据:

image-20210719202548338

3.5、生成每日数据报表

这里还是使用到 python的包pyecharts,

“pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图”。pyecharts可以展示动态图,在线报告使用比较美观,并且展示数据方便,鼠标悬停在图上,即可显示数值、标签等。

直接 show code ,通过上一节记录在txt文件的数据,生成可视化的图表。

def showWearingMasks(FilePath):    
	fileName = os.path.join(os.getcwd(),FilePath)   
	attr = ["2021-7-13"]    
	dictList = []    
	i = 0    
	v1=[0]    
	v2=[0]    
	with open(fileName, 'r', encoding='utf-8') as f:        
	for line in f.readlines():            
		#print(line.strip())            
		js = json.loads(line.strip())            
		dictList.append(js)    
	for oneData in dictList:        
		if oneData["date"] == attr[i] :            
			if oneData["type"] == "Mask":                
				v1[i] += 1            
			else:                
				v2[i] += 1        
		else:            
			attr.append(oneData["date"])            
			if oneData["type"] == "Mask":                
				v1.append(1)                
				v2.append(0)            
			else:                
				v1.append(0)                
				v2.append(1)             
				i += 1     
				
	bar=Bar("宿舍口罩佩戴情况")    
	bar.add("戴口罩",attr,v1,is_stack=True)    
	bar.add("不戴口罩",attr,v2,is_stack=True)    
	bar.render() showWearingMasks('daily_mask_wearing_data.txt')

生成的图表如下:(由于现在疫情不是很严重,佩戴口罩比较少,有些甚至是我为了戴而戴)

image-20210719203215870

四、总结

刚开始看到这个活动时,看到只是一个关于 AI 相关的模块时,其实是觉得自己是应该玩不动的,毕竟没有AI基础。

所以花了点时间去了解,后来看了相关直播,突然发现其实不用了解原理就可以使用,只需要按步骤去训练即可使用,真是太方便了。

训练和标记花了最多的时间,活生生地从高科技的AI开发变成了图片标记苦力工。

这个项目虽然现在勉强做完了,但是感觉自己实现的还是有点少,更多的是把 UnitV2 当做一个单独的模块,然而没有深入地开发,所以没能发挥这个模块强大的功能,还是因为对Linux也不是很熟的缘故。

还有本来打算实现将数据上传至云服务器的功能也没来得及做,后面花点时间去实现。

其实后面想利用这个模块配合我的智能小车,让我的车变成真正的智能小车。

至于收获,这段时间逼迫自己学了些东西,就连 python也是现学现卖,发现只有在开发中学习的效率才是最高的。

人生很长,不给自己设限,多玩点不同领域的东西还是挺有趣的。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章           查看所有文章
加:2021-07-25 16:14:30  更:2021-07-25 16:14:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 11:26:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码