坐姿不对,屏幕就变模糊!小姐姐教你用TensorFlow做一款“隐形背背佳”-阿里云开发者社区

开发者社区> -技术小助手-> 正文

坐姿不对,屏幕就变模糊!小姐姐教你用TensorFlow做一款“隐形背背佳”

简介: 坐姿不对,屏幕就变模糊!小姐姐教你用TensorFlow做一款“隐形背背佳”
+关注继续查看

作为一个上班族,每天坐在电脑前那么久,难免出现腰酸背痛的情况,时间长了甚至脊柱都歪曲变形了,这可不行!一定要克制住自己的坐姿。

这里有款“隐形背背佳”,要不要了解一下?

一位名叫Olesya Chernyavskaya的俄罗斯程序媛就用TensorFlow开发了一款坐姿监督工具,一旦你歪着身子,屏幕就会变模糊,在无形中帮你矫正坐姿~
Olesya为这个项目专门做了一个网站,小姐姐表示这个网站不会窃取网友的数据,想体验这款坐姿监督工具的小伙伴可以猛戳:
https://fix-posture.glitch.me/

这听起来有点意思,文摘菌也来试试!

驼背、歪头、托腮通通逃不过系统的检测,眼看着屏幕变模糊

打开网站,最上面这个框里有个“开始”的按键,点击之后摄像头就开始检测你的坐姿啦,文摘菌侧下身子果然屏幕就变模糊了,这种感觉似曾相识,这难道不是本菌摘下眼镜的瞬间吗!

吓得文摘菌赶紧坐直了,话说这款工具也不是特别灵敏,有时候会有一些延迟,即使坐直了也要等一会屏幕才能清晰,还有时候会识别不出来。

而且,只有在这个网站上才能实现自动模糊,在浏览其他网站或者微信私聊的时候就没什么变化啦。

尽管项目不太成熟,但创意依然可佳!就连TensorFlow官方也pick了这个项目。

原来这是TensorFlow举办的一个名为“TFCommunitySpotlight”的参赛活动,旨在为年满18岁的程序员提供一个面向全球展示自己的平台,只要在项目中用TensorFlow框架开发就行,官方会选举出一些他们认为的技术与创意俱佳的作品进行展示。

在报名涵上没有看到参赛的截止日期,这应该是一个长期的项目选秀,现在还可以报名哦,想展示自己项目的小伙伴还不快来~👇
https://services.google.com/fb/forms/tensorflowprojectrecognitionform/

说到这里,来和文摘菌一起看看Olesya是如何实现这个项目的吧。

记录初始体态位置,每秒检查坐姿,一旦发现不同屏幕立刻模糊

在这个项目中,她用了TensorFlow.js PoseNet模型来检测身体部位,并借助ml5.js构建PoseNet模型,还用了p5.js帮助处理画布和摄像头。

关于检测人体体态,Olesya有两个点子:

建一个模型,并教它理解什么是错误的坐姿;
让人一开始保持正确的坐姿,让模型记录眼睛和肩膀的位置正确。然后每秒钟check一遍新的位置,并与正确的位置进行比较。

Olesya果断选择了第二种方法,因为这更容易也更快实现。

具体来说,当模型开始采集人的体态时,会先记录下一个正确的坐姿,可以想象有一个垂直于双眼和双肩所在平行线的y轴,这样就可以记录正确坐姿下的数据特征。当你弯腰驼背时,模型可以检测出你双眼和双肩代表的两条平行线在y轴上的位移,由此判断出你没有好好坐着。

那我不驼背,我悄悄托个腮总行了吧!除非你的眼睛和肩膀都没有歪,否则还是会被系统检测出你的坐姿不正确。Olesya还想到了很多种不良坐姿,以她可爱的画风展示在了图中,比如把脚放到了桌子上,或者脚踩椅子翘起膝盖,这些统统都能被检测到。

说完了体态检测的事情,该说一说如何模糊屏幕了。

话不多说,直接放出代码,要想屏幕变模糊,就得这么敲:

function blurScreen() {

document.body.style.filter = 'blur(10px)';
document.body.style.transition= '0.9s';

}

要想变回清晰的屏幕,移除一下就行:

function removeBlur() {

document.body.style.filter = 'blur(0px)';

}

当我们按下开始键,系统会记录眼睛的位置作为默认的正确位置。

while (defaultRightEyePosition.length < 1) {
defaultRightEyePosition.push(rightEye.y);
}

开始检测后,系统就会一直比较默认位置和当前位置。如果差异超过15,就意味着没有保持良好的姿势,而且程序会调用模糊屏幕的功能:

if (Math.abs(rightEye.y - defaultRightEyePosition[0]) > 15) {
blurScreen();
}

如果差异小于15,就说明坐姿保持的不错:

if (Math.abs(rightEye.y - defaultRightEyePosition[0]) < 15) {
removeBlur();
}

除此之外,Olesya连她做这个网站的过程也都贴心的写了下来,感兴趣的小伙伴可以猛戳:
https://fix-posture.glitch.me/
Github指路:
https://github.com/monolesan/fix-posture

这是一位沉浸在自己编程世界里的程序媛

好奇的文摘菌想看看这位小姐姐还做过什么项目。

看了她的推特,文摘菌觉得这是一位内心很有想法的程序媛,对编程有着强烈的热爱,总是能做出一些创意小项目,完全是兴趣使然。

Olesya经常会分享一些项目过程中她认为有趣的地方,比如一个可以跟随人脸移动的“大卫”:

比如当她在用TensorFlow的手势模型做项目时,系统识别到了她拿起杯子的手,她觉得很有趣就做了个“别人喝茶和我喝茶时”对比的表情包。

沉浸在自己的编程世界里,做着自己热爱的项目,想必是很愉快的事情~ 和文摘菌一样好奇的同学可以去她的推特感受一下:
https://twitter.com/monolesan

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4620 0
《Linux防火墙(第4版)》——2.3 对一个数据包的驳回(Rejecting)VS拒绝(Denying)
在iptables和nftables中的Netfilter防火墙机制给予您驳回或丢弃数据包的选项。那么,二者有何不同?如图2.5所示,当一个数据包被驳回(reject)时,该数据包被丢弃,同时一个ICMP错误消息将被返回到发送方。当一个数据包被丢弃时,它仅仅是被简单地丢弃而已,不会向发送者进行通知。
1391 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9514 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
846 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
4269 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3665 0
1470
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载