es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener uno de los valores específicos (con el índice específico) de esta enumeración iterable (results.pose_landmarks.landmark)?

import cv2 #OpenCV es la biblioteca que utilizaremos para el procesamiento de imágenes
import mediapipe as mp #Mediapipe es el framework que nos permitirá obtener nuestra estimación de postura
import time

mpDraw = mp.solutions.drawing_utils
mpPose = mp.solutions.pose

pose = mpPose.Pose()

h1>pose = mpPose.Pose(static<em>image</em>mode = False, upper<em>body</em>only = True) #SOLO SEGUIMIENTO DEL UPPER<em>BODY</em>

h1>cap = cv2.VideoCapture(0)

cap = cv2.VideoCapture('PoseVideos/1<em>girl</em>choreography.mp4')

pTime = 0 #tiempo previo

while True:
    success, img = cap.read() #esto nos dará nuestra imagen y luego podremos escribir cv2.imshow()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #convertimos nuestra imagen a RGB porque Mediapipe utiliza ese formato
    results = pose.process(imgRGB) #simplemente vamos a enviar esta imagen a nuestro modelo

# imprimir(enumerar(results.pose_landmarks.landmark)) #<enumerat object at 0x0000012312DD1A00>

# por lo tanto, vamos a comprobar si está detectado o no
if results.pose_landmarks:

    mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS) 

    for id, lm in enumerate(results.pose_landmarks.landmark):

        h, w, c = img.shape #obtener dimensiones (h altura, w anchura) y el canal c de la imagen

        print(id)
        print(lm)

        cx, cy = int(lm.x * w), int(lm.y * h)

        cv2.circle(img, (cx, cy), 5, (255, 0, 0), cv2.FILLED)


cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime

cv2.putText(img, str(int(fps)), (70, 50), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 3)

cv2.imshow("Image", img)
cv2.waitKey(1)

Quiero hacer lo mismo que hace el bucle for, pero en lugar de hacerlo para todos los elementos (id) dentro de enumerate(), quiero hacerlo solo para id = 25, ya que en este caso es el único punto que me interesa.

¿Qué tendría que cambiar en esa instrucción del bucle que utiliza como iterable a esto enumerate(results.pose_landmarks.landmark)?

¿Cómo puedo ingresar un id[25] y un lm[25]?

He intentado con itertools, pero no funciona en este caso.

“`python
import itertools

gen = (id, lm for id, lm in enumerate(results.pose<em>landmarks.landmark))
specific</em>id, specific<em>lm = 25,25 #índice
print( next(itertools.islice(gen, specific<em>id, None)) )
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para recorrer solo el id = 25, podemos eliminar el bucle for y acceder a la información directamente usando results.pose_landmarks.landmark[25]. Esto nos dará la información sobre el punto 25.

    Para acceder al id y al lm para el punto 25, podemos modificar el código de la siguiente manera:

    id = 25
    lm = results.pose_landmarks.landmark[25]
    

    Esto asignará el id e información sobre el punto 25 a las variables id y lm. Podemos usar estas variables para realizar las operaciones necesarias.

    El enfoque de itertools puede que no funcione en este caso, ya que está diseñado para iterar sobre todos los elementos de una secuencia. Dado que solo necesitamos acceder a un elemento específico, puede ser más fácil acceder directamente a ese elemento usando su índice.

Comments are closed.