1
resposta

[Sugestão] Detecção de fechamento de mão

A função mostrada na aula para dedos fechados apenas vê as coordenadas dos dedos, então, caso a mão esteja de ponta cabeça, acusaria que os dedos estão fechados. Ela pode ser reescrita de forma mais compacta da seguinte forma:

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

Agora, para ver se a mão está fechada, eu utilizei a seguinte função:

def mao_fechada(mao):
    if np.linalg.norm(np.array(mao['coordenadas'][7][0:2]) - np.array(mao['coordenadas'][0][0:2])) > np.linalg.norm(np.array(mao['coordenadas'][6][0:2]) - np.array(mao['coordenadas'][0][0:2])):
        return False
    if np.linalg.norm(np.array(mao['coordenadas'][11][0:2]) - np.array(mao['coordenadas'][0][0:2])) > np.linalg.norm(np.array(mao['coordenadas'][10][0:2]) - np.array(mao['coordenadas'][0][0:2])):
        return False
    if np.linalg.norm(np.array(mao['coordenadas'][15][0:2]) - np.array(mao['coordenadas'][0][0:2])) > np.linalg.norm(np.array(mao['coordenadas'][14][0:2]) - np.array(mao['coordenadas'][0][0:2])):
        return False
    if np.linalg.norm(np.array(mao['coordenadas'][19][0:2]) - np.array(mao['coordenadas'][0][0:2])) > np.linalg.norm(np.array(mao['coordenadas'][18][0:2]) - np.array(mao['coordenadas'][0][0:2])):
        return False
    return True

Onde eu comparo a coordenada da segunda e terceira dobra dos dedos com o ponto do pulso.

1 resposta

Olá Luiz, tudo bem? Espero que sim!

Desculpe pela demora em retornar.

Muito bom Luiz, bem legal a sua solução.

Obrigado por compartilhar aqui no fórum com outras pessoas e por aprimorar o código. Quanto mais praticar e tentar deixar o código da sua forma, mais você se aprimora.

Bons estudos!