上一期小编给大家介绍了和MediaPipe的相遇之路,本期小编将带着大家一起来动手,如何打造一个属于自己的手势识别应用。
欢迎感兴趣的小伙伴们到这里访问MediaPipe中的手势识别任务:
https://ai.google.dev/edge/mediapipe/solutions/vision/gesture_recognizer?hl=zh-cn
下面就让我们开始今天的任务吧!
1模型在哪?
我们知道,一个AI应用最精华的部分就是他的模型,换句话来说,如果我们能拿到MediaPipe的模型文件,是不是就可以让模型为我们所用了?说干就干。要不说还得是Google,真的是大方,直接贴上了用到的模型:
既然有了模型就成功了一大步了,而且还贴心的告诉了我们模型的输入大小,让我们下载下来看下,文件扩展名是.task,不要管他,直接解压缩,我们会得到两组模型,共四个:
归属于hand_gensture_recognizer的两个:
以及归属于hand_landmarker的两个:
2模型怎么用?
得到模型之后,万里长征才刚刚开始。由于这个模型是依靠于MediaPipe来进行推理的,并没有更多的信息来告诉我们这几个模型是要怎么使用,接下来就需要我们根据一些直觉来进行分析了:
先来分析模型怎么用,根据文件命名,我们可以分析出:前两个模型是负责手势识别的,后两个模型是进行手部检测+手部关键点识别的,这么一看,好像有了点思路。算法流程看起来是先进行手部检测,即首先检测到手的位置,随后在进行手势识别。
那新的问题来了,landmark模型有什么作用呢?下面就让我们先打开landmark模型看下他的输入输出结构:
我们可以确定,他的输入是一张224x224大小的RGB图像,然后输出有四个维度,好消息是,模型里面很贴心的标上了输出所代表的含义。从这里,我们可以知道模型本身可以识别出左右手、是否有手以及手部关键点,这里提供了两种类型的关键点信息,一种是归一化坐标,一种是世界坐标。那具体用哪一个,还要我们测试才能知道。
接下来打开手势识别模型,先看一下gesture_embedder.tflite模型的输入输出结构:
他的输入有三个,分别是hand,handedness,以及world_hand,输出是一个128维的向量。看到这,是不是有些激动了?没错,这个输入是不是和刚才landmark的模型名字很像。也就是说,刚才的landmark模型的输出就是这里embed模型的输入,是不是有种福尔摩斯的感觉了?
还没有结束,还有个疑问?输出这个128维的向量要怎么用?不要急,这里不是还有一个叫canned_gesture_classifier.tflite的模型:
不用小编多说,是不是细心的大家已经发现了端倪?输入刚好是128维的向量,然后输出是手势的分类得分,具体是哪8类呢?mediapipe上已经告诉了我们:
0 - Unrecognized gesture, label: Unknown
1 - Closed fist, label: Closed_Fist
2 - Open palm, label: Open_Palm
3 - Pointing up, label: Pointing_Up
4 - Thumbs down, label: Thumb_Down
5 - Thumbs up, label: Thumb_Up
6 - Victory, label: Victory
7 - Love, label: ILoveYou
现在,我们已经分析出来了三个模型的作用,那么还剩一个叫做hand_detector.tflite的模型,他是干什么用的呢?
通过分析模型的输入输出,我们可以知道:这个模型的作用是为了检测出图像中的手部位置以及手部得分,那看起来一切都通顺了。原来一个小小的手势识别任务需要四个模型来实现,并且各个模型之间是串行的关系,一环套一环。每一个模型的输出都要作为下一个模型的输入来得到最终的手势分类结果。
那么本期小编就为大家抽丝剥茧,分析出了整个手势识别的模型处理关系,接下来我们就要实际进行模型转换,让他们为我们所用。提前预告下:
下一期小编将为大家带来如何量化tflite模型的篇章!
-
手势识别
+关注
关注
8文章
229浏览量
48346 -
AI
+关注
关注
88文章
35476浏览量
281223 -
模型
+关注
关注
1文章
3531浏览量
50565
原文标题:站在巨人肩膀上开发AI应用分享(二)
文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
评论