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.