Estou recebendo este erro ao executar o código da aula.
ValueError Traceback (most recent call last) Cell In[44], line 60 57 imagem_anotada = imagem_pessoa_seria.copy() 58 imagem_anotada = anotar_marcos_casca_convexa(imagem_anotada, marcos_faciais) ---> 60 valor_olho_esquerdo = aspecto_razao_olhos(marcos_faciais[0][LEFT_EYE]) 61 valor_olho_direito = aspecto_razao_olhos(marcos_faciais[0][RIGHT_EYE])
Cell In[44], line 28, in aspecto_razao_olhos(pontos_olhos) 26 def aspecto_razao_olhos(pontos_olhos): ---> 28 a = dist.euclidean(pontos_olhos[1], pontos_olhos[5]) 29 b = dist.euclidean(pontos_olhos[2], pontos_olhos[4]) 30 c = dist.euclidean(pontos_olhos[0], pontos_olhos[3])
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\scipy\spatial\distance.py:520, in euclidean(u, v, w) 484 def euclidean(u, v, w=None): 485 """ 486 Computes the Euclidean distance between two 1-D arrays. 487 (...) 518 519 """ --> 520 return minkowski(u, v, p=2, w=w)
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\scipy\spatial\distance.py:463, in minkowski(u, v, p, w) 413 def minkowski(u, v, p=2, w=None): 414 """ 415 Compute the Minkowski distance between two 1-D arrays. 416 (...) 461 462 """ --> 463 u = _validate_vector(u) 464 v = _validate_vector(v) 465 if p <= 0:
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\scipy\spatial\distance.py:302, in _validate_vector(u, dtype) 300 if u.ndim == 1: 301 return u --> 302 raise ValueError("Input vector should be 1-D.")
ValueError: Input vector should be 1-D.
O código executado é este aqui:
def pontos_marcos_faciais(imagem):
retangulos = face_detector(imagem, 1)
if len(retangulos) == 0:
return None
marcos = []
for ret in retangulos:
marcos.append(np.matrix([[p.x, p.y] for p in dlib_model_68(imagem,ret).parts()]))
return marcos
def anotar_marcos_faciais(imagem, marcos):
for marco in marcos:
for idx, ponto in enumerate(marco):
centro = (ponto[0,0], ponto[0,1])
cv2.circle(imagem, centro, 3, (255,255,0), -1)
cv2.putText(imagem, str(idx), centro, cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(255,255,255), 2)
return imagem
def aspecto_razao_olhos(pontos_olhos):
a = dist.euclidean(pontos_olhos[1], pontos_olhos[5])
b = dist.euclidean(pontos_olhos[2], pontos_olhos[4])
c = dist.euclidean(pontos_olhos[0], pontos_olhos[3])
aspecto_razao = (a + b)/(2.0 * c)
return aspecto_razao
def anotar_marcos_casca_convexa(imagem, marcos):
retangulos = face_detector(imagem, 1)
if len(retangulos) == 0:
return None
for idx, ret in enumerate(retangulos):
marco = marcos[idx]
pontos = cv2.convexHull(marco[LEFT_EYE])
cv2.drawContours(imagem, [pontos], 0, (0,255,0), 2)
pontos = cv2.convexHull(marco[RIGHT_EYE])
cv2.drawContours(imagem, [pontos], 0, (0,255,0), 2)
return imagem
imagem_pessoa_seria = cv2.imread("px-man-serious.jpg")
imagem_pessoa_seria = cv2.cvtColor(imagem_pessoa_seria, cv2.COLOR_BGR2RGB)
marcos_faciais = pontos_marcos_faciais(imagem_pessoa_seria)
imagem_anotada = imagem_pessoa_seria.copy()
imagem_anotada = anotar_marcos_casca_convexa(imagem_anotada, marcos_faciais)
valor_olho_esquerdo = aspecto_razao_olhos(marcos_faciais[0][LEFT_EYE])
valor_olho_direito = aspecto_razao_olhos(marcos_faciais[0][RIGHT_EYE])
As definições de variavel estão iguais, ou seja LEFT_EYE = OLHO_ESQUERDO, assim como o detector de face e o classificador.