借助TensorFlow Lite和MediaPipe,谷歌刚刚开源了一款手势识别器,可以直接在手机上运行,实时跟踪,并且已经开源。
官方说,效果长这样:
有了这项应用,你可以开发手语识别、AR游戏,甚至用它来玩石头剪刀布。
有App可玩
谷歌已经把这款手势识别器做成了一款名为“Hand Tracking GPU”的App,在安卓端有对应的apk安装包,下载到手机上,安装成功后,无需联网就可以直接用了。
当然,iOS用户也可以安装,但是没有现成的安装包,可以下载源代码自行编译。
App默认调用前置摄像头,如果屏幕中出现的是你的脸,它是没有反应的。
伸手到屏幕前,就可以和官方演示的一样,识别出手部的各种姿势,123456789都可以识别:
或者比个“OK”:
点个赞:
反应还是非常敏锐的,效果不错。不过,不知是什么原因,有时候玩着玩着,屏幕也会突然“放空”,只能看到手,识别不出手势,这也被推特上的网友抓了包:
另外,这个App只支持一只手的手势识别,如果你把两只手都放到摄像头前,它只能识别一只:
说好的石头剪刀布呢?
当然,想想办法还是能让它识别两只手的,比如这样:
△ 它不知道我换了一只手
悄咪咪的,就把识别出的手势框图从一只手转移到了另一只手上。
△ 它也不知道我换回来了
当然,你也可以换回来,来去切换自如,仿佛背后的模型已经被忽悠瘸了。
三大模型
不过,被“忽悠瘸了”的锅,可不能让一个模型背,因为,这款应用的背后有3个模型。
BlazePalm
从整个图像中界定手部轮廓,找到手掌的位置,检测平均精度达到95.7%。
Hand Landmark
前一个模型找到手掌之后,这个模型负责定位关键点,它可以找到手掌上的21个关节坐标。
在训练过程中,研究人员们用到了将近30000张真实世界的标注过的手掌图片,来获取ground truth数据。
之后,用混合训练的方式训练模型。
Gesture Recognition
现在,手部关键点检测结果出来之后,需要判断比划出来的手势是什么意思,也就是识别出✌️是2,这里包含各种手势,除了123456789之外,还有yeah、ok等。
不过,遗憾的是似乎App里没有这个功能。
借助MediaPipe实现
最后的实现,借助了MediaPipe,这是一个构建机器学习pipeline的框架。用于手势识别的MediaPipe图长这样:
前面的各种模型,都融入到了这张整体的图里,可以看到从拍摄到出结果的全过程。
另外,借助MediaPipe,还可以做人脸检测:
头发分割:
物体检测:
具体内容,可以进入传送门体验:
传送门
MediaPipe
https://github.com/google/mediapipe
手部跟踪
https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md
手势识别apk/源代码
https://drive.google.com/file/d/1uCjS0y0O0dTDItsMh8x2cf4-l3uHW1vE/view
“