5分钟完成手势识别项目!CodeBuddy的Craft模式让传统编程方法沦为古董?

简介: 本文介绍了使用CodeBuddy快速开发手势识别程序的方法。首先安装Python 3.9.13并配置VS Code环境,接着通过pip安装依赖库`mediapipe`和`opencv-python`。利用CodeBuddy的Craft模式,仅需输入自然语言描述即可生成基础代码,经过简单调整后即可运行。代码实现了四种手势识别(OK、竖大拇指、握拳、张开手掌),并通过摄像头实时展示结果。尽管电脑摄像头像素较低,但识别效果良好。本文旨在帮助读者了解CodeBuddy的强大功能,并激发更多创意应用。

引言

这期就用CodeBuddy来完成一个手势识别程序,其实只要一次交互就能完成,他的能力还是蛮强的。之前说他能做到很多功能,所有就来多写几个案例,帮助各位更好的去使用,或者这能给你一些新思路。说到手势识别那其实各位都接触过不少,要么就是游戏当中的手势识别或者就是在学习过程接触过类似的内容,我们就先不多说了,我们看下文。

安装python

这里的python用的是3.9.13版本,根据你的系统来进行安装。

我们下载之后会得到这个文件,我们可以双击打开安装即可,这里就不演示过程了。

安装依赖

这里我们先打开VS Code,这里用这个IDE工具进行演示。

然后这里再打开PowerShell安装一下依赖,命令如下:

pip install mediapipe opencv-python

中国大陆地区可能出现无法下载等情况,自己可以想办法去解决一下。

使用CodeBuddy

我们新建文件夹,然后这个文件夹用VS Code打开即可。

然后看到左侧的CodeBuddy,点击即可。

这里用Craft模式,我们这里就可以输入自然语言了,Vibe Coding能力还是很突出的。

其实只要这一句话,他就能完整的生成出来,后续精调一两次就差不多了。

他会进行思考,思考完毕就能完整的生成出项目了。

生成的代码

这里附上生成精调之后的代码,各位可以直接用python运行。

import cv2
import mediapipe as mp
import numpy as np
from collections import deque
# 初始化MediaPipe Hands
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
    static_image_mode=False,
    max_num_hands=1,
    min_detection_confidence=0.7,
    min_tracking_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils
# 手势历史记录,用于平滑处理
gesture_history = deque(maxlen=5)
def get_hand_landmarks_array(landmarks):
    """将landmarks转换为numpy数组"""
    return np.array([(lm.x, lm.y, lm.z) for lm in landmarks])
def recognize_gesture(hand_landmarks):
    """平衡版手势识别逻辑"""
    landmarks = hand_landmarks.landmark
    points = get_hand_landmarks_array(landmarks)
    
    # 获取关键点索引
    WRIST = 0
    THUMB_TIP = 4; THUMB_MCP = 2
    INDEX_TIP = 8; INDEX_MCP = 5
    MIDDLE_TIP = 12; MIDDLE_MCP = 9
    RING_TIP = 16; RING_MCP = 13
    PINKY_TIP = 20; PINKY_MCP = 17
    # 计算各手指弯曲程度(指尖到MCP的距离)
    thumb_dist = np.linalg.norm(points[THUMB_TIP] - points[THUMB_MCP])
    index_dist = np.linalg.norm(points[INDEX_TIP] - points[INDEX_MCP])
    middle_dist = np.linalg.norm(points[MIDDLE_TIP] - points[MIDDLE_MCP])
    ring_dist = np.linalg.norm(points[RING_TIP] - points[RING_MCP])
    pinky_dist = np.linalg.norm(points[PINKY_TIP] - points[PINKY_MCP])
    
    # 计算指尖间距离
    thumb_index_dist = np.linalg.norm(points[THUMB_TIP] - points[INDEX_TIP])
    index_middle_dist = np.linalg.norm(points[INDEX_TIP] - points[MIDDLE_TIP])
    
    # 1. OK手势判断(最高优先级)
    ok_gesture = (
        thumb_index_dist < 0.1 and  # 拇指食指接触
        middle_dist > 0.2 and      # 其他手指伸展
        ring_dist > 0.2 and
        pinky_dist > 0.2
    )
    
    # 2. 竖起大拇指判断
    thumbs_up = (
        thumb_dist > 0.25 and     # 拇指伸展
        index_dist < 0.15 and      # 其他手指弯曲
        middle_dist < 0.15 and
        ring_dist < 0.15 and
        pinky_dist < 0.15
    )
    
    # 3. 握拳判断
    fist = (
        thumb_dist < 0.15 and     # 所有手指弯曲
        index_dist < 0.12 and
        middle_dist < 0.12 and
        ring_dist < 0.12 and
        pinky_dist < 0.12 and
        np.linalg.norm(points[INDEX_MCP] - points[PINKY_MCP]) < 0.25  # 手掌收紧
    )
    
    # 4. 张开手掌判断
    open_hand = (
        thumb_dist > 0.2 and      # 所有手指伸展
        index_dist > 0.3 and
        middle_dist > 0.3 and
        ring_dist > 0.3 and
        pinky_dist > 0.3 and
        thumb_index_dist > 0.2     # 手指间有足够间距
    )
    
    # 确定手势(按优先级顺序)
    if ok_gesture:
        return "OK"
    elif thumbs_up:
        return "Thumbs Up"
    elif fist:
        return "Fist"
    elif open_hand:
        return "Open Hand"
    else:
        return "Unknown"
# 主程序(添加调试信息显示)
cap = cv2.VideoCapture(0)
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        continue
        
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = hands.process(frame_rgb)
    
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_drawing.draw_landmarks(
                frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
            
            current_gesture = recognize_gesture(hand_landmarks)
            gesture_history.append(current_gesture)
            
            if len(gesture_history) >= 3:
                final_gesture = max(set(gesture_history), key=gesture_history.count)
            else:
                final_gesture = current_gesture
            
            # 显示识别结果和关键距离(调试用)
            debug_text = f"{final_gesture}"
            cv2.putText(frame, debug_text, (10, 50),
                        cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    
    cv2.imshow('Hand Gesture Recognition', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

整体代码其实不多,我们接下来看看实际效果。

效果展示

这里直接给出图片吧,方便展示效果。

这里总共就四种手势识别,效果可以参考图片,均为截屏。电脑自带的摄像头像素不好,可能很糊。

结语

整个过程只用了无轮对话,效果还是非常好的,这里各位应该对CodeBuddy的能力有着更进一步的了解,希望你能对本期的手势识别的内容有着兴趣,也期待你的脑洞大开,那么我们下期见。

目录
相关文章
|
计算机视觉 Python
Yolov5双目测距-双目相机计数及测距教程(附代码)
Yolov5双目测距-双目相机计数及测距教程(附代码)
|
6月前
|
人工智能 Linux API
OpenClaw 知识库搭建攻略:QMD/向量库/知识图谱三方案+阿里云+本地部署+千问/Coding Plan配置
随着OpenClaw V2026.3.22模块化框架正式成熟,本地知识库与RAG能力已经成为AI智能体从“简单对话”走向“专业可靠”的关键分水岭。单纯依靠大模型上下文已经无法满足长期使用、专业问答、资料检索、低Token消耗的需求。
4000 1
|
人工智能 运维 搜索推荐
CodeBuddy助力数学教学:数学老师直呼内行!
本文探讨AI在数学教学中的应用,解决传统教学中公式编辑耗时、互动题型开发难、学情分析不精准等问题。通过智能生成教学资源、设计互动题型、精准学情分析和个性化资源定制四大功能,大幅提升教学效率与质量。实际案例展示AI生成交互式函数图像课件和立体几何动态模型工具的效果。对比显示,AI辅助教学显著优于传统模式,助力教育数字化转型,推动精准化教学与教研资源共享。
1001 0
|
传感器 机器学习/深度学习 自动驾驶
【多模态融合】CRN 多视角相机与Radar融合 实现3D检测、目标跟踪、BEV分割 ICCV2023
本文介绍使用雷达与多视角相机融合,实现3D目标检测、3D目标跟踪、道路环境BEV分割,它是来自ICCV2023的。CRN,全称是Camera Radar Net,是一个多视角相机-雷达融合框架。 通过融合多视角相机和雷达的特性,生成语义丰富且空间精确的BEV特征图。实现3D物体检测、跟踪和BEV分割任务。
2334 57
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
160406 65
|
JSON Cloud Native Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:后端权限控制
GoWind Admin「风行」是企业级中后台框架,集成Casbin与OPA实现API权限控制。支持RBAC、ABAC等模型,开箱即用,助力高效构建安全的前后端一体化系统。
1077 1
|
数据采集 人工智能 运维
工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来
无人机智能巡检系统凭借高效性、智能化和精准性,解决了传统人工巡检效率低、成本高、漏检风险大的问题。该系统通过“空中机器人+AI分析”,实现多维度数据采集与分析,大幅提升巡检效率和准确性。广泛应用于能源、交通、工业等领域,助力运维模式升级,成为工业4.0时代基础设施运维的标配工具。
2272 19
工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来
|
数据采集 安全 数据挖掘
淘宝天猫宝贝详情页面商品评论采集接口全解析
淘宝天猫商品评论采集接口为电商数据挖掘提供了重要工具。通过分析海量评论,消费者可获取购买决策参考,商家能优化产品与服务,市场研究者则能洞察行业趋势与竞品表现。该接口支持Python请求,助力开发者构建智能分析应用,推动电商生态中各方价值提升。使用时需遵守平台规则,确保数据安全与合法利用。
477 15
|
消息中间件 Kafka 流计算
FlinkKafkaConsumer相同group.id多个任务消费kafka问题
当使用FlinkKafkaConsumer消费Kafka时,即使设置了相同的group.id,由于Flink内部管理partition的消费offset,两个程序仍能同时消费所有数据。这与KafkaConsumer不同,后者严格遵循消费组隔离原则,避免重复消费同一分区的数据。Flink为实现exactly-once语义,需要独立管理offset,这导致了上述现象。
|
存储 机器学习/深度学习 人工智能
二维码生成原理和解码原理
二维码(Quick Response Code,简称QR码)是一种广泛使用的二维条形码技术。二维码能有效地存储和传递信息,广泛应用于商品追溯、支付、广告等多个领域。二维码的主要特点是信息存储量大、读取速度快、容错能力强等。
4434 2