DashCamNet e PeopleNet com Jetson Xavier NX Multicâmera
Introdução
Atualmente, nos campos de direção autônoma, gravação em carros e monitoramento de infrações, usamos com frequência inteligência artificial para nos ajudar a identificar informações de veículos, placas de veículos e obstáculos ao redor. Graças ao grande número de modelos pré-treinados fornecidos pela Nvidia NGC, podemos executar essas tarefas complexas com mais facilidade.
Criar um modelo de IA/aprendizado de máquina do zero pode custar muito tempo e dinheiro. O aprendizado por transferência é uma técnica popular que pode ser usada para extrair recursos aprendidos de um modelo de rede neural existente para um novo modelo. O NVIDIA TAO (Train, Adapt, and Optimize) Toolkit é uma solução baseada em CLI e notebooks Jupyter do NVIDIA TAO, que abstrai a complexidade do framework de IA/aprendizado profundo, permitindo que você faça o ajuste fino em modelos de IA pré-treinados de alta qualidade da NVIDIA com apenas uma fração dos dados em comparação com o treinamento do zero.
O TAO Toolkit também oferece suporte a mais de 100 permutações de arquiteturas de modelo e backbones otimizados pela NVIDIA, tais como EfficientNet, YOLOv3/v4, RetinaNet, FasterRCNN, UNET e muitos outros.
Crédito ao repositório da NVIDIA e ao projeto de Tomasz, vamos detectar carros e pessoas com várias câmeras implantadas no Jetson Xavier NX. O Jetson SUB Mini PC é adequado para esta demonstração.
O NVIDIA TAO Toolkit era anteriormente chamado de NVIDIA Transfer Learning Toolkit (Tlt).

Requisitos de Materiais
Configuração de Hardware

- Webcam USB / Raspberry Pi Camera V2.1 / câmeras IMX219-130 8MP / câmeras IMX477 de 12,3MP de alta qualidade

- Monitor com interface HDMI, DP ou eDP
- PC com sistema operacional baseado em Linux
Configuração de Software
- Jetpack 4.5 ou 4.6 para Jetson Xavier NX
- Docker
- DeepStream
- TAO Toolkit
- Python3.6 com Pypi (python3-pip) e ambientes virtuais
- NVIDIA Container Toolkit
Os métodos de instalação de software serão fornecidos nas etapas a seguir.
Pré-instalação
Antes de iniciarmos o projeto, precisamos instalar o Docker Engine no Ubuntu. Existem várias maneiras de instalar o Docker Engine e você pode escolher qualquer uma delas conforme suas necessidades. Se você já o configurou, pode pular esta etapa.
- A maioria dos usuários configura os repositórios do Docker e instala a partir deles pela facilidade de instalação e atualização, o que é a abordagem recomendada.
- Alguns usuários baixam o pacote DEB e o instalam manualmente e gerenciam as atualizações completamente de forma manual. Isso é útil em situações como instalar o Docker em sistemas isolados, sem acesso à internet.
- Em ambientes de teste e desenvolvimento, alguns usuários optam por usar scripts de conveniência automatizados para instalar o Docker.
Aqui vamos usar a primeira opção. Antes de instalarmos o Docker, é necessário garantir que a versão dele seja a mais recente. Os nomes das versões antigas podem ser docker, docker.io ou docker-engine; você pode verificar isso usando o seguinte comando:
sudo apt-get purge docker docker-engine docker.io containerd runc
Quando você desinstala o Docker, o conteúdo de /var/lib/docker/, incluindo imagens, contêineres, volumes e redes, é preservado. Se você quiser começar com uma instalação limpa, pode consultar a seção uninstall Docker Engine na parte inferior desta página.
Instalar o Docker usando o repositório
Antes de instalarmos o Docker Engine em uma nova máquina host, é necessário configurar o repositório do Docker. Depois disso, podemos instalar e atualizar o Docker a partir do repositório.
- Passo 1. Configure o repositório com o pacote
apt
Atualize o índice de pacotes apt e instale pacotes para permitir que o apt use um repositório via HTTPS com os seguintes comandos:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Adicione a chave GPG oficial do Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Use o seguinte comando para configurar o repositório stable. Para adicionar o repositório nightly ou test, adicione a palavra nightly ou test (ou ambas) após a palavra stable nos comandos abaixo. Você pode saber mais sobre os canais nightly e test aqui.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Passo 2. Instale o Docker Engine
Atualize o índice de pacotes apt e instale a versão mais recente do Docker Engine e do containerd com os seguintes comandos:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Podemos verificar se o Docker Engine foi instalado corretamente executando a imagem hello-world.
sudo docker run hello-world
- Passo 3. Gerencie o Docker como um usuário não root com os seguintes processos.
Crie o grupo docker.
sudo groupadd docker
Adicione o usuário ao grupo docker.
sudo usermod -aG docker $USER
Faça logout e login novamente para reavaliar a associação ao grupo.
Verifique se você consegue executar comandos docker sem sudo executando hello-world
docker run hello-world
- Passo 4. Configure o NVIDIA Container Toolkit com os seguintes processos:
Configure o repositório stable e a chave GPG:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
Atualize a lista de pacotes e instale o pacote nvidia-docker2 (e dependências):
sudo apt-get update
sudo apt-get install -y nvidia-docker2
Reinicie o daemon do Docker para concluir a instalação após definir o runtime padrão:
sudo systemctl restart docker
Primeiros Passos
Instalar o NVIDIA GPU Cloud CLI ARM64 Linux
O NVIDIA GPU Cloud (NGC) CLI é uma interface de linha de comando baseada em Python para gerenciar contêineres Docker no NGC Container Registry. Com o NGC CLI, você pode executar muitas das mesmas operações disponíveis no site da NGC, como executar jobs e visualizar repositórios Docker dentro do espaço da sua organização e equipe.
- Passo 1. Vá até a página Download CLI e baixe o arquivo zip que contém o binário. O binário NGC CLI para ARM64 é compatível com o Ubuntu 18.04 e distribuições posteriores.

- Passo 2. Transfira o arquivo zip para um diretório onde você tenha permissões, descompacte-o e, por fim, execute o binário.
Você também pode baixar, descompactar e instalar pela linha de comando, indo para um diretório onde você tenha permissão de execução e, em seguida, executando o seguinte comando:
wget -O ngccli_arm64.zip https://ngc.nvidia.com/downloads/ngccli_arm64.zip && unzip -o ngccli_arm64.zip && chmod u+x ngc
Verifique o hash md5 do binário para garantir que o arquivo não foi corrompido durante o download:
md5sum -c ngc.md5
- Etapa 3. Adicione seu diretório atual ao path:
echo "export PATH=\"\$PATH:$(pwd)\"" >> ~/.bash_profile && source ~/.bash_profile
Você deve configurar o NGC CLI para o seu uso a fim de executar os comandos.
- Etapa 4. Digite o seguinte comando, incluindo sua chave de API quando solicitado:
ngc config set
Geração de chave de API do NGC
É necessária uma chave de API para configurar o NGC CLI; podemos gerá-la através do site do NGC.
- Etapa 1. Vá para o site e clique em "Sign In/Sign Up".

- Etapa 2. Registre uma conta como desenvolvedor NVIDIA.

- Etapa 3. Escolha uma conta para continuar.

- Etapa 4. Clique em "Setup" no canto superior direito da página.

- Etapa 5. Selecione "Get API Key".

- Etapa 6. Clique em "Generate API Key".

- Etapa 7. A chave de API será exibida na parte inferior da página.

Instalar o TAO Toolkit
Python3 e python3-pip devem ser instalados primeiro:
sudo apt install -y python3 python3-pip
TAO Toolkit é um pacote Python pip que é hospedado no NVIDIA PyIndex. O pacote usa a docker restAPI internamente para interagir com o registro NGC Docker para puxar e instanciar os containers docker subjacentes. Nas etapas anteriores, já configuramos uma conta NGC e geramos uma chave de API associada a ela. Se você quiser ver mais sobre a seção Installation Prerequisites, você pode clicar para obter detalhes sobre como criar uma conta NGC e obter uma chave de API.
Ambiente Virtual - Virtualenv
Um Ambiente Virtual é uma cópia isolada do Python que permite trabalhar em um projeto específico sem se preocupar em afetar outros projetos. Por exemplo, você pode trabalhar em um projeto que exija Django 1.3 enquanto processa um projeto que exija Django 1.0. Você pode clicar aqui para criar ambientes Python isolados.
É altamente recomendado configurar primeiro um ambiente virtual e depois instalar o TAO Toolkit.
- Você pode instalar virtualenv via pip:
pip install virtualenv
- Crie um ambiente virtual:
virtualenv venv
Ele cria uma cópia do Python em qualquer diretório em que você executou o comando, colocando-o em uma pasta chamada venv.
- Ative o ambiente virtual:
source venv/bin/activate
- Se você terminou de trabalhar no ambiente virtual por enquanto, pode desativá-lo:
deactivate
Isso o leva de volta ao interpretador Python padrão do sistema com todas as suas bibliotecas instaladas.
Para excluir um ambiente virtual, basta excluir sua pasta.
virtualenvwarpper
Depois de um tempo, porém, você pode acabar com muitos ambientes virtuais espalhados pelo sistema e é possível que você esqueça seus nomes ou onde foram colocados. Portanto, estamos usando virtualenvwarpper. O virtualenvwrapper fornece um conjunto de comandos que torna o trabalho com ambientes virtuais muito mais agradável. Ele também coloca todos os seus ambientes virtuais em um só lugar.
Você pode instalar (certifique-se de que virtualenv já está instalado):
pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
Se quiser ver mais informações sobre isso, consulte as instruções completas de instalação do virtualenvwrapper.)
Você pode seguir as instruções neste link para configurar um virtualenv Python usando um virtualenvwrapper.
Definir a versão do Python no Ambiente Virtual
-
Etapa 1. Depois de seguir as instruções para instalar
virtualenvevirtualenvwrapper, defina a versão do Python novirtualenv. Isso pode ser feito de uma das seguintes maneiras: -
Definindo a variável de ambiente chamada VIRTUALENVWRAPPER_PYTHON. Essa variável deve apontar para o caminho onde o binário do python3 está instalado na sua máquina local. Você também pode adicioná-la ao seu
.bashrcou.bash_profilepara definir seuvirtualenvPython por padrão.
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
- Definindo o caminho para o binário python3 ao criar seu
virtualenvusando o wrappervirtualenvwrapper
mkvirtualenv launcher -p /path/to/your/python3
- Etapa 2. Depois de entrar no
virtualenv, o prompt de comando deve mostrar o nome do seu ambiente virtual
(launcher) py-3.6.9 desktop:
- Etapa 3. Quando terminar sua sessão, você pode desativar seu
virtualenvusando o comandodeactivate:
deactivate
-
Etapa 4. Você pode reinstanciar esse
virtualenvcriado usando o comandoworkon.workon launcher
Instalar o pacote TAO
-
Etapa 1. Já configuramos o ambiente de que precisamos. Agora podemos instalar o pacote Python TAO Launcher chamado
nvidia-taocom o seguinte comando.pip3 install nvidia-pyindex
pip3 install nvidia-tao -
Etapa 2. Invoque os entrypoints usando o comando
tao.
tao --help
A saída de exemplo do comando acima é:
usage: tao [-h]
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,
heartratenet,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,
retinanet,speech_to_text,ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
...
Launcher for TAO
optional arguments:
-h, --help show this help message and exit
tasks:
{list,stop,info,augment,bpnet,classification,detectnet_v2,dssd,emotionnet,faster_rcnn,fpenet,gazenet,gesturenet,heartratenet
,intent_slot_classification,lprnet,mask_rcnn,punctuation_and_capitalization,question_answering,retinanet,speech_to_text,
ssd,text_classification,converter,token_classification,unet,yolo_v3,yolo_v4,yolo_v4_tiny}
-
Etapa 3. Observe que em tasks você pode ver todas as tarefas que podem ser chamadas pelo launcher. As seguintes são as tarefas específicas que ajudam a lidar com os comandos lançados usando o TAO Launcher:
- list
- stop
- info
Atenção: Se o terminal informar "bash: Cannot find tao", use este comando:
export PATH=$PATH:~/.local/bin
tao --help
Instalar o DeepStream5
- Etapa 1. Edite
/etc/apt/sources.list.d/nvidia-l4t-apt-source.liste substitua .6 por .5:
deb https://repo.download.nvidia.com/jetson/common r32.5 main
#deb https://repo.download.nvidia.com/jetson/common r32.6 main
deb https://repo.download.nvidia.com/jetson/t194 r32.5 main
#deb https://repo.download.nvidia.com/jetson/t194 r32.6 main
- Etapa 2. Digite
sudo apt updatee tente novamente instalar o DeepStream 5.1.
E então instale-o com o seguinte comando:
sudo -H pip3 install pyds-ext
Para mais informações, consulte os links abaixo:
Instalar os Pipelines Multicâmera Jetson e Início Rápido
Por fim, vamos construir um pipeline típico de várias câmeras, ou seja, N×(capture)->preprocess->batch->DNN-> <<your application logic here>> ->encode->file I/O + display, usando gstreamer e deepstream por baixo dos panos. Forneça acesso programático para configurar o pipeline em python via pacote jetmulticam.
Este projeto utiliza aceleração de hardware da Nvidia para uso mínimo de CPU. Por exemplo, você pode executar detecção de objetos em tempo real em 6 fluxos de câmera usando apenas 16,5% de CPU. Você pode facilmente construir sua lógica personalizada em python acessando dados de imagem (via np.array), bem como resultados de detecção de objetos.
- Etapa 1. Instale os Pipelines Multicâmera Jetson com o seguinte comando:
git clone https://github.com/NVIDIA-AI-IOT/jetson-multicamera-pipelines.git
cd jetson-multicamera-pipelines
bash scripts/install_dependencies.sh
sudo -H pip3 install Cython
sudo -H pip3 install .
- Etapa 2. Execute o exemplo com suas câmeras:
source scripts/env_vars.sh
cd examples
sudo -H python3 example.py
Este é o example.py; você pode aplicá-lo tanto a uma câmera monocular quanto a uma multi‑câmera.
import time
from jetmulticam import CameraPipelineDNN
from jetmulticam.models import PeopleNet, DashCamNet
if __name__ == "__main__":
pipeline = CameraPipelineDNN(
cameras=[2, 5, 8],
models=[
PeopleNet.DLA1,
DashCamNet.DLA0,
# PeopleNet.GPU
],
save_video=True,
save_video_folder="/home/nx/logs/videos",
display=True,
)
while pipeline.running():
arr = pipeline.images[0] # np.array with shape (1080, 1920, 3), i.e. (1080p RGB image)
dets = pipeline.detections[0] # Detections from the DNNs
time.sleep(1/30)
Este é o resultado de multi‑câmera exibido assim:
Mais
Há mais modelos / aceleradores compatíveis:
pipeline = CameraPipelineDNN(
cam_ids = [0, 1, 2]
models=[
models.PeopleNet.DLA0,
models.PeopleNet.DLA1,
models.PeopleNet.GPU,
models.DashCamNet.DLA0,
models.DashCamNet.DLA1,
models.DashCamNet.GPU
]
# ...
)
Atenção: Se o terminal informar "EGL Not found", verifique o EGLDevice.
Suporte Técnico & Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.