Назад | Далее | Содержание
Моно-глубина
Объект depthNet
принимает на вход одно цветное изображение и выводит карту глубины. Карта глубины окрашивается для визуализации, но также доступен неокрашенный поле глубины для прямого доступа к глубинам. depthNet
доступен для использования из Python и C++.
В качестве примеров использования класса depthNet
мы предоставляем образец программ для C++ и Python:
depthnet.cpp
(C++)depthnet.py
(Python)Эти образцы могут определить глубину из изображений, видео и потоков с камеры. Для получения дополнительной информации о различных типах поддерживаемых входных/выходных потоков, см. страницу Потоковое видео с камеры и мультимедиа.## Моно-глубина на изображениях
Сначала попробуем запустить образец depthnet
на некоторых примерных изображениях. В дополнение к путям входных/выходных данных, есть некоторые дополнительные опции командной строки, которые являются необязательными:--network
, который изменяет используемую модель глубины (рекомендуемое значение по умолчанию — fcn-mobilenet
).--visualize
, который может быть комбинацией значений input
, depth
через запятую.
--visualize=input,depth
, что отображает входное и изображение глубины рядом.--visualize=depth
.--depth-size
, которое масштабирует размер карты глубины относительно входного изображения (по умолчанию — 1.0
).--filter-mode
, который выбирает режим фильтрации point
или linear
, используемый для увеличения разрешения (по умолчанию установлено значение linear
).--colormap
, который устанавливает цветовую карту для использования при визуализации (по умолчанию установлено значение viridis_inverted
).
Если вы используете Docker-контейнер, рекомендуется сохранять выходные изображения в смонтированном каталоге images/test
.
Эти изображения будут легко доступны на вашем устройстве по адресу jetson-inference/data/images/test
(для получения дополнительной информации см.).Смонтированные данные).
Вот несколько примеров оценки глубины для моно-изображений на внутренних сценах:
# C++
$ . /depthnet "images/room_*.jpg" images/test/depth_room_%i.jpg
# Python
$ . /depthnet.py "images/room_*.jpg" images/test/depth_room_%i.jpg
import jetson.inference
import jetson.utils
import numpy as np
# Загрузка сети монокулярной глубины
net = jetson.inference.depthNet()
# depthNet использует одно и то же память для поля глубины,
# поэтому вам нужно сделать это только один раз (не каждую кадровую съемку)
depth_field = net.GetDepthField()
# cudaToNumpy() отображает cudaImage поля глубины на numpy
# это отображение является постоянным, поэтому вам нужно сделать это только один раз
depth_numpy = jetson.utils.cudaToNumpy(depth_field)
print(f"разрешение поля глубины {depth_field.width}x{depth_field.height}, формат={depth_field.format}")
while True:
img = input.Capture() # Предполагается, что вы создали поток входного видео
net.Process(img)
jetson.utils.cudaDeviceSynchronize() # Ждем завершения обработки GPU, чтобы мы могли использовать результаты на CPU
# Находим минимальные и максимальные значения с помощью numpy
min_depth = np.amin(depth_numpy)
max_depth = np.amax(depth_numpy)
#include <jetson-inference/depthNet.h>
// Загрузка сети монокулярной глубины
depthNet* net = depthNet::Create();
// depthNet использует одно и то же память для поля глубины,
// поэтому вам нужно сделать это только один раз (не каждую кадровую съемку)
float* depth_field = net->GetDepthField();
const int depth_width = net->GetDepthWidth();
const int depth_height = net->GetDepthHeight();
while(true)
{
uchar3* img = NULL;
input->Capture(&img); // Предполагается, что вы создали поток входного видео
net->Process(img, input->GetWidth(), input->GetHeight());
// Ждем завершения обработки GPU
CUDA(cudaDeviceSynchronize());
}
``` // теперь вы можете безопасно получить доступ к depth_field с CPU (или GPU)
for(int y=0; y < depth_height; y++)
for(int x=0; x < depth_width; x++)
printf("глубина x=%i y=%i -> %f\n", x, y, depth_map[y * depth_width + x]);
}
Попытка измерения абсолютных расстояний с помощью монокулярной глубины может привести к неточностям, так как она обычно более эффективна для оценки относительной глубины. Диапазон значений в исходном поле глубины может варьироваться в зависимости от сцены, поэтому эти значения часто пересчитываются динамически. Например, во время визуализации выполняется гистограммное уравнение по полю глубины для более равномерного распределения цветовой карты по диапазону значений глубины. Далее мы познакомимся с концепциями Transfer Learning и обучим собственные модели DNN на Jetson с использованием PyTorch.
Далее | Transfer Learning с PyTorch
Назад | Оценка позы с PoseNet
© 2016-2021 NVIDIA | Содержание
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )