1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/duping812-jetson-inference

Клонировать/Скачать
posenet.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 15:38 5e07e18

Назад | Вперед | Содержание
Оценка позы

# Оценка позы с использованием PoseNet Оценка позы включает в себя определение различных частей тела (также известных как ключевые точки), которые образуют скелетную топологию (также известную как связи). Оценка позы имеет множество применений, включая жесты, AR/VR, HMI (человек/машинный интерфейс) и корректировку походки и осанки. [Предварительно обученные модели](#предварительно-обученные-модели-оценки-позы) предоставляются для оценки позы тела человека и руки, которые способны обнаруживать несколько человек на кадр. Объект [`poseNet`](../c/poseNet.h) принимает изображение в качестве входных данных и выводит список поз объектов. Каждая поза объекта содержит список обнаруженных ключевых точек, а также их местоположений и связей между ключевыми точками. Вы можете запросить эти данные для поиска определенных особенностей. [`poseNet`](../c/poseNet.h) может использоваться из [Python](https://rawgit.com/dusty-nv/jetson-inference/dev/docs/html/python/jetson.inference.html#poseNet) и [C++](../c/poseNet.h). В качестве примеров использования класса `poseNet` мы предоставляем образец программ для C++ и Python: - [`posenet.cpp`](../examples/posenet/posenet.cpp) (C++) - [`posenet.py`](../python/examples/posenet.py) (Python)Эти образцы способны обнаруживать позы нескольких человек на изображениях, видео и потоках с камеры. Для получения дополнительной информации о различных типах входных/выходных потоков, поддерживаемых, см. страницу [Потоковое вещание с камеры и мультимедиа](aux-streaming.md).

Оценка позы на изображениях

Сначала попробуем запустить образец posenet на некоторых примерных изображениях. В дополнение к путям входных/выходных данных, есть некоторые дополнительные опции командной строки, которые являются необязательными:

  • необязательный флаг --network, который изменяет модель оценки позы (по умолчанию используется resnet18-body).
  • необязательный флаг --overlay, который может быть комбинацией box, links, keypoints и none, разделенными запятыми
    • По умолчанию используется --overlay=links,keypoints, что отображает круги над ключевыми точками и линии над связями.
  • необязательное значение --keypoint-scale, которое контролирует радиус окружностей ключевых точек в накладке (по умолчанию 0.0052).
  • необязательное значение --link-scale, которое контролирует толщину линий соединений в накладке (по умолчанию 0.0013).
  • необязательное значение --threshold, которое устанавливает минимальный порог для обнаружения (по умолчанию 0.15).Если вы используете Docker-контейнер, рекомендуется сохранять выходные изображения в смонтированном каталоге images/test. Эти изображения будут легко доступны на вашем устройстве по адресу jetson-inference/data/images/test (для получения дополнительной информации см. Смонтированные данные).

Вот несколько примеров оценки человеческой позы с использованием модели Pose-ResNet18-Body по умолчанию:

# C++
$ ./posenet "images/humans_*.jpg" images/test/pose_humans_%i.jpg
# Python
$ ./posenet.py "images/humans_*.jpg" images/test/pose_humans_%i.jpg
> **Примечание**: в первый раз, когда вы запускаете каждую модель, TensorRT затрачивает несколько минут на оптимизацию сети.
>           Этот оптимизированный файл сети затем кэшируется на диске, поэтому будущие запуски с использованием этой модели будут загружаться быстрее.

Также есть тестовые изображения людей под "images/peds_*.jpg", которые вы можете попробовать.

Оценка позы из видео

Чтобы выполнить оценку позы на потоке камеры или видео, передайте путь к устройству или файлу с страницы потокового вещания и мультимедиа.```bash

C++

$ ./posenet /dev/video0 # csi://0 если используется MIPI CSI камера

Python

$ ./posenet.py /dev/video0 # csi://0 если используется MIPI CSI камера

<a href="https://www.youtube.com/watch?v=hwFtWYR986Q" target="_blank"><img src="https://github.com/dusty-nv/jetson-inference/raw/dev/docs/images/posenet-video-body.jpg" width="750"></a>
```bash
# C++
$ ./posenet --network=resnet18-hand /dev/video0
# Python
$ ./posenet.py --network=resnet18-hand /dev/video0

## Предварительно обученные модели оценки позы Ниже приведены предварительно обученные сети оценки позы, доступные для [скачивания](building-repo-2. # Загрузка моделей). Используйте команду загрузки моделей (Model Downloader) и соответствующий аргумент --network для posenet для загрузки предобученных моделей:

Модель Аргумент CLI NetworkType enum Количество ключевых точек
Pose-ResNet18-Body resnet18-body RESNET18_BODY 18
Pose-ResNet18-Hand resnet18-hand RESNET18_HAND 21
Pose-DenseNet121-Body densenet121-body DENSENET121_BODY 18

Примечание: для загрузки дополнительных сетей запустите [инструмент загрузки моделей](building-repo-2. md#downloading-models):

$ cd jetson-inference/tools
$ ./download-models.sh

Вы можете указать, какую модель загружать, установив флаг --network на командной строке одним из соответствующих аргументов CLI из таблицы выше. По умолчанию используется Pose-ResNet18-Body, если опциональный флаг --network не указан.

Работа с объектами и их позами

Если вы хотите получить доступ к местоположениям ключевых точек позы, функция poseNet.Process() возвращает список структур poseNet.ObjectPose. Каждая поза объекта представляет один объект (например, одного человека) и содержит список обнаруженных ключевых точек и связей — для получения дополнительной информации см. Python и C++ документацию.Вот псевдокод на Python для нахождения направления (в пространстве изображения), в котором человек указывает, путем формирования вектора между ключевыми точками left_shoulder и left_wrist:

poses = net.Process(img)
for pose in poses:
    # найдите индекс ключевой точки из списка обнаруженных ключевых точек
    # вы можете найти эти имена ключевых точек в JSON-файле модели,
    # или с помощью net.GetKeypointName() / net.GetNumKeypoints()
    left_wrist_idx = pose.FindKeypoint('left_wrist')
    left_shoulder_idx = pose.FindKeypoint('left_shoulder')
    # если индекс ключевой точки меньше 0, это означает, что она не была найдена на изображении
    if left_wrist_idx < 0 or left_shoulder_idx < 0:
        continue
    left_wrist = pose.Keypoints[left_wrist_idx]
    left_shoulder = pose.Keypoints[left_shoulder_idx]
    point_x = left_shoulder.x - left_wrist.x
    point_y = left_shoulder.y - left_wrist.y
    print(f"Человек {pose.ID} указывает в направлении ({point_x}, {point_y})")

Это был простой пример, но вы можете сделать его более полезным с помощью дальнейшей манипуляции векторами и изучения дополнительных ключевых точек. Также существуют более продвинутые техники, использующие машинное обучение для классификации жестов на основе результатов определения поста, как в проекте trt_hand_pose.

Далее | Монокулярная оценка глубины Назад | Запуск демонстрации сегментации в реальном времени

© 2016-2021 NVIDIA | Содержание

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/duping812-jetson-inference.git
git@api.gitlife.ru:oschina-mirror/duping812-jetson-inference.git
oschina-mirror
duping812-jetson-inference
duping812-jetson-inference
master