仅使用简单技术的手势识别

信息处理 计算机视觉 在家工作 物体识别
2021-12-24 21:29:26

我正在学习计算机视觉课程,我有这个练习:编写一个程序,给定手部图像,它可以识别手是张开、合拢、打拳还是保持“ok”姿势,只使用迄今为止提供的技术(像素 4/8 连接、连接区域、轮廓查找、孔查找、像质心、面积、周长、偏心率、图像矩、图像变换(例如反转/功率/对数/伽马校正/对比度拉伸)、直方图计算和均衡)。

我已经用一些基本的 blob 属性完成了它(闭合的手具有低偏心率,“ok”有一个孔,张开的手在 blob 中的内接椭圆区域和具有低偏心率的 blob 区域本身之间有很大的差异) ..它似乎有效,但第一张图片有点问题。

我认为可能还有更多东西可以制作出更强大的算法。也许某种时刻属性?一些blob轴/方向/极值点有帮助吗?

PS测试图片:

好的2

好的

打开

冲床

3个回答

您可以尝试查看 Hu 不变矩。它们可以由基本矩构成,并且是旋转、缩放、反射和平移不变的。

首先为一组训练轮廓计算它们,然后将它们应用于测试轮廓。

据我所知,在 Matlab 和 OpenCV 中有一些实现。

根据用 Python 编程计算机视觉一书,一种有趣的方法是在图像上使用密集的 SIFT(又名 HoG)特征,并将这些特征提供给分类器。

我自己没有尝试过,但作为一种方法似乎很合理。此外,HoG 功能的发明者提出了在我的测试中运行良好的Flutter 应用程序,如果发明者不使用他自己的功能或接近的衍生产品,那将是非常奇怪的。

我的一个朋友为他的本科论文做了这个。他所做的基本上是对每个手势的属性进行编码。例如,在第一个图中,在手的部分上放置一个矩形遮罩。皮肤与矩形口罩边缘相接的部分应注意并标记。然后可以比较较大边缘和较小边缘的相对位置。

因此,对于向上指向,您将在手腕处有一个较小的向上边缘和较大的边缘。

对于指向侧面,您在一侧有一个较小的边缘,在底部有一个较大的边缘。

至少可以通过这种方式覆盖方向。