疫情特殊时期,各企业、学校纷纷启用远程办公和学习的方式,在办公期间,除了要完成平常工做安排,还要照顾自身的饮食起居,在高强度的工做节奏和缺乏运动锻炼的状况之下,如何及早发现健康隐患,快乐办公?且看鹅厂小哥bottlejiang带来的今日分享。
你,是否还在为当下的疫情忧心忡忡?你,是否还在为一日三餐苦苦思虑?不端正的坐姿是否让你腰酸背痛?窄小的电脑屏幕是否让你眼干眼涩? html
居家办公期间,不知不觉间暴露了不少的健康隐患:git
家里的办公环境相对简陋,笔记本屏幕高度低,一天不知不觉的弯腰驼背。github
不能出门,不能叫外卖,本身作饭很差吃,又累又乏味。web
高度投入工做时老是忘了喝水运动。canvas
疫情严峻,待在出租屋担忧染病,情绪低迷。api
我命由我不禁天,健康生活赛神仙!作为一个工程师,平日里作了无数的需求,这一次,何不为本身作一个需求?用本身的专业能力,用本身的双手,用代码,去开发,去创造,去解决以上问题。promise
要避免弯腰驼背,须要在我坐姿不端正的时候提醒我。那么须要解决如下3个问题:浏览器
如何监控?办法是使用电脑摄像头!笔记本基本自带,台式机能够经过接入外设的方式支持。 机器学习
web 想要调用电脑摄像头,只须要调用一个 api 就能轻松解决:navigator.mediaDevices.getUserMedia,navigator.getUserMedia 已改名为MediaDevices.getUserMedia。ide
同时,因为隐私缘由,该 api 仅在 https 下支持。
navigator.mediaDevices.getUserMedia 返回一个 promise 对象,支持音视频、尺寸帧率等设置
可以实时拍下个人坐姿图像,那么又该如何判断个人坐姿端正呢?解决办法是:借助 tensorflow.js!
早在半年前,TensorFlow.js 最开始吸引个人地方正是他可以识别人像的五官,输入一张图片,输出人体器官在图片中位置,包括:鼻子,眼睛,耳朵,肩膀,手肘,手腕,臀部,膝盖,脚踝。
TensorFlow.js是一个 JavaScript 库,用于在浏览器和 Node.js 训练和部署机器学习模型。简单来讲就是把机器学习搬到web上。它的应用有不少,也已经实现的一些有意思的事情。
问题来了,工做的时候正对着电脑,但笔记本摄像头最多只能拍到人的头部五官和肩膀啊?
这里能够想象一下,当坐姿不端正的时候,其实头也是不端正的。(头部端正而身体七歪八扭恐怕不常见)因此,判断五官实际上就已经足够了。
实现上,初始化(posenet.load)以后,经过 estimateSinglePose 方法输入一个图片,输出得分(score)和人体各部位坐标。
{ "score": 0.36588028040440645, "keypoints":[ { "score": 0.998099148273468, "part": "nose", "position": { "x": 318.6268163302529, "y": 371.8572926799611 } }, { "score": 0.996922492980957, "part": "leftEye", "position": { "x": 260.77240393968873, "y": 307.9062803988327 } }, ... ] }
posenet.load 的初始化有不少参数:architecture、outputStride、inputResolution、multiplier、quantBytes、modelUrl。
这些参数是对模型的设置,跟输出的分辨率、识别精度、准确性相关,并直接影响识别效率和性能。在当前的需求场景里,可没必要关注这些,默认便可。
estimateSinglePose 有一个参数 flipHorizontal:是否应水平翻转/镜像姿式。电脑摄像头返回的是一个与现实方向水平相反的图片(相对于本身的视角)。经过ccs水平翻转180度(rotateY(180deg))可处理。
一样,模型的输出经过设置 flipHorizontal 为true 可以获得相应方向的坐标数据。获得五官坐标以后,经过 canvas 将相应的点画到图像上便可验证识别是否正确。
如上图所示,坐姿端正时,脸部在图像中间,双眼双耳水平,鼻子在眼耳高度之间。坐姿不端正时每每不能知足以上条件。那么经过判断五官的相对位置和绝对位置就能够检测坐姿了。好比近大远小,越靠近屏幕,拍到的人脸越大,两眼的间距也越大。当大到必定程度能够认为人距离屏幕近到必定的程度,这个程度就是阈值。
超过这个阈值便可认定为:此时我正在近距离的盯着电脑屏幕看。此时我正在不健康的工做。
坐姿不端正通常有如下几种场景,转换到图片上的五官位置判断以下:
接下来就是计算的问题了,算出各类差值以后设置阈值。这里能够直接对着屏幕扭转头部试试,本身感觉一下坐姿不端正时的参数,把握判断的严格和宽松,逐步调参。
为了达到监控的目的,图片识别逻辑须要跑一个循环。这里用 setInterval 或者 requestAnimationFrame 均可以。
requestAnimationFrame 能够作到监控画面十分流畅,观赏效果极佳,可是60帧仍是很吃性能的,每次都要 TensorFlow 识别、canvas 画图和逻辑判断,着实有些难顶,短期还能够,长时间跑的话 mac 便突突突的进入煮鸡蛋模式。
通常来讲开着页面放着听告警便可,这个监控不用那么实时,用 setInterval 每 500 毫秒跑一次足够。
可以实时拍下个人坐姿图像,可以判断个人坐姿是否端正,那么在不端正的时候如何提醒我?固然是播放语音啦!
从网上下载一段几秒的警铃音频便可。识别判断坐姿不端正的时候播放该音频,提醒效果就有了。音频的播放很简单,获取 audio 对象,play() 一下便可。
但有一个问题,以上坐姿不端正的场景有6种,听到告警的时候怎么知道是哪一种呢,毕竟知道是哪一种才能立马有针对性的纠正坐姿。
有办法!这里能够借助谷歌翻译,下载各类提示文字的朗读音频。当坐姿不端正的时候,播放对应的语音。一开始忽然放个警铃老是吓一跳,谷歌翻译魔性的声音明显更人性化!
除此以外要考虑告警毛刺的过滤。好比我喝杯水或者伸个懒腰,这个时候头多是歪的,这样的告警是不该该发出来的。考虑到喝水伸懒腰这些动做都是短期内完成,假设3秒完成,那么能够加个判断,持续3秒以上的告警才是真正坐姿不端正的告警,才须要发出来。
实践中还有一个场景,当我去上厕所或者出去倒个水的时候,此时人都不在电脑前了,按照原先的逻辑确定是告警的。
这时候,模型输出的得分(score)字段就派上用场了。score是一个0到1的数值,数值越大表示输出的结果更准确可靠。当人不在电脑前,score 分数小于0.1,因而把低于0.1分的数据直接舍弃。
最后把阈值和一些设置放到页面上支持编辑,同时加个告警次数统计,一天下来能够看到本身是哪一种不端正坐姿比较突出,能够有针对性的作一些运动舒展放松。
吃饭这个问题啊!对于没有作饭经验的人来讲真的是灾难。但当下状况特殊,也没的办法。只能随便对付一下,好比把食材丢到电饭煲里作懒人饭,或者买一次性碗筷。
1天2顿饭花3个钟,作出来还很差吃!这就很没意思了。作饭这个大前提是扳不倒的,只能提升一下趣味了。因而,按照主食、肉类、蔬菜、小吃四大类,将囤下来的吃食分类,而后加个随机功能,每次到饭点的时候,按一下,随机搭配。
这样能够解决两个问题:
这里要加多个去重的逻辑,连续两次随机出来的食物不能同样。毕竟午饭和晚餐吃同样的东西就没意思了!
一天下来经常忘了喝水,直到口渴的时候才被动想起,这时候你的身体已经缺水了,这是不健康的!一天下来经常一屁股下去坐半天,长期久坐也是不健康的!
针对这个问题能够作个定时提示,回想平时工做中容易忘记喝水的时间,早中晚分别2个提醒,同时加2个运动提醒。
实现上也比较简单,跑个 setInterval 实时对比当前时间和设定提醒时间便可。告警方式同上。
积极乐观,开心向上有助于提升免疫力。
成年人的生活没有容易二字,但要始终相信,办法总比困难多!写到这里,想象着100岁的本身,雄壮有力的敲着键盘,嘴里念到:健康生活,长命百岁。