这学期巨忙,从11月份以来没休过两次周末。直到昨天才把手头的事先搁一边准备开始做。本想做一个通过人体关键点来控制骷髅跳舞,感觉应该很有意思。不过准备开始的时候发现已经有人用关键点做了火柴人,只得放弃。最后几天,创意已经被大家用的七七八八,大家做的都特别有意思,苦想能找到突破点。感觉好像人体关键点还没什么人用,想想还是走这个方向吧。仔细研究了关键点的信息,有头部、鼻、脖子、眼、嘴角、耳、肩、臂、肘、手腕、膝、脚踝等共计21个关键点。思考如果人离摄像头的位置固定,摄像头高度固定,那么测出来的关键点信息应该是可以推导出身高、肩宽、手长等身材信息,继而给出穿衣指南。可以涉及性别、年龄、身材等给出不的建议。本项目限于时间关系只尝试了其中一小部分。其他的都是类似的逻辑判断,以后有时间再完善吧。
虽然火柴人已经有人做了,但是后面有空还是想把这个骷髅舞蹈做出来。视频最后也有一段控制骷髅跳舞的演示,但是控制的没有人体关键点那么精确好玩。
步骤1 素材准备
因时间所限只找了女生的素材。
模特素材:
模特根据性别和身材一共有10个造型,5个男生,5个女生。
眼镜素材:
一共4个造型。
服装素材:
一共5个造型。
发型素材:
一共17种造型。
步骤2 程序编写
一、角色
一共8个角色
main:用于进行人体及人脸识别操作,并计算身材各个值
body:变装模特,用于试穿试戴服装、发型及眼镜。
glasses:眼镜造型
dress:服装造型
hair:发型
dancer:会跳舞的骷髅,通过侦测视频动作控制
drum和cymbal:通过侦测视频控制打鼓
二、main代码:
测量思路:
身高与头部及脚踝的Y坐标的差有对应关系
肩宽与左肩及右肩的X坐标的差有对应关系
手长与肩部及腕部的Y坐标的差有对应关系
本来腿长和腰围是没有直接的对应关系,但是通过观察关键点识别后的图像,发现手腕到脚踝的位置与腿长也有对应关系。左右手腕的距离与腰部有对应关系。为了更准备的得出数值,也可以测量时将手腕放在腰部,这样左右手腕的距离基本就是腰围。不过时间不够,没有测试这一步,只是简单的用双手放低时左右手腕的差来对应。x, y系数用于调整最后的计算结果,可对多人进行测试,根据摄像头固定的远近位置得到一个系数。
点击绿旗时播报提醒,并等候用户语音回答。
听到开始后,进行人体及人脸识别,并报读识别结果。
函数:获取关键点信息
函数:计算身高、手长、腿长、肩宽及腰围。
函数:将结果进行系数转换并取整。由于Scratch没有取整函数,这里用字符串的方式取整,更加简单,只需要找到小数点的位置,截取小数点之前的字符就可以了。特别需要注意的是,对于数值型的变量是不能按位截取的,需要通过一个和空字符串的合并,将数值型转换为字符型才可以进行截取。
三、body代码
根据测量结果给出穿衣提示。时间有限,没有做逻辑。在淘宝上可以找卖衣服的店,里面有尺寸,参照着做逻辑就可以了,涉及到的尺寸有身高、腰围、手长、腿长、胸围、臀围等。腰围、臀围可以用前面所提到的变通的方法获得。胸围等尺寸无法得到,可以根据有限的尺寸(肩宽、腰围、臀围)进行逻辑跳转,显示对应模特造型。( 为了和AI挂上钩,也是拼了)
四、dress代码:
按d键可以切换服装造型。
五、glasses代码:
如果识别的人脸佩戴了眼镜,则切换到眼镜造型,否则切换到不戴眼镜的造型。按g键可以切换眼镜造型。
六、hair代码:
按h键可以切换发型。
七、dancer代码:
如果侦测到视频动作,骷髅左右随机移动,开始尬舞(人也在尬舞)。
八、drum代码:
侦测到视频动作后,精灵会变化大小及颜色特效,并播放音效。这里的切换背景其实没啥用,因为会调用摄像头,背景不会显示。
九、cymbal代码:
侦测到视频动作后,精灵会变化造型及颜色特效,并播放音效。
演示视频:
请忽略视频中本人极其僵硬的动作。视频如果是小朋友来演示应该更好玩,无奈周末在家周围都没有小朋友。为了演示只有拼了。
后记:
感谢DF又提供了这么好玩的活动。说起来这是第一次认真的用Mind+,虽然也崩过一两次,但是感觉还是非常好用的,支持很多硬件,新的功能也更新的非常快,特别是还提供了在线编程,真的太友好了!
评论