Назад | Вперед | Содержание
Оценка позы
Сначала попробуем запустить образец 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
Также есть тестовые изображения людей под "images/peds_*.jpg"
, которые вы можете попробовать.
Чтобы выполнить оценку позы на потоке камеры или видео, передайте путь к устройству или файлу с страницы потокового вещания и мультимедиа.```bash
$ ./posenet /dev/video0 # csi://0 если используется MIPI CSI камера
$ ./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 )