1
resposta

Erro no código

Estou com um prblema ao implementar o passo de descobrir os dedos levantados, segue o erro e código:

ERRO info_dedos_mao1 = dedos_levantados(todas_maos[0]) NameError: name 'dedos_levantados' is not defined

CODIGO import cv2 import mediapipe as mp

mp_maos = mp.solutions.hands mp_desenho = mp.solutions.drawing_utils maos = mp_maos.Hands()

resolucao_x = 1280 resolucao_y = 720 camera = cv2.VideoCapture(0) camera.set(cv2.CAP_PROP_FRAME_WIDTH, resolucao_x) camera.set(cv2.CAP_PROP_FRAME_HEIGHT, resolucao_y)

def encontra_coordenadas_maos(img, lado_invertido = False): img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) resultado = maos.process(img_rgb) todas_maos = []

if resultado.multi_hand_landmarks:
    for lado_mao, marcacoes_maos in zip(resultado.multi_handedness, resultado.multi_hand_landmarks):
        info_mao = {}
        coordenadas = []
        for marcacao in marcacoes_maos.landmark:
            coord_x, coord_y, coord_z = int(marcacao.x * resolucao_x), int(marcacao.y * resolucao_y), int(marcacao.z * resolucao_y)
            coordenadas.append((coord_x, coord_y, coord_z))

        info_mao['coordenadas'] = coordenadas
        if lado_invertido:
            if lado_mao.classification[0].label == 'Left':
                info_mao['lado'] = 'Right'
            else:
                info_mao['lado'] = 'Left'
        else:
            info_mao['lado'] = lado_mao.classification[0].label
        todas_maos.append(info_mao)

        mp_desenho.draw_landmarks(img,
                                marcacoes_maos,
                                mp_maos.HAND_CONNECTIONS)

return img, todas_maos

def dedos_levantados(mao):
    dedos = []
    for ponta_dedo in [8,12,16,20]:
        if mao['coordenadas'][ponta_dedo][1] < mao['coordenadas'][ponta_dedo-2][1]:
            dedos.append(True)
        else:
                dedos.append(False)
    return dedos

while True: sucesso, img = camera.read() img = cv2.flip(img, 1)

img, todas_maos = encontra_coordenadas_maos(img)

if len(todas_maos) == 1:
    info_dedos_mao1 = dedos_levantados(todas_maos[0])
    print(info_dedos_mao1)

cv2.imshow("Imagem", img)
tecla = cv2.waitKey(1)
if tecla == 27:
    break
1 resposta

Olá Evandro, tudo bem? Espero que sim!

Desculpe pela demora em retornar.

O problema ocorreu porque a criação da função dedos_levantados está dentro do if, portanto ela não será criada. Esse é um problema de indentação.

Bons estudos!