【手势识别小车】---------(4)手势识别

计划采用MediaPipe框架进行手势识别
参考这个
还有这个
首先先安装库

pip install mediapipe -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

博主安装完这个之后,第一次调用失败了,并且报错

module 'mediapipe' has no attribute 'solutions'

这是因为犯了一个很傻的错,我把.py文件的名字起的是mediapipe,跟这个库的名字重复了,调整后再运行就没问题了

识别算法:
根据返回的手指关节坐标计算不同动作应该达到的标准
请添加图片描述

前进:十指并拢。 中指(5678),食指(9,10,11,12),无名指(13,14,15,16),小指(17,18,19,20)斜率相同且大于10,12到0的距离大于100
停止:握拳。12到0的距离小于50
左转:五指向左。中指斜率在-1到0之间
右转:五指向右。中指斜率在0到1之间

展示一下最终效果,关于对于手势的识别

最后附上代码:

# -*-coding:utf-8-*-
import cv2
import mediapipe as mp
import time
import math
import cmath
cap = cv2.VideoCapture(0)
#该函数的参数
#static_image_mode,max_num_hands,min_detection_confidence,min_tracking_confidence
mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0#开始时间初始化
cTime = 0#目前时间初始化
xs = []
ys = []
ks = []
#大小为21的数组初始化
for i in range(0,21):
    xs.append(0)
    ys.append(0)
for i in range(0,4):
    ks.append(0)
#计算两点间的距离
def point_distance(x1, y1, x2, y2 ):
    dis = abs(math.sqrt((x2 - x1)*(x2 - x1)+(y2 - y1)*(y2 - y1)))
    return dis
def K_count():
    k=5
    i=0
    while(k<20):
        aveX1 = (xs[k] + xs[k+1] + xs[k+2] + xs[k+3]) / 4
        aveY1 = (ys[k] + ys[k+1] + ys[k+2] + ys[k+3]) / 4
        k1 = (xs[k] * ys[k] + xs[k+1] * ys[k+1] + xs[k+2] * ys[k+2] + xs[k+3] * ys[k+3] - 4 * aveX1 * aveY1) / (
                    xs[k] * xs[k] + xs[k+1] * xs[k+1] + xs[k+2] * xs[k+2] + xs[k+3] * xs[k+3] - 4 * aveX1 * aveX1)
        ks[i] = k1
        i += 1
        k += 4
    avek = sum(ks)/4
    ks0 = abs(ks[0] - avek)
    ks1 = abs(ks[1] - avek)
    ks2 = abs(ks[2] - avek)
    ks3 = abs(ks[3] - avek)
    dis = point_distance(xs[12], ys[12], xs[0], ys[0])
    if (ks0+ks1+ks2+ks3) < 3.5 and dis > 100 and abs(ks[1]) > 3:
        print("前进")
    elif (ks0+ks1+ks2+ks3) < 3.5 and dis > 100 and -1 < ks[1] < 0:
        print("左转")
    elif (ks0 + ks1 + ks2 + ks3) < 3.5 and dis > 100 and 0 < ks[1] < 1:
        print("右转")
    elif dis < 100:
        print("停止")
while True:
    count = 0
    success, img = cap.read()#BGR存储格式
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#转为RGB存储
    #处理返回的手的标志点以及处理
    results = hands.process(imgRGB)
    if results.multi_hand_landmarks:#返回none或手的标志点坐标
        for handLms in results.multi_hand_landmarks:
            #id是索引,lm是x,y坐标
            for id, lm in enumerate(handLms.landmark):
                h, w, c = img.shape
                cx, cy = int(lm.x*w), int(lm.y*h)
               # print(id, cx, cy)
                xs[id] = cx
                ys[id] = cy
                cv2.circle(img, (cx, cy), 14, (205, 100, 255), cv2.FILLED)
                cv2.putText(img, str(int(id)), (cx, cy), cv2.FONT_HERSHEY_PLAIN, 2,
                (200, 20, 50), 5)
            K_count()
            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime
    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 1)
    cv2.imshow("Image", img)
    k = cv2.waitKey(1)
    if k == 27:
        cap.release()
        cv2.destroyAllWindows()
        exit()





  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于ARM-STM32的手势感应无线遥控小车是一种创新的智能小车设计。该小车利用ARM-STM32作为控制器,实现手势感应和无线遥控功能。 手势感应是通过一种特殊的传感器技术,能够识别人的手势动作并将其转化为相应的指令。在这个小车中,通过使用加速度计和陀螺仪等传感器,可以实时获取用户的手部动作,并将其转化为控制指令。比如,当用户向左移动手掌时,小车向左转动;当用户向右移动手掌时,小车向右转动。这种手势感应的控制方式更加直观和方便,用户可以通过简单的手势动作来操控小车的运动。 此外,该小车还具备无线遥控功能,用户可以通过无线遥控器来控制小车的运动。无线遥控技术使用了一种无线通信模块,通过发送和接收信号来控制小车的移动。用户可以通过按键或摇杆等操作来控制小车的前进、后退、左转和右转。无线遥控使小车的控制更加灵活,用户可以远程操控小车,无需与小车保持实时连接。 基于ARM-STM32的手势感应无线遥控小车具有多种应用场景。首先,它可以作为玩具,提供给儿童玩乐和探索的机会。其次,它可以用作教育工具,帮助学生了解物理原理和电子技术。此外,它还可以用于智能家居领域,通过手势感应和无线遥控来控制家电或监控设备。总之,这种手势感应无线遥控小车集成了多种技术,为用户提供了一种新颖而方便的控制方式,拓展了无线遥控应用的可能性。 ### 回答2: 基于ARM-STM32的手势感应无线遥控小车是一种通过手势识别技术实现远程控制的小车。该小车由STM32芯片作为控制核心,集成了无线通信模块和手势传感器,并且搭载了各种传感器和执行器,具备了智能避障、路径规划、图像识别等功能。 用户可以通过手势传感器来控制小车的运动。手势传感器可以识别用户的手势动作,比如向上划动手指,小车就会向前行驶;向下划动手指,小车就会后退;向左或向右划动手指,则小车会进行相应的转向操作。这种操作方式使得用户能够更加直观地控制小车的移动,提高了交互体验。 基于ARM-STM32的控制芯片,具有较高的计算和处理能力,能够实现实时的手势识别和远程控制。无线通信模块可以使得小车和操作者之间建立可靠的通信连接,实现远程控制。同时,小车还可以通过搭载的传感器实现其他功能,比如超声波距离传感器用于避障,图像传感器用于图像识别等。 总而言之,基于ARM-STM32的手势感应无线遥控小车通过手势传感器和无线通信实现了远程控制功能,方便用户进行移动操作。同时,搭载的其他传感器和执行器可以实现更多的智能功能,提高了小车的自主性和实用性。这种技术能够应用于多个领域,比如智能家居、仓储物流等,具有广阔的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值