banner

Inteligência Artificial IOT com Jetson Nano



Falo pela primeira hoje sobre Jetson Nano, essa placa que considero impressionante. Pouca coisa maior que um Raspberry, mas com um poder de processamento descomunal: 472 gigaflops, ou seja, 128 núcleos CUDA que processam uma rede neural convolucional que faz o reconhecimento de imagens e de objetos.  Vamos, portanto, fazer uma aplicação com o Jetson Nano e classificação de objetos em tempo real.


Quer comprar um Jetson Nano? Recomendo esse link: http://s.click.aliexpress.com/e/crAEsYQ4






Características

GPU                                       Arquitetura NVIDIA Maxwell ™ com 128 núcleos NVIDIA Cuda
CPU                                       Processador quad-core ARM ® Cortex ® -A57 MPCore
Memória                                 4 GB de LPDDR4 de 64 bits
Armazenamento                    16 GB de eMMC 5.1 Flash
Codificação de vídeo             4K @ 30 (H.264 / H.265)
Decodificação de vídeo         4K @ 60 (H.264 / H.265)
Câmera                                  12 pistas (3x4 ou 4x2) MIPI CSI-2 DPHY 1.1 (1,5 Gbps)
Conectividade                        Gigabit Ethernet
Exibição                                 HDMI 2.0 ou DP1.2 | eDP 1.4 | DSI (1 x2) 2 simultâneos
UPHY                                     1 PCB x1 / 2/4, 1x USB 3.0, 3x USB 2.0
E / S                                       1x SDIO / 2x SPI / 6x I2C / 2x I2S / GPIOs




Recursos usados

·         Jetson Nano
·         microSD card (16GB no mínimo, 32 recomendado)
·         USB Teclado e mouse
·         Monitor ( HDMI ou DP)
·         Micro-USB power supply (5V⎓2A)
·         Webcam Logitech c270
·         Conexão com a internet
o   Cabo
o   Adaptador Wi-fi






Jetson Nano

1.       microSD card slot
2.       40-pin expansion header
3.       Micro-USB para 5V ou para data
4.       Gigabit Ethernet port
5.       USB 3.0 ports (x4)
6.       HDMI output port
7.       DisplayPort connector
8.       DC 5V power input
9.       MIPI CSI camera connector





40-pin expansion Header Jetson Nano








PREPARAR PARA INSTALAÇÃO

Gravar imagem no cartão micros

Para preparar seu cartão microSD, você precisará de um computador com conexão à internet e capacidade de ler e gravar cartões SD, seja por meio de um slot ou adaptador de cartão SD integrados




Baixar imagem Jetson Nano

Baixe o Jetson Nano Developer Kit SD Card Image e observe onde ela foi salva no computador.
Para formatar seu cartão microSD é recomendado utilizar o SD Memory Card Formatter fornecido pela Associação SD.
Para baixar clique aqui e depois clique em “Accept” no fim da página. Instale e inicie o aplicativo.




Formatar cartão micros

1.       Selecione o cartão.
2.       Selecione “Quick format”
3.       Deixe o “Volume label” em branco
4.       Clique em “Format” para iniciar a formatação e “Yes” na caixa de diálogo de aviso.





Gravar imagem no cartão microSD

Use o Etcher para gravar a imagem no cartão SD do Jetson Nano.
Baixe, instale e inicie o Etcher.


Clique em “Select Image” e escolha o arquivo de imagem baixado anteriormente.
Insira o cartão microSD, se ainda não estiver inserido. 
Clique em “Cancel” se o Windows solicitar uma caixa de diálogo falando para formatar o disco.


Clique em “Select drive” e escolha o microSD correto.
Clique em “Flash!”. Leva cerca de 10 minutos para que o Etcher grave e valide a imagem caso o cartão microSD estiver conectado via USB3.
Depois de terminar, o Windows informa que não sabe ler o cartão. Basta clicar em cancelar e remover o cartão.






FONTE DE ALIMENTAÇÃO MICRO-USB

Preparar Jetson Nano para primeiro Boot

Você precisa alimentar o Jetson Nano com uma fonte de alimentação de boa qualidade que possa fortalecer 5V⎓2A na porta Micro-USB.
Nem todas as fontes de alimentação com classificação “5V⎓2A fazem isso, então caso o Nano fique reiniciando, verifique se a fonte de alimentação está entregando a energia necessária.




INSTALAÇÃO E PRIMEIRO BOOT

Preparar Jetson Nano para primeiro Boot

Insira o cartão microSD(com a imagem do sistema já gravada) no slot na parte inferior do módulo do Jetson Nano.


Ligue o monitor e conecte.
Conecte o teclado e mouse USB.
Conecte sua fonte de alimentação Micro-USB (5V - 2A).
Conecte o cabo da internet ou utilize um adaptador Wi-fi para rede.
O Jetson Nano será ligado e inicializado automaticamente.




Primeiro Boot

Um LED verde ao lado do conector Micro-USB acenderá assim que o Jetson Nano for ligado. Quando você inicializar pela primeira vez, o Jetson Nano precisa fazer as configurações iniciais, como:
·         Aceitar os termos
·         Selecionar o idioma do sistema, layout do teclado e fuso horário
·         Criar nome de usuário, senha e nome do computador.
·         Log in

Após logar, irá ver a seguinte tela.






CLASSIFICAÇÃO DE OBJETOS

Uma ótima maneira de começar a usar o Jetson e experimentar o poder da inteligência artificial é o Hello AI World.
Para classificar é necessário configurar o Jetson Nano para deep learning, seguindo os seguintes passos todos por comandos terminal:
·         Instalando os pré-requisitos do pacote do sistema.
·         Instalando Keras e TensorFlow e Keras no Jetson Nano.
·         Instalando o mecanismo de dedução do Jetson.


Instalando os pré-requisitos do pacote do sistema.

Instala Git e cmake
$ sudo apt-get install git cmake

Instala software de álgebra linear e compilador GNU.
$ sudo apt-get install libatlas-base-dev gfortran

Instala HDF5(Hierarchical Data Format)
$ sudo apt-get install libhdf5-serial-dev hdf5-tools

Instala  ferramenta de desenvolvedor python
$ sudo apt-get install python3-dev

Com uma boa conexão de internet, os comandos vão levar apenas alguns minutos para executar.


Configurando seu ambiente Python

Baixa o pip para fazer instalações
$ wget https://bootstrap.pypa.io/get-pip.py

Instala o pip
$ sudo python3 get-pip.py

Remove o arquivo baixado
$ rm get-pip.py

Usaremos ambientes virtuais Python para manter nossos ambientes de desenvolvimento em Python independentes e separados um do outro.
Usar ambientes virtuais do Python é uma pratica recomendada e ajuda a evitar a necessidade de manter um micro-SD para cada ambiente de desenvolvimento.

Para gerenciar nossos ambientes virtuais em Python, usaremos o virtualenv e virtualenvwrapper, instalados pelo seguinte comando:
$ sudo pip install virtualenv virtualenvwrapper

Após instalar, precisamos atualizar nosso arquivo ~/ .bashrc:
$ vim ~/.bashrc


Atualizar arquivo ~/ .bashrc

Como foi utilizado o comando “vim” para editar o arquivo é necessário seguir os seguintes comando.
Vá até o final do arquivo ~/ .bashrc, aperte a tecla “i” para editar o arquivo e adicione as seguintes linhas:
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

Após adicionar as linhas, pressione a tecla “Esc”.
Depois basta segurar a tecla “Shift” e clicar duas vezes na tecla “Z” para salvar e sair do editor.


Configurando seu ambiente Python

Após precisamos recarregar o ~/ .bashrc utilizando o comando source:
$ source ~/.bashrc

Agora podemos criar um ambiente em Python utilizando o comando mkvirtualevn - com o nome deep_learning:

$ mkvirtualenv deep_learning -p python3


Instalando TensorFlow e Keras

Antes de instalar o TensorFlow e Keras precisamos instalar o NumPy.
Primeiro, verifique se está dentro do ambiente virtual que criou, o deep_learning utilizando o comando workon:
$ workon deep_learning

Depois, instale o NumPy:
$ pip install numpy

A instalação do NumPy leva cerca de 15 minutos, pois ele têm que ser compilado no sistema.
A NVIDIA fornece  o TensorFlow para o Jetson Nano.

Para instalar o Jetson Nano TensorFlow oficial é só utilizar o seguinte comando:
$ pip install --extra-index-url 
https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3

Instalar o tensforflow-gpu na NVIDIA leva cerca de 40 minutos.
Após isso, basta instalar SciPy e Keras que leva cerca de 35minutos:
$ pip install scipy
$ pip install keras



Compilando e instalando o Jetson Inference (Dedução)

O primeiro passo é clonar o repositório de dedução do jetson.
Clonar o repositório:
$ git clone https://github.com/dusty-nv/jetson-inference

Entra no repositório clonado:
$ cd jetson-inference

Depois utilize o seguinte comando:
$ git submodule update --init

Agora podemos configurar a construção utilizando o cmake.
Criar diretório build
$ mkdir build

Entrar no diretório build
$ cd build

Configura a compilação
$ cmake ..


Cmake

Há duas coisas importantes a serem observadas ao executar o cmake:
1.       O comando cmake solicitará a permissão de root, então é necessário fornecer as informações;
2.       Durante o processo de configuração, o cmake baixará alguns gigabytes de modelos de amostras pré-treinadas. Certifique de possuir alguns GBs de sobra no cartão micro-SD. Por isso é recomendado utilizar um cartão de 32 GB em vez de um de 16 GB;


Compilando e instalando o Jetson Inference (Dedução)

Depois que o cmake terminar de configurar a compilação, podemos compilar e instalar o mecanismo de dedução do Jetson:
$ make
$ sudo make install

Compilar e instalar o mecanismo de dedução do Jetson leva cerca de 3 minutos.


Utilizando USB Camera

Como estamos utilizando uma câmera USB, precisamos alterar um valor padrão dentro do arquivo imagenet-camera.cpp
Primeiro, mude de diretório com:
$ cd ~/jetson-inference/imagenet-câmera

Depois abra o arquivo para editar:
$ vim imagenet-camera.cpp

Após abrir o arquivo, role aproximadamente até a linha 37 do arquivo, onde vai ver o valor da DEFAULT_CAMERA:
#define DEFAULT_CAMERA -1  // -1 for onboard camera, or change to index of /dev/video V4L2 camera (>=0)   

Para editar arquivo pelo vim, primeiro pressione a tecla “i”.
Depois, simplesmente troque o valor de -1 para 0:
#define DEFAULT_CAMERA 0  // -1 for onboard camera, or change to index of /dev/video V4L2 camera (>=0)  

Primeiro clique na tecla “Esc” para parar de editar e segurando a tecla “Shift”  aperte duas vezes a tecla “Z” para sair do editor .


Compilando e instalando o Jetson Inference (Dedução)

Depois de editar o arquivo c++, é necessário recompilar o exemplo com os seguintes comandos:
$ cd ../build
$ make
$ sudo make install

*Tenha em mente que o make é inteligente o suficiente para não recompilar a biblioteca inteira. O comando só irá recompilar os arquivos que foram alterados.

Uma vez compilado, muda para o diretório aarch64/bin e execute o binário imagenet-câmera.
Entra no diretório aarch64/bin:
$ cd aarch64/bin/

Executa o imagenet-câmera:
$ ./imagenet-câmera


Se for a primeira vez que você está carregando um modelo específico, pode levar de 5 a 15 minutos para carregar o modelo. Internamente, o Jetson está otimizando e preparando o modelo para a detecção. Só precisa ser feito uma vez para que as execuções subsequentes sejam mais rápidas.



Pronto:




Exemplo (Tanque)








FAÇA O DOWNLOAD DO PDF






3 comentários:

  1. cara parabéns pelo serviço prestado aqui,cada dia uma grata surpresa,valeu!!!

    ResponderExcluir
  2. Parabéns pelo excelente vídeo.

    ResponderExcluir
  3. O poder de processamento do Jetson e o raspberry+NCS2 podem ser comparados?

    ResponderExcluir

Tecnologia do Blogger.