根据代码,在 get_gesture 函数中缺少了 self 参数,可以将其删除,修改为:

def get_gesture(Lms): # 获取手指的位置 p0_x = Lms.landmark[0].x p0_y = Lms.landmark[0].y

p5_x = Lms.landmark[5].x
p5_y = Lms.landmark[5].y

p8_x = Lms.landmark[8].x
p8_y = Lms.landmark[8].y
p9_x = Lms.landmark[9].x
p9_y = Lms.landmark[9].y

p12_x = Lms.landmark[12].x
p12_y = Lms.landmark[12].y
p13_x = Lms.landmark[13].x
p13_y = Lms.landmark[13].y

p16_x = Lms.landmark[16].x
p16_y = Lms.landmark[16].y
p17_x = Lms.landmark[17].x
p17_y = Lms.landmark[17].y

p20_x = Lms.landmark[20].x
p20_y = Lms.landmark[20].y

# 通过两点距离公式,计算出两个点之间的距离
distance_0_5 = ((p0_x - p5_x) ** 2 + (p0_y - p5_y) ** 2) ** 0.5
distance_0_8 = ((p0_x - p8_x) ** 2 + (p0_y - p8_y) ** 2) ** 0.5
distance_0_9 = ((p0_x - p9_x) ** 2 + (p0_y - p9_y) ** 2) ** 0.5
distance_0_12 = ((p0_x - p12_x) ** 2 + (p0_y - p12_y) ** 2) ** 0.5
distance_0_13 = ((p0_x - p13_x) ** 2 + (p0_y - p13_y) ** 2) ** 0.5
distance_0_16 = ((p0_x - p16_x) ** 2 + (p0_y - p16_y) ** 2) ** 0.5
distance_0_17 = ((p0_x - p17_x) ** 2 + (p0_y - p17_y) ** 2) ** 0.5
distance_0_20 = ((p0_x - p20_x) ** 2 + (p0_y - p20_y) ** 2) ** 0.5
# 通过距离并不能准确地判断手指是否屈伸,因为手可以前后移动,在屏幕中手的大小会改变
# 所以通过从手的0点到手指的距离与食指与手掌的距离的比值进行判断,这样就可根据一个固定值来判断时候手指屈伸
# 食指
base_1 = distance_0_5 / 0.8
# 中指
base_2 = distance_0_9 / 0.8
# 无名指
base_3 = distance_0_13 / 0.8
# 小指
base_4 = distance_0_17 / 0.8

if distance_0_8 > base_1 and distance_0_12 > base_2:
    if distance_0_16 > base_3 and distance_0_20 > base_4:
        user_gesture = 2
    elif distance_0_16 < base_3 and distance_0_20 < base_4:
        user_gesture = 3
    else:
        user_gesture = 0
elif distance_0_8 < base_1 and distance_0_12 < base_2:
    if distance_0_16 < base_3 and distance_0_20 < base_4:
        user_gesture = 1
    else:
        user_gesture = 0
else:
    user_gesture = 0
return user_gestur

原文地址: https://www.cveoy.top/t/topic/fMTP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录