Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

valor do aspecto de razão

Quando eu executo o código para visualizar o valor do aspecto de razão me apresenta o seguinte erro:

valor_olho_esquerdo = aspecto_razao_olhos(marcos_faciais[0][OLHO_ESQUERDO])
valor_olho_esquerdo
ValueError                                Traceback (most recent call last)
Cell In[112], line 1
----> 1 valor_olho_esquerdo = aspecto_razao_olhos(marcos_faciais[0][OLHO_ESQUERDO])
      2 valor_olho_esquerdo

Cell In[111], line 3, in aspecto_razao_olhos(pontos_olhos)
      1 def aspecto_razao_olhos(pontos_olhos):
----> 3     a = dist.euclidean(pontos_olhos[1], pontos_olhos[5])
      4     b = dist.euclidean(pontos_olhos[2], pontos_olhos[4])
      5     c = dist.euclidean(pontos_olhos[0], pontos_olhos[3])

File ~\anaconda3\envs\vc-analise-facial\lib\site-packages\scipy\spatial\distance.py:518, in euclidean(u, v, w)
    482 def euclidean(u, v, w=None):
    483     """
    484     Computes the Euclidean distance between two 1-D arrays.
    485 
   (...)
    516 
    517     """
--> 518     return minkowski(u, v, p=2, w=w)

File ~\anaconda3\envs\vc-analise-facial\lib\site-packages\scipy\spatial\distance.py:461, in minkowski(u, v, p, w)
    411 def minkowski(u, v, p=2, w=None):
    412     """
    413     Compute the Minkowski distance between two 1-D arrays.
    414 
   (...)
    459 
    460     """
--> 461     u = _validate_vector(u)
    462     v = _validate_vector(v)
    463     if p <= 0:

File ~\anaconda3\envs\vc-analise-facial\lib\site-packages\scipy\spatial\distance.py:301, in _validate_vector(u, dtype)
    299 if u.ndim == 1:
    300     return u
--> 301 raise ValueError("Input vector should be 1-D.")

ValueError: Input vector should be 1-D.

O mesmo erro acontece para o olho direito!

2 respostas

Eu cosnegui resolver da seguinte forma:

def aspecto_razao_olhos(pontos_olhos):

    a = dist.euclidean(pontos_olhos[1].tolist()[0], pontos_olhos[5].tolist()[0])
    b = dist.euclidean(pontos_olhos[2].tolist()[0], pontos_olhos[4].tolist()[0])
    c = dist.euclidean(pontos_olhos[0].tolist()[0], pontos_olhos[3].tolist()[0])

    aspecto_razao = (a + b)/(2.0 * c)

    return aspecto_razao

Aparentemente, da forma que o professor faz, é passado um valor em em pontos_olhos[x] como matrix[[y, w]], com o .tolist() eu transformo em [[y, w]], então, com o [0] no final, acesso como [y, z], assim a função dist.euclidean() consegue calcular os valores. Testei e eles aparecem iguais aos do notebook a aula.

solução!

Olá Leandro, tudo bem?

Você chegou a executar esse trecho que mapea os ids dos pontos antes?

FACE = list(range(17, 68))
FACE_COMPLETA = list(range(0, 68))
LABIO = list(range(48, 61))
SOMBRANCELHA_DIRETA = list(range(17, 22))
SOMBRANCELHA_ESQUERDA = list(range(22, 27))
OLHO_DIREITO = list(range(36,42))
OLHO_ESQUERDO = list(range(42,48))
NARIZ = list(range(27,35))
MANDIBULA = list(range(0,17))