手把手用大模型实现手势识别——从OpenCV到智能交互的思维跃迁

67 阅读5分钟

当我在上一次组装好我的机械臂,并且用我的 Arduino Nano 3做好了测试他的灵活度后,我又门伸出了一个想法.我想既然他是由剁机所驱动的有一个控制板,那我何尝不用信号给他传输数据,让他进行一个伸长手指的伸长呢?

1.测试机械手活动

起初,我转向人工智能助手Claude寻求指导。我向它详细描述了构想:如何通过Arduino Nano向控制板传输精确信号,使机械手指能够完成伸展动作。Claude很快给出了一段看似完善的代码,但对于一个刚刚接触这个领域的初学者而言,我需要面对的问题远比想象中复杂。首当其冲的是电源稳定性的考验——舵机在运动瞬间会产生较大的电流需求,任何供电不足都会导致动作异常。更重要的是控制板针脚定义的准确性,每个舵机必须与程序中定义的引脚完全对应。(一开始我还没有怎么注意这一个点)

34ecde9c4b70145ea6bf377d2129c8a2.jpg

第一次将Claude提供的代码上传至Arduino Nano时,结果很明显,他不工作。机械臂对指令毫无反应,就像被施了定身咒。我反复检查接线,重新上传程序,但问题依旧存在。我问了DeepSeek,他告诉我有可能是电源或者是引脚的问题。我猜想估计是引脚。

为了验证这个猜想,我请Claude编写了一个简单的引脚测试程序。这个程序依次激活每个引脚,让我能够逐一确认每个舵机的对应关系。当我的机械手依次从大拇指到小拇指张开时,确实很兴奋。

2.语音控制机械手

紧接着,我想着有没有一种简单的方式来操作呢?

image.png

我想到最近Kimi的Call模式,我想我可不可以用语音来控制我的机械臂呢,然后我问到了DeepSeek再给我整理了一整套提示词,然后我将这套提示词和代码的方法复制给了Claude很快就给我编写了这套程序,然后他通过我的Mac收音给他传输数据,让我的机械做出来相对应的动作,我觉得很厉害。

`import speech_recognition as sr import time import threading from typing import List, Dict

机械臂控制类(需要根据实际机械臂API进行实现) class RoboticArm: def init(self): # 初始化机械臂连接 # self.arm = 实际机械臂的初始化代码 pass

def move_to_position(self, position_name: str):
    """移动机械臂到预设位置"""
    # 根据位置名称执行相应动作
    print(f"机械臂移动到位置: {position_name}")
    # 实际控制代码示例:
    # if position_name == "1":
    #     self.arm.set_angles([0, 0, 0, 0, 0, 0])  # 示例角度
    # elif position_name == "2":
    #     self.arm.set_angles([30, 0, 0, 0, 0, 0])
    # ...

def execute_sequence(self, sequence: List[str]):
    """执行一系列动作序列"""
    for position in sequence:
        self.move_to_position(position)
        time.sleep(1)  # 等待动作完成

def disconnect(self):
    """断开机械臂连接"""
    print("机械臂断开连接")
    # self.arm.disconnect()

`

3.视觉控制机械手

接下来我们来实现,网上经常看到的手势控制。我们来实现一下最简单的手势模仿功能。

当然暂时不肯这么顺利的,机械手指的运动显得生涩而僵硬,时而还会出现难以解释的抽搐。更令人困惑的是,Claude在后续的代码优化中似乎走入了死胡同,每次修改都让情况变得更糟,机械臂的动作变得越来越不可预测。

26eff0e9151fda5b638b94a7dc0706c2.jpg

就在我几乎要放弃的时候,转机悄然降临。我意识到Arduino Nano作为一款成熟的开发板,其生态中必然存在可供参考的先例。于是,我转向DeepSeek寻求帮助,果然在国内一个知名的代码分享平台上找到了宝贵的资源。一位开发者详细记录了他如何通过简易方法实现手势识别的全过程。他的方案核心在于将手的每个关节视为独立的节点,通过建立节点之间的空间关系,让机器学习并理解手势的特征。这套方法最巧妙之处在于其简洁性——不需要复杂的传感器阵列,而是通过基础的空间几何关系就能实现相当精准的动作捕捉。

文章的大概的逻辑是这样,我们的手的每个关节都可以作为一个节点,供给机器去识别,然后只要我们把这些节点,让机器进行学习和标记就可以很好的去识别到我们的手的动作,然后就是模仿了。,我再次找到Claude。这次我不仅详细解释了节点识别的原理,还直接提供了参考资料的链接,让Claude能够准确理解我想要实现的架构。人机协作的效率在这一刻展现得淋漓尽致:我提供思路和方向,Claude负责将抽象概念转化为精确的代码。编译过程如行云流水,代码如泉涌般在屏幕上流淌,每一行都凝聚着我们对问题的新认识。

紧接着在我最后一次将代码上传给Arduino Nano 3后,用着我的Mac摄像头,它很轻松的模仿出了我手指的动作。

这一次我想通过协助我可以让我多位员工来帮我一起公司问题解决一个员工解决不出来的问题,这样当我更高效有效的来做出来我想要的模型以及功能。

我接下来想做关于生物方面的传感器与我的机械臂和机械手相结合,我想组队和大家一起来组队研究更好玩的东西!

以下是我的演示视频链接,大家可以前去观看:

youtu.be/14egpRrdFIA… (视觉控制我的机械臂)

youtu.be/AcxAS5v361A… (音频和视觉来控制我的机械臂)

并且我的源代码已经在github上开源,大家也可以下载下来试一试看:github.com/pluto627/Bi…

我的联系方式如下:Plutoguoyq@gmail.com

待续......

机械臂与机械手视觉跟模块的控制。