Как правильно добавлять в циклеPython

Программы на Python
Ответить
Anonymous
 Как правильно добавлять в цикле

Сообщение Anonymous »

извините за весь код
Я очень неопытен и не знаю, как правильно упрощать

< h2>Контекст
Поза Извлечение ключевых точек изображения/видео
координаты ключевых точек и рассчитанные углы экспортируются в формат .csv для последующего анализа

Код: Выделить всё

import csv
import pandas as pd
from ultralytics import YOLO
from pathlib import Path
import numpy as np

model = YOLO("yolo11n-pose.pt")
results = model.track(source='file.png', save=False)

def calculate_angle(p1, p2, p3):
# p1, p2, p3 are the points in format [x, y]
# Calculate the vectors
v1 = np.array(p1) - np.array(p2)
v2 = np.array(p3) - np.array(p2)

# Calculate the angle in radians
angle_rad = np.arccos(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))

# Convert to degrees
angle_deg = np.degrees(angle_rad)

return angle_deg

ja_list = [[9,7,5], [10,8,6], [7,5,11], [8,6,12], [5,11,13], [6,12,14], [11,13,15], [12,14,16]]

# Initialize an empty list to store data
data = []

for frame_id, (frame_results) in enumerate(results):
for person_id, person in enumerate(frame_results.keypoints):
xy = person.xyn.numpy()  # keypoints coordinates
conf = person.conf.numpy()  # confidence scores of keypoints
for kp_id, (xy, kp_conf) in enumerate(zip(xy, conf)):
xy_str = ', '.join(map(str, xy))  # Convert the array to a comma-separated string

data.append({"frame_id": frame_id, "person_id": person_id, "nose, left eye, right eye, left ear, right ear, left shoulder, right shoulder, left elbow, right elbow, left wrist, right wrist, left hip, right hip, left knee, right knee, left ankle, right ankle": xy_str})

for ja in ja_list:
angle = calculate_angle(xy[ja[0]],xy[ja[1]],xy[ja[2]])
str_angle = angle

data.append({"left elbow angle, right elbow angle, left shoulder angle, right shoulder angle, left hip angle, right hip angle, left knee angle, right knee angle":  str_angle})

df = pd.DataFrame(data)
df.to_csv('file.csv', escapechar=' ', quoting=csv.QUOTE_NONE, index=False)
Текущий результат

Код: Выделить всё

frame_id,person_id,nose ,  left  eye ,  right  eye ,  left  ear ,  right  ear ,  left  shoulder ,  right  shoulder ,  left  elbow ,  right  elbow ,  left  wrist ,  right  wrist ,  left  hip ,  right  hip ,  left  knee ,  right  knee ,  left  ankle ,  right  ankle,left  elbow  angle ,  right  elbow  angle ,  left  shoulder  angle ,  right  shoulder  angle ,  left  hip  angle ,  right  hip  angle ,  left  knee  angle ,  right  knee  angle
0.0,0.0,[        0.27054          0.32959] ,  [        0.27079          0.32787] ,  [        0.26698          0.32339] ,  [                    0                      0] ,  [        0.25605          0.33095] ,  [        0.27429          0.39124] ,  [        0.24764          0.34531] ,  [        0.29295          0.40439] ,  [        0.25213            0.2805] ,  [        0.31294          0.41499] ,  [        0.26839          0.21751] ,  [        0.25684          0.49569] ,  [        0.23976          0.47824] ,  [        0.26361          0.59153] ,  [        0.25314          0.57706] ,  [        0.26301          0.68071] ,  [        0.25716          0.68032],
,,,172.7757568359375
,,,169.49624633789062
,,,64.31809997558594
,,,179.4266357421875
,,,166.47421264648438
,,,168.8917999267578
,,,175.57078552246094
,,,174.5126953125
Желаемый результат

Код: Выделить всё

frame_id,person_id,nose ,  left  eye ,  right  eye ,  left  ear ,  right  ear ,  left  shoulder ,  right  shoulder ,  left  elbow ,  right  elbow ,  left  wrist ,  right  wrist ,  left  hip ,  right  hip ,  left  knee ,  right  knee ,  left  ankle ,  right  ankle,left  elbow  angle ,  right  elbow  angle ,  left  shoulder  angle ,  right  shoulder  angle ,  left  hip  angle ,  right  hip  angle ,  left  knee  angle ,  right  knee  angle
0.0,0.0,[        0.27054          0.32959] ,  [        0.27079          0.32787] ,  [        0.26698          0.32339] ,  [                    0                      0] ,  [        0.25605          0.33095] ,  [        0.27429          0.39124] ,  [        0.24764          0.34531] ,  [        0.29295          0.40439] ,  [        0.25213            0.2805] ,  [        0.31294          0.41499] ,  [        0.26839          0.21751] ,  [        0.25684          0.49569] ,  [        0.23976          0.47824] ,  [        0.26361          0.59153] ,  [        0.25314          0.57706] ,  [        0.26301          0.68071] ,  [        0.25716          0.68032], 172.7757568359375, 169.49624633789062, 64.31809997558594, 179.4266357421875, 166.47421264648438, 168.8917999267578, 175.57078552246094, 174.5126953125
Я пробовал:
str_angle = ', '.join(map(str, angular))
Ошибка:
Объект 'numpy.float32' не повторяется

Я также пытался интегрироваться в для kp_id< /code> цикл, но не знаю как
Извините, если это тривиально, я часами искал это везде, где мог, но сдался

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-a-loop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»