ITPub博客

首页 > 应用开发 > IT综合 > 坐姿不对,屏幕就变模糊!小姐姐教你用TensorFlow做一款“隐形背背佳”

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

原创 IT综合 作者:大数据文摘 时间:2020-07-27 09:36:03 0 删除 编辑

大数据文摘出品


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


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


一位名叫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还想到了很多种不良坐姿,以她可爱的画风展示在了图中,比如把脚放到了桌子上,或者脚踩椅子翘起膝盖,这些统统都能被检测到。


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


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






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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31562039/viewspace-2707081/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-11-13

  • 博文量
    329
  • 访问量
    250385