Primeros pasos con alwaysAI en dispositivos NVIDIA® Jetson

alwaysAI es una plataforma de desarrollo de visión por computadora esencial para crear e implementar aplicaciones de aprendizaje automático en dispositivos de borde como los dispositivos NVIDIA® Jetson. Desarrollar e implementar estas aplicaciones es simplemente demasiado complejo y requiere mucho tiempo, y requiere un conocimiento profundo de una enorme variedad de tecnologías y técnicas de visión por computadora que son más relevantes y accesibles para los especialistas que para los desarrolladores comunes. AlwaysAI elimina estas barreras y hace que la creación de aplicaciones de visión por computadora sea fácil, rápida y efectiva.
Hardware soportado
AlwaysAI es compatible con el siguiente hardware Jetson:
Kits de Seeed:
- reComputer J1010 potenciada por Jetson Nano
- reComputer J1020 potenciada por Jetson Nano
- reComputer J2011 potenciada por Jetson Xavier NX 8GB
- reComputer J2012 potenciada por Jetson Xavier NX 16GB
Carrier Boards de Seeed:
- Jetson Mate
- Jetson SUB Mini PC
- Jetson Xavier AGX H01 Kit
- A203 Carrier Board
- A203 (Version 2) Carrier Board
- A205 Carrier Board
- A206 Carrier Board
Kits de desarrollo oficiales de NVIDIA:
- NVIDIA® Jetson Nano Developer Kit
- NVIDIA® Jetson Xavier NX Developer Kit
- NVIDIA® Jetson AGX Xavier Developer Kit
- NVIDIA® Jetson TX2 Developer Kit
- NVIDIA® Jetson AGX Orin Developer Kit
SoMs oficiales de NVIDIA:
- NVIDIA® Jetson Nano module
- NVIDIA® Jetson Xavier NX module
- NVIDIA® Jetson TX2 NX module
- NVIDIA® Jetson TX2 module
- NVIDIA® Jetson AGX Xavier module
Prerequisitos
- Cualquiera de los dispositivos Jetson anteriores con JetPack 4.6 y todos los componentes SDK instalados (consulta esta wiki para obtener una referencia sobre la instalación)
- PC con Windows, Linux o Mac OS
- Cámara web USB o Cámara MIPI CSI soportada por tu dispositivo Jetson
Primeros pasos
¡Implementar tu primer proyecto de visión por computadora solo te llevará un par de minutos! Al final de esta wiki, podrás detectar objetos en una transmisión de video en vivo desde una cámara conectada a un dispositivo Jetson y también en un archivo de video precargado.
- Configuración del entorno de desarrollo en tu ordenador
- Configuración del entorno de desarrollo en tu dispositivo Jetson
- Creación de una cuenta en alwaysAI
- Creación de un proyecto utilizando el dashboard de alwaysAI
- Implementación de tu proyecto en tu dispositivo Jetson utilizando tu PC
- Detección de objetos en video en vivo desde la cámara
- Detección de objetos en archivos de vídeo precargados
Configuración del entorno de desarrollo en tu ordenador
Ahora necesitas configurar el entorno de desarrollo. Aquí puedes utilizar una computadora con Windows, Linux o Mac OS.
:::nota En esta guía, usaremos una computadora de desarrollo con Windows. Sin embargo, si deseas configurar Mac o Linux como tu PC de desarrollo, visita este link para obtener más información. :::
Paso 1. Descarga e instala la aplicación de escritorio y la interfaz de línea de comandos de AlwaysAI haciendo click aquí
Paso 2. Una vez finalizada la instalación, abre una interfaz de línea de comandos y escribe lo siguiente
aai -v
Si ves un número de versión impreso, has instalado con éxito la CLI de AlwaysAI. El número de versión al momento de escribir esta wiki es 1.4.3
- Paso 3. Comprueba si OpenSSH ya está instalado en tu sistema operativo. Necesitas OpenSSH en la máquina de desarrollo para conectarte a tu dispositivo Jetson e implementar tus propios proyectos de aprendizaje automático.
ssh -V
Si ves un número de versión impreso, ya tienes OpenSSH instalado. Por ejemplo OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2. A finales de 2018, Windows 10 admite OpenSSH de fábrica. Consulta este artículo en el sitio de documentos de Microsoft para obtener más información sobre la instalación de OpenSSH en Windows.
Configuración del entorno de desarrollo en tu dispositivo Jetson
A continuación, debes configurar el entorno de desarrollo en tu dispositivo Jetson.
Paso 1. Al ejecutar nuestro proyecto de aprendizaje automático en el dispositivo Jetson, se utiliza el tiempo de ejecución de edgeIQ, que está disponible como imagen docker. No es necesario instalar Docker porque ya viene preinstalado con JetPack. Sin embargo, debes agregar el grupo "docker" a tu usuario para que no necesites privilegios de super usuario (sudo) para acceder a Docker. Accede al dispositivo Jetson y ejecuta lo siguiente en una terminal
sudo usermod -aG docker $USER
Paso 2. Para aplicar la nueva membresía de grupo, cierra sesión en el dispositivo Jetson y vuelve a iniciarla, o escribe lo siguiente
su - $USER
Paso 3. Prueba la instalación docker sin sudo
docker run hello-world

Sign up for alwaysAI account
Step 1. Visit this page to sign up for an alwaysAI account
Step 2. Fill out the form and click Sign Up for Free to finish the sign up process
Creación de una cuenta en alwaysAI
Después de completar las configuraciones del entorno en la máquina de desarrollo y en el dispositivo Jetson, registrate para obtener una cuenta de AlwaysAI, puedes comenzar a crear un nuevo proyecto de detección de objetos utilizando el panel de control de AlwaysAI.
Paso 1. Visita el dashboard de AlwaysAI y crea un nuevo proyecto haciendo click en el botón New project.

Paso 2. Elige la opción Object Detection como plantilla para comenzar, ingresa un nombre para tu proyecto y haz click en Create Project

Paso 3. Haz click en Click Here To View Your Project para ingresar al proycto que creaste
Ahora verás información sobre el proyecto recién creado, como el modelo utilizado y otros detalles útiles.

Para el Object Detection Project (Proyecto de detección de objetos) predeterminado, se utiliza mobilenet_ssd como modelo pre entrenado con el conjunto de datos Pascal VOC. Esto significa que esta aplicación puede reconocer 20 clases de objetos como persona, pájaro, gato, vaca, perro, caballo, oveja, avión, bicicleta, barco, autobús, automóvil, motocicleta, tren, botella, silla, mesa de comedor, planta en maceta, sofá, televisor/monitor.
Sin embargo, este modelo no está optimizado para funcionar con hardware Jetson y funcionará a muy bajos fps. Por lo tanto, elegiremos un modelo optimizado para Jetson Xavier NX con TensorRT support (Soporte TensorRT).
Paso 4. Haz click en los tres puntos al lado del modelo y haz click en Delete (eliminar)

Paso 5. Haz click en Add New Model y haz click en Go to Model Catalog para ingresar al catálogo de modelos AlwaysAI.

Paso 6. Escribe ssd_mobilenet_v1_coco_2018_01_28_xavier_nx en la barra de búsquedas y haz click en + Use this Model

Este modelo fue entrenado con el conjunto de datos COCO que puede reconocer 80 clases de objetos como persona, bicicleta, coche, motocicleta, avión, autobús, tren, camión, barco, semáforo, boca de incendio, señal de alto, parquímetro, banco, pájaro, gato, perro, caballo, oveja, vaca, elefante, oso, cebra, jirafa, mochila, paraguas, bolso, corbata, maleta, disco volador, esquís, tabla de snowboard, pelota deportiva, cometa, bate de béisbol, guante de béisbol, patineta, tabla de surf, tenis. raqueta, botella, copa de vino, vaso, tenedor, cuchillo, cuchara, cuenco, plátano, manzana, sándwich, naranja, brócoli, zanahoria, pancho, pizza, rosquilla, pastel, silla, sofá, planta en maceta, cama, comedor, baño, televisión, ordenador portátil, ratón, control remoto, teclado, teléfono móvil, microondas, horno, tostadora, lavabo, refrigerador, libro, reloj, florero, tijeras, osito de peluche, secador de pelo, cepillo de dientes
Paso 7. Selecciona el proyecto creado anteriormente (Mi primer proyecto en este caso) y haz click en Add to project

¡Has añadido correctamente el modelo a tu proyecto!
Implementación de tu proyecto en tu dispositivo Jetson utilizando tu PC
Ahora implementaremos el proyecto que creamos antes en el dispositivo Jetson usando la computadora de desarrollo a través de SSH.
Paso 1. En la máquina de desarrollo, crea una nueva carpeta, abre una interfaz de línea de comandos dentro de la nueva carpeta y escribe lo siguiente
aai app configure
:::nota Se te pedirá que ingreses el nombre de usuario y la contraseña de la cuenta AlwaysAI cuando ejecutes el comando anterior por primera vez. :::
Paso 2. Selecciona el proyecto que creaste antes en el dashboard de alwaysAI

Paso 3. Elige la opción Remote device en destination

Paso 4. Presiona Y para crear el archivo de clave privada

Paso 5. Haz click en Add a new device para añadir tu dispositivo Jetson como un remote device (dispositivo remoto)

Paso 6. En device mode selecciona la opción Development

Paso 7. Ingresa un device name (Nombre del dispositivo)

Paso 8. Ingresa elusername (usuario) de tu dispositivo Jetson y hostname/IP address (nombre del host/dirección IP del host) como se muestra a continuación:

:::nota Aquí el nombre de usuario del dispositivo Jetson es laksanthad y la dirección IP es 192.168.2.156 :::
Paso 9. Ingresa el password de tu dispositivo Jetson cuando se te solicite

Paso 10. Cuando se solicite el dato location para ejecutar la aplicación, deja la ubicación predeterminada y presiona ENTER. Aquí la ubicación predeterminada se establece como alwaysai/test. Este es el directorio del proyecto dentro del dispositivo Jetson.

Ahora hemos inicializado con éxito el proyecto en el dispositivo Jetson usando la computadora de desarrollo a través de SSH.

Antes de pasar a instalar la aplicación en el dispositivo Jetson, debemos realizar un pequeño cambio en el código principal para cambiar el nombre del modelo y el tipo de motor de inferencia.
Paso 11. En el directorio que creaste en tu PC para AlwaysAI, abre app.py y cambia el nombre del modelo y el tipo de motor de inferencia de la siguiente manera
def main():
obj_detect = edgeiq.ObjectDetection("alwaysai/ssd_mobilenet_v1_coco_2018_01_28_xavier_nx")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)
Paso 12. Escribe lo siguiente para instalar la app
aai app install
Verás el siguiente output si la instalación se logró exitosamente:

:::nota
Si encuentras errores en este paso, primero puedes intentar volver a implementar usando el método aai app install --clean
. Verifica que la versión del jetpack sea la versión solicitada 4.6. Esto se puede comprobar escribiendo el comando sudo apt-cache show nvidia-jetpack
. Si el número de versión es correcto, asegúrate de haber completado la instalación del sistema Jetson junto con los componentes Jetson SDK**. Esto te ayudará a resolver la mayoría de los problemas.
:::
Detección de objetos en video en vivo desde la cámara
Ahora ejecutaremos la detección de objetos en una transmisión de video en vivo desde una cámara USB conectada al dispositivo Jetson. También puedes utilizar cámaras MIPI CSI que sean compatibles con el dispositivo Jetson que estás utilizando
Paso 1. Conecta la cámara USB/cámara MIPI CSI al dispositivo Jetson
Paso 2. Ejecuta lo siguiente:
aai app start
Ahora deberías ver el siguiente output en tu línea de comandos:

Paso 3. Abre un navegador web y escribe http://localhost:5000 para abrir la transmisión de video.
http://localhost:5000

Como puedes ver, las personas se detectan en tiempo real y el porcentaje de confianza para cada etiqueta se muestra en la interfaz. Además, el tiempo de inferencia en la Jetson Xavier es 0,009 s, lo que equivale aproximadamente a 111 fps.

Arriba se muestra otro demo utilizando el mismo modelo.
Detección de objetos en archivos de vídeo precargados
Aquí ejecutaremos la detección de objetos en un archivo de video precargado.
Paso 1. Coloca el archivo de video dentro del directorio del proyecto AlwaysAI del dispositivo Jetson. Según nuestro ejemplo, es /home/{username}/alwaysai/test
Paso 2. En la computadora de desarrollo, abre el archivo app.py dentro de la carpeta test que creamos antes y reemplaza esta sección del código.
with edgeiq.WebcamVideoStream(cam=0) as video_stream, \
edgeiq.Streamer() as streamer:
Con esta otra
with edgeiq.FileVideoStream(
'file name goes here', play_realtime=True) as video_stream, \
edgeiq.Streamer() as streamer:
Y luego reemplace file name goes here con el nombre del archivo de video y la extensión del archivo. Asegúrate de que el nombre del archivo esté entre comillas simples.
Paso 3. Instala nuevamente la app
aai app install
Paso 4. Finalmente corre la app
aai app start
Aquí verás el mismo resultado en la línea de comandos que antes, y una vez que abras un navegador web con la misma dirección mencionada anteriormente, verás que se realiza la detección de objetos en el video precargado, dando un resultado similar al anterior.
Filtrar objetos a detectar
También puedes filtrar objetos específicos que desees que detecte el modelo. Por ejemplo, el conjunto de datos COCO anterior que utilizamos es capaz de detectar 80 tipos de objetos. Sin embargo, podemos filtrar para detectar solo personas.
Simplemente necesitas agregar la línea results.predictions después de resultados al archivo app.py
while True:
frame = video_stream.read()
results = obj_detect.detect_objects(framconfidence_level=.5)
results.predictions = edgefilter_predictions_by_label(resulpredictions, ['person'])
frame = edgeiq.markup_image(
Aplicaciones de alwaysAI en GitHub
AlwaysAI proporciona una amplia gama de aplicaciones listas para usar en el repositorio AlwaysAI GitHub. Puedes consultar las diferentes aplicaciones aquí.
Detector de matrículas
Para fines de demostración, explicaremos cómo implementar una de estas aplicaciones, que es el Detector de matrículas en un dispositivo Jetson. Por lo tanto, también puedes repetir los mismos pasos para otras aplicaciones.
Paso 1. En la computadora de desarrollo, crea una nueva carpeta para nuestro proyecto e ingresa a ella
Paso 2. Descarga este repositorio como .zip o clónalo si tienes Git instalado en tu PC
De forma predeterminada, el modelo utilizado para este ejemplo no está optimizado para ejecutarse en Jetson Nano. Por lo tanto, primero cargaremos un modelo nano optimizado de Jetson.
Paso 3. Ingresa al repositorio recién descargado/clonado, abre una línea de comandos dentro y ejecuta lo siguiente
aai app models add alwaysai/vehicle_license_mobilenet_ssd_nano
Paso 4. Abre app.py, cambia el nombre del modelo y el motor de inferencia
def main():
obj_detect = edgeiq.ObjectDetection(
"alwaysai/vehicle_license_mobilenet_ssd_nano")
obj_detect.load(engine=edgeiq.Engine.TENSOR_RT)
Paso 5. Ejecuta lo siguiente:
aai app configure
:::nota Se te pedirá que ingreses el nombre de usuario y la contraseña de la cuenta AlwaysAI cuando ejecutes el comando anterior por primera vez. :::
Paso 6. Selecciona la opción Create new project

Paso 7. Escribe en Project Name un nombre para tu proyecto
Paso 8. Selecciona la opción As an empty app para inicializar tu proyecto

Paso 9. Repite los mismos pasos de la sección Implementación de tu proyecto en tu dispositivo Jetson utilizando tu PC, especificamente del Paso 3 al Paso 11
Paso 10. Una vez que la aplicación esté instalada en la Jetson, ejecuta el siguiente comando para iniciar la aplicación
aai app start
Ahora verás el siguiente resultado en la línea de comandos

Como puedes ver, estamos utilizando el modelo vehicle_license_mobilenet_ssd y este modelo es capaz de identificar vehículos y matrículas.
Paso 11. Abre un navegador web en tu PC y escribe lo siguiente para abrir la transmisión de video:
http://localhost:5000

En esta demostración, la inferencia se realiza en los 2 videos obtenidos de aquí y, como puedes ver, los vehículos y las placas en la transmisión de video se detectan y el porcentaje de confianza para cada etiqueta se muestra en la interfaz.
Inferencias con la cámara web
Si deseas realizar la misma inferencia anterior en una transmisión de video en tiempo real desde una cámara web, sigue los siguientes pasos
Paso 1. Navega a la carpeta que creamos antes para nuestro proyecto y abre app.py
Paso 2. Copia y pega este código
Paso 3. Instala nuevamente la app
aai app install
Paso 4. Ejecuta la app
aai app start
Aquí verás el mismo resultado en la línea de comandos que antes, y una vez que abras un navegador web con la misma dirección mencionada anteriormente, verás que la detección de objetos se realiza en una transmisión de video en tiempo real desde la cámara web, dando un resultado similar al anterior.
Software Empresarial alwaysAI
AlwaysAI también tiene una edición empresarial con las siguientes características:
- Acceso Freemium con implementación de 1 dispositivo de producción durante - un año
- 20 horas de entrenamiento de alwaysAI en la nube
- 30 días de acceso a almacenamiento de la nuvedel dataset de alwaysAI
Puedes obtener más información sobre AlwaysAI Enterprise Edition aquí.
Entrena y despliega tu propio modelo
Paso 1. Prepara tu conjunto de datos para el entrenamiento. Asegúrate de que tu conjunto de datos esté en formato PascalVOC y luego organiza todas las imágenes y etiquetas en 2 directorios y comprime el archivo de la siguiente manera

Paso 2. Ve al alwaysAI dashboard, haz click en Datasets y haz click en Upload a Dataset

Paso 3. Al terminar la subida del conjunto de datos, haz click en Train

Paso 4. Aquí puedes cambiar la configuración de entrenamiento según tus preferencias y luego hacer click en Start Training

Verás el siguiente output una vez termine el entrenamiento de tu modelo:

Ahora el modelo entrenado está disponible en tu cuenta. Puedes utilizar este modelo en tu proyecto de detección de objetos de la siguiente manera
Paso 5. Navega a Models > My Models
y haz click en el modelo que acabas de entrenar


Paso 6. Como puedes ver, puedes usar el siguiente comando en el directorio raíz de tu aplicación de detección de objetos.
aai app models add lakshanthad/roadsign-mobilenet
Paso 7. Después de eso, cambia el nombre del modelo en app.py y ejecuta la aplicación nuevamente.
lakshanthad/roadsign-mobilenet
Recursos
- [Página web] AlwaysAI Documentation
Soporte Tech y discusión del producto
¡Gracias por elegir nuestros productos! Estamos aquí para darte soporte y asegurar que tu experiencia con nuestros productos sea la mejor posible. Tenemos diversos canales de comunicación para adaptarnos distintas preferencias y necesidades.