Как нарисовать несколько ориентиров людей в фильме от MediaPipe PosePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как нарисовать несколько ориентиров людей в фильме от MediaPipe Pose

Сообщение Anonymous »

Я пытаюсь заставить нескольких людей рисовать ориентиры, используя Pose MediaPipe с Python3.10.14, но это не работает. Программа принудительно завершает работу без ошибки. Другими словами, оно не попадает в ловушку «кроме» в коде. Ниже приведен код, который всегда терпит неудачу в строкеDetect_result = детектор.detect_async(...).

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

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
from mediapipe import solutions
from mediapipe.tasks.python.vision.pose_landmarker import PoseLandmarkerResult
import cv2
import time
import numpy as np

def print_result(result: mp.tasks.vision.PoseLandmarkerResult, output_image: mp.Image, timestamp_ms: int):
pose_landmarks_list = result.pose_landmarks
annotated_image = output_image.numpy_view()

for pose_landmarks in pose_landmarks_list:
solutions.drawing_utils.draw_landmarks(
annotated_image,
pose_landmarks,
mp.solutions.pose.POSE_CONNECTIONS,
landmark_drawing_spec=solutions.drawing_styles.get_default_pose_landmarks_style())
print('pose landmarker result: {}'.format(annotated_image))

def init_detector(task_name):
model_path = f"./models/{task_name}"

# STEP 2: Create an PoseLandmarker object.
base_options = python.BaseOptions(model_asset_path=model_path)
VisionRunningMode = mp.tasks.vision.RunningMode

options = vision.PoseLandmarkerOptions(
base_options=base_options,
running_mode=VisionRunningMode.LIVE_STREAM,   # VisionRunningMode.LIVE_STREAM, VisionRunningMode.IMAGE
result_callback=print_result,
num_poses=3,    # 1,
min_pose_detection_confidence=0.5,
min_pose_presence_confidence=0.5,
min_tracking_confidence=0.5,
output_segmentation_masks=False)

return options

def draw_landmarks_on_image(rgb_image, detection_result):
pose_landmarks_list = detection_result.pose_landmarks
annotated_image = np.copy(rgb_image)

# Loop through the detected poses to visualize.
for idx in range(len(pose_landmarks_list)):
pose_landmarks = pose_landmarks_list[idx]

# Draw the pose landmarks.
solutions.drawing_utils.draw_landmarks(
annotated_image,
pose_landmarks,
mp.solutions.pose.POSE_CONNECTIONS,
solutions.drawing_styles.get_default_pose_landmarks_style())
return annotated_image

def main():
video_path = "./mp4/my_movie.mp4"

cap = cv2.VideoCapture(video_path)

# if not cap.isOpened():
#     print("Failed to open video file.")
#     exit()

print('selected')
cv2.namedWindow("Video", cv2.WINDOW_AUTOSIZE)  # WINDOW_AUTOSIZE    WINDOW_NORMAL    WINDOW_FULLSCREEN

options = init_detector('pose_landmarker_lite.task')
detector = vision.PoseLandmarker.create_from_options(options)

pTime = 0
cTime = 0
timestamp = 0
while True:
time.sleep(0.01)
success, img = cap.read()

if not success:
break

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=img)
# prevent overflow
fps = cap.get(cv2.CAP_PROP_FPS)
timestamp += 1000 / fps

try:
detection_result = detector.detect_async(mp_image, int(timestamp))   ## 

Подробнее здесь: [url]https://stackoverflow.com/questions/78498808/how-to-draw-multiple-landmark-of-people-on-a-movie-by-mediapipe-pose[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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