居家办公之后,鹅厂小哥发现Web开发竟能助力身体健康!
导读 | 疫情特殊时期,各企业、学校纷纷启用远程办公和学习的方式,在办公期间,除了要完成日常工作安排,还要照顾自身的饮食起居,在高强度的工作节奏和缺少运动锻炼的情况之下,如何及早发现健康隐患,快乐办公?且看鹅厂小哥bottlejiang带来的今日分享。
背 景
你,是否还在为当下的疫情忧心忡忡?你,是否还在为每日三餐苦苦思虑?不端正的坐姿是否让你腰酸背痛?窄小的电脑屏幕是否让你眼干眼涩?
居家办公期间,不知不觉间暴露了很多的健康隐患:
第一:坐姿问题
家里的办公环境相对简陋,笔记本屏幕高度低,一天不知不觉的弯腰驼背。
第二:吃饭问题
不能出门,不能叫外卖,自己做饭不好吃,又累又乏味。
第三:喝水问题
高度投入工作时总是忘了喝水运动。
第四:情绪问题
疫情严峻,待在出租屋担心染病,情绪低迷。
我命由我不由天,健康生活赛神仙!做为一个工程师,平日里做了无数的需求,这一次,何不为自己做一个需求?用自己的专业能力,用自己的双手,用代码,去开发,去创造,去解决以上问题。
对症下药
1. 针对坐姿问题
要避免弯腰驼背,需要在我坐姿不端正的时候提醒我。那么需要解决以下3个问题:
实时监控我的坐姿
判断我的坐姿是否端正
当我坐姿不端正的时候提醒我
(1)监控
如何监控?办法是使用电脑摄像头!笔记本基本自带,台式机可以通过接入外设的方式支持。
web 想要调用电脑摄像头,只需要调用一个 api 就能轻松解决:navigator.mediaDevices.getUserMedia[1]
navigator.getUserMedia 已更名为 MediaDevices.getUserMedia[2]。同时,由于隐私原因,该 api 仅在 https 下支持。
navigator.mediaDevices.getUserMedia 返回一个 promise 对象,支持音视频、尺寸帧率等设置。
(2)判断
能够实时拍下我的坐姿图像,那么又该如何判断我的坐姿端正呢?解决办法是:借助 tensorflow.js!
早在半年前,TensorFlow.js 最开始吸引我的地方正是他能够识别人像的五官,输入一张图片,输出人体器官在图片中位置,包括:鼻子,眼睛,耳朵,肩膀,手肘,手腕,臀部,膝盖,脚踝。
TensorFlow.js[3] 是一个 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 将相应的点画到图像上即可验证识别是否正确。
如上图所示,坐姿端正时,脸部在图像中间,双眼双耳水平,鼻子在眼耳高度之间。坐姿不端正时往往不能满足以上条件。那么通过判断五官的相对位置和绝对位置就可以检测坐姿了。比如近大远小,越靠近屏幕,拍到的人脸越大,两眼的间距也越大。当大到一定程度可以认为人距离屏幕近到一定的程度,这个程度就是阈值。
超过这个阈值即可认定为:此时我正在近距离的盯着电脑屏幕看。此时我正在不健康的工作。
坐姿不端正一般有以下几种场景,转换到图片上的五官位置判断如下:
弯腰驼背:
此时整个头部在图像下半部分,判断鼻子的y坐标到图像下边沿的距离
单手托下巴:
此时头部是歪的,判断两眼的y坐标差
斜视:
此时头部沿y轴转动,判断左边的眼睛和耳朵的x坐标差和右边眼耳x坐标差之差
过度仰视(抬头):
此时头部向上仰,判断鼻子的y坐标是否过于接近眼睛的y坐标
过度俯视(低头):
此时头部向下弯,判断鼻子的y坐标是否过于接近耳朵的y坐标
眼睛离屏幕太近:
此时头部在图像中更大,判断两眼的x坐标差(近大远小)
接下来就是计算的问题了,算出各种差值之后设置阈值。这里可以直接对着屏幕扭转头部试试,自己感受一下坐姿不端正时的参数,把握判断的严格和宽松,逐步调参。
为了达到监控的目的,图片识别逻辑需要跑一个循环。这里用 setInterval 或者 requestAnimationFrame 都可以。
requestAnimationFrame 可以做到监控画面十分流畅,观赏效果极佳,但是60帧还是很吃性能的,每次都要 TensorFlow 识别、canvas 画图和逻辑判断,着实有些难顶,短时间还可以,长时间跑的话 mac 便突突突的进入煮鸡蛋模式。
一般来说开着页面放着听告警即可,这个监控不用那么实时,用 setInterval 每 500 毫秒跑一次足够。
(4)告警
能够实时拍下我的坐姿图像,能够判断我的坐姿是否端正,那么在不端正的时候如何提醒我?当然是播放语音啦!
从网上下载一段几秒的警铃音频即可。识别判断坐姿不端正的时候播放该音频,提醒效果就有了。音频的播放很简单,获取 audio 对象,play() 一下即可。
但有一个问题,以上坐姿不端正的场景有6种,听到告警的时候怎么知道是哪种呢,毕竟知道是哪种才能立马有针对性的纠正坐姿。
有办法!这里可以借助谷歌翻译,下载各种提示文字的朗读音频。当坐姿不端正的时候,播放对应的语音。一开始突然放个警铃总是吓一跳,谷歌翻译魔性的声音明显更人性化!
除此之外要考虑告警毛刺的过滤。比如我喝杯水或者伸个懒腰,这个时候头可能是歪的,这样的告警是不应该发出来的。考虑到喝水伸懒腰这些动作都是短时间内完成,假设3秒完成,那么可以加个判断,持续3秒以上的告警才是真正坐姿不端正的告警,才需要发出来。
实践中还有一个场景,当我去上厕所或者出去倒个水的时候,此时人都不在电脑前了,按照原先的逻辑肯定是告警的。
这时候,模型输出的得分(score)字段就派上用场了。score是一个0到1的数值,数值越大表示输出的结果更准确可靠。当人不在电脑前,score 分数小于0.1,于是把低于0.1分的数据直接舍弃。
最后把阈值和一些设置放到页面上支持编辑,同时加个告警次数统计,一天下来可以看到自己是哪种不端正坐姿比较突出,可以有针对性的做一些运动舒展放松。
2. 针对吃饭问题
吃饭这个问题啊!对于没有做饭经验的人来说真的是灾难。但当下情况特殊,也没的办法。只能随便对付一下,比如把食材丢到电饭煲里做懒人饭,或者买一次性碗筷。
1天2顿饭花3个钟,做出来还不好吃!这就很没意思了。做饭这个大前提是扳不倒的,只能提高一下趣味了。于是,按照主食、肉类、蔬菜、小吃四大类,将囤下来的吃食分类,然后加个随机功能,每次到饭点的时候,按一下,随机搭配。
这样可以解决两个问题:
吃什么
做饭难,其实面对一堆食材决定吃什么也很难。
增加趣味
可能随机出一些奇奇怪怪的组合。未知带来好奇,让人保持兴趣,未知是人类进步的阶梯。是不是有点意思!
这里要加多个去重的逻辑,连续两次随机出来的食物不能一样。毕竟午餐和晚餐吃一样的东西就没意思了!
3.针对喝水&运动问题
一天下来常常忘了喝水,直到口渴的时候才被动想起,这时候你的身体已经缺水了,这是不健康的!一天下来常常一屁股下去坐半天,长期久坐也是不健康的!
针对这个问题可以做个定时提示,回想平时工作中容易忘记喝水的时间,早中晚分别2个提醒,同时加2个运动提醒。
实现上也比较简单,跑个 setInterval 实时对比当前时间和设定提醒时间即可。告警方式同上。
结语
积极乐观,开心向上有助于提高免疫力。
成年人的生活没有容易二字,但要始终相信,办法总比困难多!写到这里,想象着100岁的自己,雄壮有力的敲着键盘,嘴里念到:健康生活,长命百岁。
参考资料:
[1] navigator.getUserMedia():
https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/getUserMedia
[2] MediaDevices.getUserMedia():
https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia
[3] TensorFlow.js :
https://github.com/tensorflow/tfjs-models/tree/master/posenet
[4] 应用体验:
https://www.doverr.com/alarm/index.html
推荐阅读
左耳朵耗子:技术人如何更好地把控发展趋势?
居家办公之后,鹅厂小哥发现Web开发竟能助力身体健康!相关推荐
- 跟小甲鱼学Web开发笔记07
跟小甲鱼学Web开发笔记07 格式化大作战 加粗效果 strong元素 b元素 斜体效果 em元素 i元素 使用css代替b和i元素 久的不去新的不来 del和ins元素 s元素 u元素 mark元素 ...
- 在鹅厂做了14年开发
导语|今天我们走进CDG新晋专家团,对话客户端开发专家Tongyiguo. 2007年从计算机专业毕业后,第一份工作是在顺丰做终端开发,后来又去到酷派手机做手机的业务开发.2012年入职腾讯,在ECC ...
- 微信小程序和Web开发的联系
1.1 差异 在html中,我们最常见的标签有哪些呢?举一些大家都熟悉的例子:div.p.span.img.a.h1-h6等等标签,这里就不一一例举了,这里是指的网页中html标签元素.那么微信小程序 ...
- 拒收苹果超10万元赏金!程序员小哥找出iCloud账户漏洞后,发文直指苹果不够公开透明...
明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 好不容易找出iCloud账户漏洞,但他竟然拒收苹果1.8万美元奖金! 最近,这件事在Hacker News上引起大批网友围观. 本来程序员找 ...
- 日本小哥“自虐神器”一夜爆火:用手柄控制自己的脸,代码自取,后果自负...
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 鱼羊 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 用游戏手 ...
- 日本小哥开源“自虐神器”一夜爆火:用手柄控制自己的脸,代码自取,后果自负
来源:量子位公众号(ID:QbitAI) 用游戏手柄控**(wan)制(huai)**面部表情,是一种怎样的体验? 按下LB键眨左眼,按下RB键眨右眼,还可以左右左右走一套连击.(画面为镜像) 是不是 ...
- Web开发到微信小程序
闲来无事,突然想写一个小程序,于是好好的周五的晚上写了一晚上代码,从完全不知道什么情况(我的JavaScript水平很差的),到愣是写好了一个已经发布了的小程序.所以这里只是想分享一下一个Web开发人 ...
- 微信小程序开发和网页Web开发的区别
小程序和web开发的区别主要在前端.小程序的主要操作平台在微信上.微信服务器的前端代码和从用户数据库后台传过来的数据,通过微信内置的解释器进行拼接,解释为我们平时看到的页面.Web 开发仍然具有相同的 ...
- 为什么居家办公后我更累了?提高远程工作效率小技巧~【互联网大厂打工人居家办公指南】
文章目录 大厂打工人居家办公现状 1. 一日三餐是大问题 2. 沟通成本上升 3. 效率急剧下降 4. 工作与生活没有界限 提升远程办公效率的小技巧 1. 设立工作地点,还原办公环境 2. 制定工作计 ...
最新文章
- libgdx 学习笔记一 开发环境搭建
- Elasticsearch教程-从入门到精通
- onbeforeunload与onunload事件
- ECMAScript 2016,2017,和2018中新增功能
- linux服务器和客户端配置,Linux基础教程:YUM服务端与客户端配置步骤
- 程序员去交友网站找女友,结果意外了...
- 免安装Oracle客户端使用PL/SQL连接Oracle
- JParticles 2.0 发布,打造炫酷的粒子特效
- 提高开发效率的十五个Visual Studio 2010使用技巧
- XP下 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll 的解决办法
- 《基于卷积神经网络(CNN)的网络流量分类》优秀本科毕设实验总结
- Daz3d:如何使用景深
- excel空白单元格自动下下填充上一个单元格的值
- Filament Android 编译搭建(基于Ubuntu环境)
- PDCAOODA循环
- 基于开源软件,“核高基”软件战略必定失败
- Source Insight主题美化插件
- 罗森伯格电子配线系统问答
- 清华计算机考研csp,「考研2021」400分跨考清华大学软件学院经验帖
- 【Stata】数据批量季节调整教程
热门文章
- 怎样使用更新域计算机,Windows Server 2019 组策略调整域计算机组策略刷新间隔时间...
- 计算机硬件有关的专业英语,计算机硬件专业英语词汇
- python 读写Excel的数据
- html5 判断横竖屏,前端js横竖屏检测的4种方案
- JAVA学习-基础部分【1】
- [xdoj]1303jlz的刷题黑科技
- 做科技型券商,光大证券构建私有云平台
- 《中外管理》 稻盛如果掌舵国航,一切将会怎样?
- 碧蓝航线8.20服务器维护,碧蓝航线8月20日更新内容及新玩法活动详解介绍
- 如何刷新微信服务器小程序版本,微信小程序版本自动更新