11342| 15
|
坐姿智能提醒器 |
【设计意图】 坐姿不正确,是儿童和青少年在学习和工作中经常出现一种情况,坐姿不正确,可以引起一系列的后果,通常会引起以下后果: 1、脊柱侧弯:儿童、青少年处于生理发育期,脊柱的关节、韧带没有完全成形或者处于比较薄弱的时期,由于长期的坐姿不良,会导致发育的异常,从而出现脊柱的侧弯; 2、颈椎病:由于坐姿不良,尤其是长时间的低头、伏案工作、看手机、看电脑,容易出现颈椎的退行改变,颈椎的生理曲度会变直或者消失,严重的会反弓。从而引起颈椎周围的韧带和关节退行改变,严重椎间盘突出或者颈椎不稳,压迫了周围的血管或神经,出现一系列症状; 3、腰背部肌肉劳损:由于慢性疲劳、坐姿不良等,造成肌肉的长期高强度、高张力状态,引起局部的缺血、损伤,出现严重的改变,就是腰肌劳损; 4、视力异常:没有放在一个正常的位置看东西,可能出现近视或者出现屈光不正等异常情况。 【作品功能】 1、通过摄像头采集坐姿,通过人工智能算法进行实时判断人体姿态 2、对不正确坐姿进行语音、灯光提醒,如低头趴桌、左右歪头、长时间不活动。 【制作元器件与材料】 1.LattePanda 拿铁熊猫 LattePanda是市面上首款Win 10开发板,运行完整版Windows 10操作系统。板载一颗英特尔4核处理器,最高1.92GHz运行频率,内置蓝牙和WiFi模组,支持USB 3.0接口、HDMI视频输出、3.5mm音频接口,100Mbps以太网口,以及额外的MicroSD扩展卡槽。您完全可以把它作为一台mini小电脑来看待,并且开发板集成一块Arduino Leonardo单片机,可以外拓各种传感器模块。 2.LattePanda 拿铁熊猫 IPS显示屏 LattePanda 7寸屏幕,IPS屏幕技术和1024 * 600高分辨率带来完美的视觉体验,精致小巧的显示屏与您的“小熊猫”完美配套!无需单独供电,连上LattePanda即可使用。搭配触摸屏,为您的项目提供可视化的用户界面。 3.高低音调节数字蓝牙功放板 这是一款可独立控制高音和低音的数字蓝牙功放板,它具有AM干扰抑制和滤波功能,确保即使长时间大功率操作,音质更加清澈圆润。工作电压范围DC9-24V,AUX+蓝牙5.0输入,输出功率50W,带有3个调节旋钮可进行电源开关和主音量控制、高音和低音独立控制,适用于4-8Ω、15W-100W无源扬声器。可连接拿铁熊猫、树莓派、手机以及其它带有蓝牙的主控板使用,可以DIY出自己喜欢的音箱。 【电路图】 【实物图】 【制作元器件与材料】 1.旧物利用——喇叭 从旧Mp3播放器上拆下两个喇叭 将两个喇叭与蓝牙功放连接 2.安装摄像头 摄像头安装在装置顶端,使用热熔胶固定,数据线通过盒子上的孔穿回盒内。 3.安装喇叭与灯带 喇叭与灯带安装在装置底端 4.安装蓝牙功放 将盒子侧面开孔,将蓝牙功能的三个旋钮引出。 5.安装熊猫板与显示屏 熊猫板固定在屏幕的背面 【技术实现过程】 1.Mediapipe Mediapipe是google的一个开源项目,支持跨平台的常用ML方案。 我们使用到其中人体姿态估计:可以给出33个关键点的3D坐标 33个关键点的3D坐标 2.配置环境 程序运行在python 3.8.0环境下: (1)安装opencv-python 计算机视觉库。 pip install opencv-python (2)安装Numpy 开源的数值计算扩展,功能是科学计算,数据分析与处理。 pip install Numpy (3)安装Scipy 距离计算库。 pip install Scipy (4)安装pinpong 是一套控制开源硬件主控板的 Pyhton 库。 pip install pinpong (5)安装Mediapipe 人工智能姿态识别开源库 pip install mediapipe (6)安装cvzone 一个计算机视觉工具包,可方便的图像处理和实现视觉AI功能。核心是使用OpenCV和Mediapipe库。 pip install cvzone 3.HAR判断低头开源算法(head aspect ratio) 因人像在摄像头中会出现近大远不的现象,所以只使用两点间距离阈值来判断姿态是不准确的。 HAR判断低头开源算法: 在头部选择鼻子、两肩、两肩中点,四个点,具体如右图。 根据这四个点我们便可以表示低头和抬头的状态。当抬头的时候,上图中竖着的黄色箭头会变得比较高,而低头(不正确姿势)这个箭头就会变矮。但是由于近大远小的原因,单纯用高度来表示状态缺少参考比较,因此提出如下公式表示状态: 4.利用Mediapipe 获取人体姿态坐标点
5.修改开源库cvzone中PoseDetector中findDistance函数
6.计算判断低头的HAR #计算判断低头的HAR disp0pmid=detector.findDistance(11,12,img,dismid=True,p0=0)#计算鼻子与两肩中点的距离 disp11p12=detector.findDistance(11,12,img)#计算两肩的距离 Har=disp0pmid/disp11p12#计算Har print(Har) if Har<0.45:#Har小于0.45认定过于低头 engine.say("请不要过于低头") engine.runAndWait() 7.确定Har阈值 使用print(Har)语句,经过不断测试,查看低头与抬头中间的阈值,最终确定阈值为0.45,当Har小于0.45认定过于低头。 使用print(near)语句,经过不断测试,离桌远近的判断阈值,最终确定阈值为,当Har大于220认定离桌过近。 8.确定左右歪头的阈值 经过不断测试,确定左右歪头的阈值,最终向右阈值为225,如大于225为向右歪头,向右阈值为135,如小于135为向左歪头。并使用语音合成进行语音提醒。 9.控制灯带闪烁提醒将Arduino程序提前下载到,Lattepanda集成的Leonardo板中,接收Mind+程序通过串口传来的指令,控制Arduino GPIO,驱动灯带。
【演示视频】 【制作反思】 本项目作品虽实现部分不正确坐姿的判断,但还有多种不正确坐姿未能实现有效识别,有改进的空间。 1、装置放在正前方,由于学习课桌的遮挡,无法识别腰部以下姿态关键点,所以不能判断如翘二郎腿等不正确坐姿,所迭代作品考虑增加从侧面检测功能,以识别翘二郎腿不良坐姿进行提醒。 2、因不同年龄,不同性别等原因,在头肩横纵比上会有一定差异,所以迭代作品,会增加预识别,根据实际使用者进行阈值设定功能 3、未能实现对于人体姿态动态的识别,如抖腿等不正确坐姿,可以使用连续时间段内,腿的高度变化频率来进行判断。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed