Поэтому я пытаюсь использовать 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
Отслеживание рук Mediapipe очень медленное? ⇐ Python
Программы на Python
-
Anonymous
1734372734
Anonymous
Поэтому я пытаюсь использовать Mediapipe с Python для отслеживания своих рук.
Я следил за документацией на этом веб-сайте разработчиков Google
https ://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker/python
и этот веб-сайт
https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/hand_landmarker/python/hand_landmarker.ipynb#scrollTo=s3E6NFV-00Qt&uniqifier=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```
Подробнее здесь: [url]https://stackoverflow.com/questions/79285675/mediapipe-hand-tracking-is-very-slow[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия