Configuración del Software
- Abra el código de Visual Studio desde el directorio de aplicaciones en la unidad flash
- Escriba “pi@pibot##.local” y presione enter
Reemplace el texto “pibot##” con la etiqueta en el pibot
La contraseña para ingresar cuando se le solicite es “DogsAndCatsAreNice2.” sin las comillas. Los '.' al final es importante!
Es posible que tarde un par de minutos en instalar algunos archivos en PiBot.
- Abra una terminal en Visual Studio Code desde el menú Terminal→ New Terminal
- Escriba los siguientes comandos y presione enter después de cada línea para instalar el software requerido para esta lección
sudo apt-get update sudo apt-get install python3-picamera python3-pil python3-opencv libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev libwebp-dev libopenjp2-7-dev libatlas-base-dev fonts-freefont-ttf git
- Escriba los siguientes comandos y presione Intro después de cada línea para instalar las bibliotecas de Python necesarias para esta lección
sudo pip3 install --upgrade numpy sudo pip3 install imutils
- Escriba el siguiente comando y presione Intro para instalar el tiempo de ejecución de Python Tensorflow Lite para esta lección
\\sudo pip3 install https://github.com/google-coral/pycoral/releases/download/v2.0.0/tflite_runtime-2.5.0.post1-cp37-cp37m-linux_armv7l.whl
- Escriba el siguiente comando y presione enter para descargar el código de Python para esta lección
git clone https://git.jonathan.struebel-family.net/robot-club/pibot/lesson5.git
- Escriba el siguiente comando y presione enter para cambiar al directorio de la lección 5
cd lesson5
- Escriba los siguientes comandos y presione enter después de cada línea para descargar los modelos de detección de objetos
curl -L 'https://tfhub.dev/tensorflow/lite-model/efficientdet/lite0/detection/metadata/1?lite-format=tflite' -o efficientdet_lite0.tflite curl -L 'https://storage.googleapis.com/download.tensorflow.org/models/tflite/edgetpu/efficientdet_lite0_edgetpu_metadata.tflite' -o efficientdet_lite0_edgetpu.tflite
- Escriba el siguiente comando y presione enter para iniciar el servidor de detección de objetos MJPEG Streamer para esta lección
python3 webstreaming.py
- Abra la aplicación Safari, escriba http://pibot##.local:8080 en la barra de direcciones y presione Intro para probar el software MJPEG Streamer de detección de objetos.
Reemplace el texto “pibot##” con la etiqueta en el pibot
Verifique que PiBot detecte objetos frente a la cámara dibujando un cuadro alrededor de ellos
- Reemplace 8899 en la línea 34 con 8080
- Srealizar el cambio usando el menú File→Save
- Abra una terminal en Visual Studio Code desde el menú Terminal→ New Terminal
- Escriba el siguiente comando y presione Intro para ejecutar el código de Python para esta lección
cd osoyoowebcar sudo python3 webcar.py
- Abra la aplicación Safari, escriba http://pibot##.local en la barra de direcciones y presione enter
Reemplace el texto “pibot##” con la etiqueta en el pibot
- Conduzca el PiBot y vea qué objetos detecta
Explicación del Software
El archivo webstreaming.py es otra aplicación de Flask que transmite imágenes desde la cámara CSI conectada a la Raspberry Pi a su navegador web después de buscar objetos dentro de la imagen.
- En el archivo webstreaming.py, busque los decoradores. ¿Qué crees que está haciendo cada una de las funciones?
Si necesitas un repaso de lo que son los decoradores, revisa Lección 4
- Encuentra la función de generar. ¿Qué crees que hace esta función? ¿Dónde se llama la función?
outputFrame es un búfer global que almacena exactamente una imagen de la cámara. La función cv2.imencode convierte (codifica) un marco de imagen en un formato estándar, en este caso el formato JPEG
La función de rendimiento detiene temporalmente el ciclo en el que se encuentra y devuelve los datos que se pasan como parámetro a la función de rendimiento.
- Busque la ubicación en el código donde se guardan los datos en la variable outputFrame. ¿En qué función está? ¿Qué crees que hace esta función?
El bucle while lee cada imagen de la cámara, realiza la detección de objetos en ella, dibuja cuadros alrededor de los objetos e imprime algunas estadísticas sobre la imagen antes de guardar la imagen en el búfer de cuadro de salida global
La variable del detector es una instancia de la clase ObjectDetector. Se inicializa en la línea 127
La función detect_objects se ejecuta como un hilo independiente. Mire la línea 221 para ver cómo hacer eso. Los subprocesos son una forma poderosa de permitir que diferentes funciones en el código se ejecuten en paralelo. El uso de subprocesos puede ayudar a que su código se ejecute más rápido.
- Busque la función de detección en la clase ObjectDetector. Explore las diferentes funciones para ver qué está haciendo.
Cuando se usa self delante de una llamada de función, se está refiriendo a una función definida dentro de esa misma clase
La función de detección utiliza la biblioteca Tensorflow Lite (o TFLite) para ejecutar redes neuronales de aprendizaje automático que procesan datos y brindan información sobre lo que hay en esos datos. Tensorflow Lite fue desarrollado por Google. Obtenga más información sobre el aprendizaje automático y las redes neuronales en Explicación del Algoritmo.
- Cuando haya terminado de conducir el PiBot, mantenga presionadas las teclas control + C y escriba el siguiente comando en la terminal de Visual Studio Code para apagar el PiBot
sudo shutdown -h now
- Haga clic en el pequeño rectángulo verde en la esquina inferior izquierda de la pantalla y seleccione “Close Remote Connection”
- Espere de 3 a 5 minutos para que la luz verde de la Raspberry Pi deje de parpadear y apague el interruptor de la batería PiBot