Отслеживание рук Mediapipe очень медленное?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Отслеживание рук Mediapipe очень медленное?

Сообщение Anonymous »

Поэтому я пытаюсь использовать Mediapipe с Python для отслеживания своих рук.
Я следил за документацией на этом веб-сайте разработчиков Google

https ://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker/python

и этот веб-сайт

https://colab.research.google.com/githu ... niqifier=1

Но когда я запускаю программу, она очень тормозит, примерно 2 или 3 fps
Загрузка процессора составляет около 10%, а графического процессора — около 3% при работе. На утечку памяти это тоже не похоже.
Может быть, это явно очевидная ошибка, но я действительно не знаю...
Спасибо заранее!
import mediapipe as mp
from mediapipe import solutions
from mediapipe.framework.formats import landmark_pb2
import numpy as np
import cv2 as cv

BaseOptions = mp.tasks.BaseOptions
HandLandmarker = mp.tasks.vision.HandLandmarker
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
HandLandmarkerResult = mp.tasks.vision.HandLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode

mp_hands = mp.solutions.hands
mp_drawing = mp.solutions.drawing_utils

MARGIN = 10 # pixels
FONT_SIZE = 1
FONT_THICKNESS = 1
HANDEDNESS_TEXT_COLOR = (88, 205, 54) # vibrant green

#This function is copied from the documentation. The error could lie in this function but then the google employees have to update their code.

def draw_landmarks_on_image(rgb_image, detection_result):
hand_landmarks_list = detection_result.hand_landmarks
handedness_list = detection_result.handedness
annotated_image = np.copy(rgb_image)

# Loop through the detected hands to visualize.
for idx in range(len(hand_landmarks_list)):
hand_landmarks = hand_landmarks_list[idx]
handedness = handedness_list[idx]

# Draw the hand landmarks.
hand_landmarks_proto = landmark_pb2.NormalizedLandmarkList()
hand_landmarks_proto.landmark.extend([
landmark_pb2.NormalizedLandmark(x=landmark.x, y=landmark.y, z=landmark.z) for landmark in hand_landmarks
])
solutions.drawing_utils.draw_landmarks(
annotated_image,
hand_landmarks_proto,
solutions.hands.HAND_CONNECTIONS,
solutions.drawing_styles.get_default_hand_landmarks_style(),
solutions.drawing_styles.get_default_hand_connections_style())

# Get the top left corner of the detected hand's bounding box.
height, width, _ = annotated_image.shape
x_coordinates = [landmark.x for landmark in hand_landmarks]
y_coordinates = [landmark.y for landmark in hand_landmarks]
text_x = int(min(x_coordinates) * width)
text_y = int(min(y_coordinates) * height) - MARGIN

# Draw handedness (left or right hand) on the image.
cv.putText(annotated_image, f"{handedness[0].category_name}",
(text_x, text_y), cv.FONT_HERSHEY_DUPLEX,
FONT_SIZE, HANDEDNESS_TEXT_COLOR, FONT_THICKNESS, cv.LINE_AA)

return annotated_image

def draw_and_open_window(result: HandLandmarkerResult, output_image: mp.Image, timestamp_ms: int):

annotated_image = draw_landmarks_on_image(output_image.numpy_view(), result)

cv.imshow("newwindow", annotated_image)

if cv.waitKey(1) & 0xFF == ord('q'):
exit()

options = HandLandmarkerOptions(
#path is correct, i removed it for the post
base_options=BaseOptions(model_asset_path='C:/etc/etc'),
running_mode=VisionRunningMode.LIVE_STREAM,
result_callback=draw_and_open_window
)

landmarker = HandLandmarker.create_from_options(options)

#4 is the correct camera
cap = cv.VideoCapture(4)

timestamp_ms = 0

while cap.isOpened():
ret, frame = cap.read()

if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break

mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=frame)

timestamp_ms += 1

landmarker.detect_async(mp_image, timestamp_ms)
cap.release()
cv.destroyAllWindows```



Подробнее здесь: https://stackoverflow.com/questions/792 ... -very-slow
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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