所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

使用人体检测关键点测身材

szjuliet szjuliet 2019-12-22 21:00:13

这学期巨忙,从11月份以来没休过两次周末。直到昨天才把手头的事先搁一边准备开始做。本想做一个通过人体关键点来控制骷髅跳舞,感觉应该很有意思。不过准备开始的时候发现已经有人用关键点做了火柴人,只得放弃。最后几天,创意已经被大家用的七七八八,大家做的都特别有意思,苦想能找到突破点。感觉好像人体关键点还没什么人用,想想还是走这个方向吧。仔细研究了关键点的信息,有头部、鼻、脖子、眼、嘴角、耳、肩、臂、肘、手腕、膝、脚踝等共计21个关键点。思考如果人离摄像头的位置固定,摄像头高度固定,那么测出来的关键点信息应该是可以推导出身高、肩宽、手长等身材信息,继而给出穿衣指南。可以涉及性别、年龄、身材等给出不的建议。本项目限于时间关系只尝试了其中一小部分。其他的都是类似的逻辑判断,以后有时间再完善吧。

projectImage

虽然火柴人已经有人做了,但是后面有空还是想把这个骷髅舞蹈做出来。视频最后也有一段控制骷髅跳舞的演示,但是控制的没有人体关键点那么精确好玩。

步骤1 步骤1
素材准备

因时间所限只找了女生的素材。

模特素材:

模特根据性别和身材一共有10个造型,5个男生,5个女生。


眼镜素材:

一共4个造型。


服装素材:

一共5个造型。


发型素材:

一共17种造型。

projectImage
步骤2 步骤2
程序编写

一、角色

一共8个角色

main:用于进行人体及人脸识别操作,并计算身材各个值

body:变装模特,用于试穿试戴服装、发型及眼镜。

glasses:眼镜造型

dress:服装造型

hair:发型

dancer:会跳舞的骷髅,通过侦测视频动作控制

drum和cymbal:通过侦测视频控制打鼓


projectImage

二、main代码:

测量思路:

身高与头部及脚踝的Y坐标的差有对应关系

肩宽与左肩及右肩的X坐标的差有对应关系

手长与肩部及腕部的Y坐标的差有对应关系

本来腿长和腰围是没有直接的对应关系,但是通过观察关键点识别后的图像,发现手腕到脚踝的位置与腿长也有对应关系。左右手腕的距离与腰部有对应关系。为了更准备的得出数值,也可以测量时将手腕放在腰部,这样左右手腕的距离基本就是腰围。不过时间不够,没有测试这一步,只是简单的用双手放低时左右手腕的差来对应。x, y系数用于调整最后的计算结果,可对多人进行测试,根据摄像头固定的远近位置得到一个系数。

点击绿旗时播报提醒,并等候用户语音回答。

projectImage

听到开始后,进行人体及人脸识别,并报读识别结果。

projectImage

函数:获取关键点信息

projectImage

函数:计算身高、手长、腿长、肩宽及腰围。

projectImage

函数:将结果进行系数转换并取整。由于Scratch没有取整函数,这里用字符串的方式取整,更加简单,只需要找到小数点的位置,截取小数点之前的字符就可以了。特别需要注意的是,对于数值型的变量是不能按位截取的,需要通过一个和空字符串的合并,将数值型转换为字符型才可以进行截取。

projectImage

三、body代码

根据测量结果给出穿衣提示。时间有限,没有做逻辑。在淘宝上可以找卖衣服的店,里面有尺寸,参照着做逻辑就可以了,涉及到的尺寸有身高、腰围、手长、腿长、胸围、臀围等。腰围、臀围可以用前面所提到的变通的方法获得。胸围等尺寸无法得到,可以根据有限的尺寸(肩宽、腰围、臀围)进行逻辑跳转,显示对应模特造型。( 为了和AI挂上钩,也是拼了)

projectImage
projectImage
projectImage
projectImage

四、dress代码:

按d键可以切换服装造型。

projectImage

五、glasses代码:

如果识别的人脸佩戴了眼镜,则切换到眼镜造型,否则切换到不戴眼镜的造型。按g键可以切换眼镜造型。

projectImage

六、hair代码:

按h键可以切换发型。

projectImage

七、dancer代码:

如果侦测到视频动作,骷髅左右随机移动,开始尬舞(人也在尬舞)。

projectImage

八、drum代码:

侦测到视频动作后,精灵会变化大小及颜色特效,并播放音效。这里的切换背景其实没啥用,因为会调用摄像头,背景不会显示。

projectImage

九、cymbal代码:

侦测到视频动作后,精灵会变化造型及颜色特效,并播放音效。

projectImage

演示视频:

请忽略视频中本人极其僵硬的动作。视频如果是小朋友来演示应该更好玩,无奈周末在家周围都没有小朋友。为了演示只有拼了。

后记:

感谢DF又提供了这么好玩的活动。说起来这是第一次认真的用Mind+,虽然也崩过一两次,但是感觉还是非常好用的,支持很多硬件,新的功能也更新的非常快,特别是还提供了在线编程,真的太友好了!

Makelog作者原创文章,未经授权禁止转载。
2
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]