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

2020-07-28 15:08:03 浏览数 (1)

大数据文摘出品

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

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

一位名叫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有两个点子:

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

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

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

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

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

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

代码语言:javascript复制
function blurScreen() {
    document.body.style.filter = 'blur(10px)';
    document.body.style.transition= '0.9s';
}

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

代码语言:javascript复制
function removeBlur() {
    document.body.style.filter = 'blur(0px)';
}

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

代码语言:javascript复制
while (defaultRightEyePosition.length < 1) {
  defaultRightEyePosition.push(rightEye.y);
}

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

代码语言:javascript复制
if (Math.abs(rightEye.y - defaultRightEyePosition[0]) > 15) {
  blurScreen();
}

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

代码语言:javascript复制
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

0 人点赞