Como instalar OpenCV 4.5 e QT5 no Raspberry Pi e NVIDIA Jetson Nano para visão computacional

Cómo instalar OpenCV 4.5 y QT5 en Raspberry Pi y NVIDIA Jetson Nano para visión por computadora

OpenCV es una de las mejores herramientas de visión por computadora disponibles. Es la biblioteca de visión artificial más popular entre desarrolladores y fabricantes. Al ser de código abierto, la biblioteca ha contado con un amplio apoyo de la comunidad y ha evolucionado hasta convertirse en uno de los paquetes de software más maduros. El propio OpenCV significa "Visión por computadora de código abierto". La última versión de la biblioteca es OpenCV 4.7, disponible para uso comercial gratuito bajo la licencia Apache. La biblioteca es especialmente útil para aplicaciones de visión por computadora en tiempo real. También admite los algoritmos de aprendizaje automático más comunes, como K-Nearest Neighbor, Naive Bayes, Random Forest, Decision Tree, Support Vector Machine, Artificial Neural Networks (ANN) y redes neuronales profundas.

Ya sea que alguien quiera crear un proyecto de visión artificial usando C++ o Python, OpenCV es la mejor herramienta para comenzar. Un proyecto de visión por computadora se puede crear fácilmente en cualquier PC o Mac usando OpenCV. También es posible invertir en OpenCV en proyectos de visión artificial integrada. Las microcomputadoras de nueva generación como Raspberry Pi, NVIDIA Jetson Nano, RockPi, etc. son bastante capaces de soportar el entorno OpenCV.

Existen grandes beneficios al ejecutar aplicaciones de visión por computadora integradas en estas computadoras integradas de bajo costo. Las microcomputadoras pueden funcionar las 24 horas del día, los 7 días de la semana para albergar un proyecto de visión por computadora dedicado que incluso puede involucrar aprendizaje automático o algoritmos de aprendizaje profundo, además sin ningún arreglo especial más que un buen disipador de calor. La aplicación se puede implementar a costos increíblemente bajos sin comprometer la eficiencia. Además, las microcomputadoras son capaces de realizar muchos cálculos localmente, lo que las hace más adecuadas para la computación de borde o de niebla.

En este tutorial, veremos cómo instalar OpenCV 4.5 en Raspberry Pi. El modelo de Raspberry Pi utilizado en este tutorial es Raspberry Pi 4B con 8 GB de RAM. También se pueden utilizar otros modelos de Raspberry Pi 4. Aunque la configuración se puede realizar en una Raspberry Pi 3 o 2, es posible que OpenCV haya comprometido el rendimiento en estas placas. La Raspberry Pi 4B utilizada en este tutorial está instalada con Raspbian Bullseye. Las mismas instrucciones dictadas aquí se aplican a la instalación de OpenCV en NVIDIA Jetson Nano arrancado desde un sistema operativo Debian.

Configurar OpenCV en Raspberry Pi o cualquier otra microcomputadora Linux es lo primero que se debe hacer antes de embarcarse en el desarrollo de una aplicación de visión artificial. La configuración lleva mucho tiempo y puede resultar frustrante para los principiantes, especialmente para aquellos que son nuevos en Linux y los scripts de Shell. Incluso si se omite un paso, toda la configuración puede verse comprometida. Este tutorial lo guiará paso a paso para completar la instalación de OpenCV 4.5 plus QT5 en Raspberry Pi 4B instalado con Raspbian Bullseye.

Hay dos formas de instalar OpenCV en cualquier sistema. Uno es un método de instalación PIP simple. El segundo es compilar OpenCV desde el código fuente. El método de instalación de PIP es simple y breve, pero no expone todos los detalles del software. La compilación del código fuente tarda horas en completarse, lo que da como resultado una instalación completa y optimizada donde se pueden obtener todas las funciones de OpenCV a la vez. Este tutorial detalla el método de compilación desde el código fuente y lo guía paso a paso a través de la instalación completa en una Raspberry Pi. A diferencia de una PC o Mac, la instalación en una microcomputadora como Raspberry Pi implica varios pasos necesarios para optimizar la instalación específicamente para la placa de destino. Todos estos pasos se proporcionan en este tutorial en la secuencia correcta.

Sin perder tiempo, pasemos rápidamente a la configuración. Todo el proceso tardará unas horas en completarse. Dependiendo de la placa de destino, como alguna otra variante de Raspberry Pi o una microcomputadora diferente, puede llevar incluso más tiempo. Así que tenga paciencia y tome descansos ocasionales en su cubículo para tomar un café mientras se completa la instalación. Vamos a empezar.

Confirmar las especificaciones del sistema operativo
Lo primero que debes comprobar son las especificaciones del sistema operativo. La configuración para un sistema operativo de 32 bits sería diferente a la configuración para un sistema operativo de 64 bits. Abra la Terminal Bash y ejecute el siguiente comando.
$ apellido -a

Si la versión de Linux informada contiene la cadena 'armv7l', el sistema operativo instalado en Raspberry Pi es de 32 bits. Si contiene la cadena 'aarch64', será de 64 bits. La guía de instalación presentada en este tutorial es sólo para sistemas operativos de 32 bits.

A continuación, debe confirmar la versión del sistema operativo. Esto se puede hacer ejecutando el siguiente comando en la Terminal.
$ gato /etc/os-liberación

El comando anterior genera metainformación sobre la versión de Raspbian instalada en Raspberry Pi. Nuestra Raspberry Pi 4B (8 GB) está instalada con el último sistema operativo Raspbian Bullseye. Hay otro comando que proporciona aún más información sobre la tarjeta y también el sistema operativo. Esa es la cosa.
$nombrehostectl

Si no ha preparado su Raspberry Pi, lo mejor es instalar el sistema operativo Raspbian de 32 bits para este tutorial y los tutoriales de visión por computadora que siguen. Si ya tienes la Raspberry Pi instalada con el sistema operativo, confirma que sea la versión de 32 bits. Sugerimos instalar el sistema operativo Raspberry Pi de 32 bits con escritorio y el software recomendado.

Expandir el sistema de archivos
A continuación, debes expandir el sistema de archivos de Raspberry Pi y utilizar todo el espacio de la tarjeta MicroSD. De forma predeterminada, cuando se aplica una imagen del sistema operativo a una tarjeta MicroSD, una gran cantidad de espacio queda inutilizable. Dado que la configuración de OpenCV consume unos pocos gigabytes, debemos recuperar todo el espacio en una tarjeta MicroSD de 32 GB ampliando el sistema de archivos de Raspberry Pi. De lo contrario, la configuración puede fallar o incluso si se completa, es posible que OpenCV no tenga suficiente espacio para los archivos y actualizaciones del usuario. El espacio agotado puede provocar un rendimiento gravemente deficiente de una aplicación de visión por computadora. Para expandir el sistema de archivos en Raspberry Pi, abra Bash Terminal y ejecute el siguiente comando para abrir la Configuración de Raspberry Pi.
$ sudo raspi-config

En la ventana emergente, seleccione "opciones avanzadas".

Luego seleccione "A1 Expandir sistema de archivos" y haga clic en "Aceptar" para reiniciar.

Después de reiniciar, el sistema operativo Raspberry Pi recuperará todo el espacio de la tarjeta MicroSD. El nuevo espacio disponible en la tarjeta se puede verificar ejecutando el siguiente comando en la Terminal Bash.
df-h

Podéis ver que tenemos 18 GB de espacio disponible en la tarjeta MicroSD tras ampliar el sistema de archivos, mientras que 8,9 GB son utilizados por el sistema operativo.

Aumentar la memoria de la GPU
La RAM es utilizada por la CPU y la GPU. En Raspberry Pi 2B/3B, sólo se asignan 64 MB de RAM para la GPU, mientras que en Raspberry Pi 4B son sólo 76 MB. Esto puede resultar inadecuado para proyectos de visión artificial. La asignación de RAM para la GPU debe ser de al menos 128 MB para que una aplicación de visión por computadora no se bloquee. Para aumentar la asignación de RAM para GPU, abra la ventana "Configuración de Raspberry Pi" navegando a Menú Raspberry Pi->Preferencias->Configuración de Raspberry Pi.

En la ventana "Configuración de Raspberry Pi", seleccione la pestaña "Rendimiento" y aumente la memoria de la GPU a 128. Cuando hace clic en "Aceptar" después de aumentar la asignación de RAM para la GPU, Raspberry Pi le solicita que reinicie. Seleccione "Sí" para reiniciar y la asignación de GPU entrará en vigor.

Actualizar EEPROM
Otra optimización que debemos hacer antes de proceder con la instalación de OpenCV es actualizar la EEPROM de la Raspberry Pi. Aunque la Raspberry Pi arranca su sistema operativo desde la tarjeta MicroSD, también arranca parcialmente desde dos EEPROM. Aunque las EEPROM no tienen nada que ver con OpenCV, se ha observado que la última versión de EEPROM reduce la temperatura de la CPU de 65 ˚C a 48 ˚C. Las aplicaciones de visión por computadora requieren un uso intensivo de la CPU; Si una simple actualización de la EEPROM puede reducir la temperatura de la CPU, puede aumentar el rendimiento de la aplicación. Para verificar la versión de EEPROM, ejecute el siguiente comando en la Terminal Bash.
$ sudo rpi-eeprom-actualización
Si la EEPROM está actualizada, está bien. De lo contrario, ejecute el siguiente comando en la Terminal para actualizar la EEPROM.
$ sudo rpi-eeprom-update -a

Aumentar el espacio SWAP
OpenCV requiere mucha memoria para compilarse. La última versión estable de OpenCV4.5 requiere al menos 6,5 GB de espacio antes de compilarse. Por lo tanto, debes aumentar el espacio de intercambio, que por defecto está limitado a 2048 MB. Para aumentar el espacio de intercambio, abra /sbin/dphys-swapfile ejecutando el siguiente comando en la Terminal Bash.
$ sudo nano /sbin/dphys-swapfile

Una vez que el archivo esté abierto en el editor nano, salte al indicador CONF_MAXSWAP y cámbielo de 2048 MB a 4096 MB. Guarde el archivo presionando Ctrl+S y ciérrelo presionando Ctrl+X. Luego abra /etc/dphys-swapfile ejecutando el siguiente comando.
$ sudo nano /etc/dphys-swapfile
Ahora, cambie CONF_SWAPSIZE a 4096 desde 2048. Finalmente, reinicie su Raspberry Pi para que los cambios surtan efecto ejecutando el siguiente comando en la Terminal.
$ sudo reiniciar

Actualizando y actualizando Raspbian con éxito
En una instalación nueva de Raspbian, cuando se ejecutan los comandos de actualización y actualización del sistema operativo, se observa que aunque la actualización se realiza correctamente, la actualización genera el siguiente error.
E: No se pueden buscar algunos archivos, ¿puedes ejecutar apt-get update o probar con –fix-missing?
El error anterior sólo se encuentra en el sistema operativo Raspberry Pi de 32 bits. En el sistema operativo Raspberry Pi de 64 bits, no se encontró este error. Aunque muchos fabricantes optan por el sistema operativo de 64 bits sólo para evitar el error anterior. El error se debe a que faltan archivos y bibliotecas en el repositorio de origen. Esto se puede solucionar fácilmente redirigiendo el repositorio de origen a un enlace espejo adecuado. Es importante solucionar este error; de lo contrario, los archivos corruptos o faltantes en Raspbian pueden provocar un comportamiento impredecible de nuestra aplicación OpenCV.

Para redirigir el repositorio de origen, abra /etc/apt/sources.list en el editor nano ejecutando el siguiente comando en la Terminal Bash.
$ sudo nano /etc/apt/sources.list

Cuando el archivo se abra en el editor nano, comente la primera línea que indica el repositorio de origen original y agregue la siguiente línea al final.
deb bullseye contribución principal rpi no es gratuito

Guarde el archivo presionando Ctrl+S y ciérrelo presionando Ctrl+X. Reinicie Raspberry Pi para que los cambios surtan efecto. Ahora, cuando actualiza y actualiza Raspbian de 32 bits, no se encuentran errores. Los otros enlaces espejo que funcionan cerca de ubicaciones geográficas específicas se pueden encontrar en este enlace.

Instalar dependencias
Antes de instalar OpenCV, debe instalar varios paquetes de terceros requeridos por OpenCV. Es posible que algunos de estos paquetes ya estén instalados con Raspbian. Aún así, es mejor instalar todos los paquetes necesarios que encontrar algunos errores más adelante. Si la última versión de algún paquete ya está instalada con Raspbian, se ignorará automáticamente al ejecutar el comando. Ejecute los siguientes comandos en la Terminal Bash uno por uno para instalar los conjuntos de paquetes de software requeridos por OpenCV.

$ sudo apt-obtener actualización
$ sudo apt-obtener actualización
$ sudo apt-get install cmake gfortran
$ sudo apt-get install python3-dev python3-numpy
$ sudo apt-get install libjpeg-dev libtiff-dev libgif-dev
$ sudo apt-get install libgstreamer1.0-dev gstreamer1.0-gtk3
$ sudo apt-get install libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install libgtk2.0-dev libcanberra-gtk*
$ sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev
$ sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev libv4l-dev
$ sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev
$ sudo apt-get install libjasper-dev liblapack-dev libhdf5-dev
$ sudo apt-get install protobuf-compiler

Instalar QT5
QT5 es un marco de código abierto para desarrollar interfaces gráficas de usuario multiplataforma. También se puede utilizar en Raspberry Pi para crear hermosas interfaces de usuario para aplicaciones integradas. Algunas aplicaciones de visión por computadora pueden requerir interacción a través de una interfaz de usuario. Aunque agregar una interfaz de usuario puede ralentizar un poco su aplicación de visión artificial, puede ser necesario o útil agregar una interfaz en algunas aplicaciones. Para instalar QT5 en Raspbian Buster, ejecute los siguientes comandos uno por uno en Bash Terminal.

$ sudo apt-get install qt5-default
$ sudo apt-get instalar qtcreator
$ sudo apt-get instalar qtdeclarative5-dev

Para instalar QT5 en Raspbian Bullseye, ejecute los siguientes comandos uno por uno en Bash Terminal.

$ sudo apt-get install qtbase5-dev qtchooser
$ sudo apt-get install qt5-qmake qtbase5-dev-tools
$ sudo apt-get instalar qtcreator
$ sudo apt-get instalar qtdeclarative5-dev

Ya tenemos algunos tutoriales sobre cómo crear interfaces gráficas de usuario en Raspberry Pi para aplicaciones integradas utilizando el marco Tkinter. Deberías revisarlos.

GUI de Python con Tkinter
Widgets de Tkinter y TTK
Menús TTK, gestión de diseño, eventos y subprocesos múltiples
Controlador LED controlado por GUI
Interfaz de un botón y entrada digital

Descargar OpenCV
Después de instalar todos los paquetes de terceros, es hora de instalar OpenCV. Hay dos paquetes para OpenCV: una versión básica y contribuciones adicionales. Puede encontrar las últimas versiones de OpenCV en este enlace. Instalaremos OpenCV4.5.5 aquí. También puede instalar la última versión y cambiar el número de versión en consecuencia con los siguientes comandos. La instalación consumirá suficiente RAM, así que primero verifique si hay suficiente RAM disponible para la instalación ejecutando el siguiente comando en la Terminal Bash.
$ gratis -m

Dado que estamos utilizando la variante de 8 GB de Raspberry Pi 4B, puede notar que tenemos RAM más que suficiente a nuestra disposición. Luego abra el directorio raíz ejecutando el siguiente comando en la Terminal Bash.
$cd~

Descargue los paquetes OpenCV4.5 al directorio raíz ejecutando los siguientes comandos en la Terminal Bash.
$ wget -O opencv.zip
$ wget -O opencv_contrib.zip

Descomprima los paquetes ejecutando los siguientes comandos en la Terminal.
$ descomprimir opencv.zip
$ descomprimir opencv_contrib.zip

Cambie el nombre de los directorios a nombres más simples ejecutando los siguientes comandos en la Terminal.
$ mv opencv-4.5.5 opencv
$ mv opencv_contrib-4.5.5 opencv_contrib

Finalmente, deshazte de los archivos ZIP descargados ejecutando los siguientes comandos en la Terminal.
$rm opencv.zip
$rm opencv_contrib.zip

Instalación de entornos virtuales
OpenCV se puede instalar en un sistema con o sin entorno virtual. Si solo desea trabajar con una versión de OpenCV, no es necesario un entorno virtual. Sin embargo, es posible que necesite explorar algunas características de una versión de OpenCV recién lanzada o probar alguna versión anterior de OpenCV; no se pueden ejecutar ambas versiones juntas sin entornos virtuales. Supongamos que tiene dos versiones de OpenCV instaladas en su Raspberry Pi e importa OpenCV en un script de Python, ¿cómo sabrá Python qué versión de OpenCV importar? La instalación de OpenCV normalmente ocupa poco más de 1 GB de espacio en una tarjeta MicroSD. No hay nada de malo en instalar y mantener más de una versión de OpenCV en la misma tarjeta SD. Sin embargo, se pueden llamar varias versiones de OpenCV dentro de un script solo a través de diferentes entornos virtuales. Entonces, si tiene OpenCV 4.5 y OpenCV 3.4 instalados en la misma tarjeta MicroSD, necesitará dos entornos virtuales diferentes para llamar a diferentes versiones de CV en scripts de Python.

Si no desea acceder a OpenCV a través de entornos virtuales y aún desea trabajar con diferentes versiones de OpenCV, la única forma que queda es instalar diferentes versiones de OpenCV en diferentes tarjetas MicroSD con sistema operativo Raspbian. Para instalar entornos virtuales en Raspberry Pi lo mejor es hacerlo a través de pip, virtualenv y virtualenvwrapper. Debes tener pip instalado en la Raspberry Pi. Con un sistema operativo Raspberry Pi de 32 bits, incluido el escritorio y el software recomendado, pip3 ya debería estar instalado en la Raspberry Pi. Para instalar virtualenv y virtualenvwrapper, ejecute los siguientes comandos en la Terminal Bash.
$ sudo pip3 instalar virtualenv
$ sudo pip3 instalar virtualenvwrapper

Después de instalar virtualenv y virtualenvwrapper, abra el archivo ~/.bashrc ejecutando el siguiente comando en la Terminal.
$nano ~/.bashrc

En el archivo ~/.bashrc, agregue las siguientes líneas en la parte inferior.
exportar WORKON_HOME=$HOME/.virtualenvs
exportar VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
fuente /usr/local/bin/virtualenvwrapper.sh

Guarde el archivo presionando Ctrl+S y ciérrelo presionando Ctrl+X. Ahora vuelva a cargar el archivo ~/.bashrc para aplicar los cambios a la sesión bash actual ejecutando el siguiente comando.
$ fuente ~/.bashrc

Luego cree un entorno virtual con el nombre "cv" con Python3.x ejecutando el siguiente comando en la Terminal.
$ mkvirtualenv cv -p python3

Una vez que cree un entorno virtual, se activará en la sesión actual de Bash.

Mientras el entorno virtual está activado, instale picamera y numpy dentro del entorno ejecutando los siguientes comandos en la Terminal Bash.
$ pip instalar “picamera(matriz)”
$ pip3 instalar numpy

Puede deshabilitar el entorno virtual en una sesión Bash actual en cualquier momento ejecutando el siguiente comando.
$ deshabilitar

Además, el entorno virtual se puede activar en una sesión Bash actual en cualquier momento ejecutando el siguiente comando
$ trabajo en cv

Tenga en cuenta que "cv" es el nombre del entorno virtual que creamos.

Construir OpenCV
Ahora es el momento de crear el paquete OpenCV. Active el entorno virtual 'cv' ejecutando el siguiente comando en la Terminal Bash (si no está activado).
$ trabajo en cv

Abra la carpeta OpenCV, cree un directorio llamado build y abra el directorio ejecutando los siguientes comandos.
$ cd ~/opencv/
compilación $ mkdir

compilación $ cd

Finalmente, dígale a cmake que cree OpenCV ejecutando el siguiente comando que incluye varios indicadores importantes.

$ cmake -D CMAKE_BUILD_TYPE = LANZAMIENTO \
-D CMAKE_INSTALL_PREFIX=/usr/local\
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON = ENCENDIDO \
-D ENABLE_VFPV3 = ENCENDIDO \
-D COM_OPENMP=ON \
-D COM_OPENCL = APAGADO \
-D BUILD_ZLIB=ON \
-D CONSTRUIR_TIFF=ON \
-D COM_FFMPEG=ON \
-D COM_TBB=ON \
-D CONSTRUCCIÓN_TBB=ON \
-D PRUEBAS_CONSTRUCCIÓN = APAGADO \
-D COM_EIGEN = APAGADO \
-D COM_GSTREAMER=ON\
-D COM_V4L = ENCENDIDO \
-D COM_LIBV4L=ENCENDIDO\
-D COM_VTK = APAGADO \
-D COM_QT = APAGADO \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES = APAGADO \
-D INSTALL_PYTHON_EXAMPLES = APAGADO \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-paquetes\
-D OPENCV_GENERATE_PKGCONFIG=ON\
-D BUILD_EXAMPLES = APAGADO..

El proceso de construcción llevará mucho tiempo. Una vez creado OpenCv, podrá ver el mensaje de salida como se muestra en la imagen a continuación.

Crear e instalar OpenCV
Una vez completada la compilación de OpenCV, inicie el proceso de compilación utilizando los cuatro núcleos de Raspberry Pi ejecutando el siguiente comando en el entorno virtual activado de la sesión Bash actual.
$do-j4

En Raspberry Pi 4 puede tardar unas 2 horas. En otras variantes de Raspberry Pi, puede tardar de 5 a 8 horas. Debe esperar hasta que se complete el objetivo de construcción del 100%.

Después de que OpenCV se haya compilado correctamente, instale OpenCV en el entorno virtual "cv" ejecutando el siguiente comando.
$ sudo hacer instalar

Luego cree los enlaces y el caché necesarios para el paquete OpenCV recién instalado ejecutando el siguiente comando.
$ sudoldconfig

Limpie los recursos y actualice la base de datos del sistema ejecutando los siguientes comandos.
$ hacer limpieza
$ sudo apt-obtener actualización

Finalmente, abra el archivo /etc/dphys-swapfile y restablezca CONF_SWAPSIZE a 100.

Enlace Sym para OpenCV
Tenemos OpenCV instalado en un entorno virtual 'cv'. Finalmente, necesitamos crear un enlace simbólico a la biblioteca. De lo contrario, Python no podría encontrar ni importar OpenCV. Para crear un enlace simbólico, abra la carpeta ~/.virtualenvs/cv/lib/python3.9/site-packages. La ruta de la carpeta puede diferir según el nombre dado al entorno virtual y la versión de Python. Recuerde el nombre que le dio al entorno virtual y confirme la versión de Python ejecutando el siguiente comando.
$ Python –versión

Ejecute los siguientes comandos para abrir la carpeta ~/.virtualenvs/cv/lib/python3.9/site-packages, cree un enlace simbólico llamado 'cv2.so' y regrese a la carpeta raíz.
$ cd ~/.virtualenvs/cv/lib/python3.9/site-packages
$ ln -s /usr/local/lib/python3.9/site-packages/cv2/python-3.9/cv2.cpython-37m-arm-linux-gnueabihf.so
$cd~

Verifique la instalación de OpenCV
Por último, ahora deberías verificar tu instalación de OpenCV. Active el entorno virtual 'cv' e importe la biblioteca OpenCV a través del enlace simbólico “cv2” en un script Python. Si OpenCV se importa correctamente al script sin producir errores, OpenCV se instalará en el entorno virtual.

Puede confirmar la información de compilación sobre la versión instalada de OpenCV ejecutando el siguiente script de Python.
$ pitón
>>> importar cv2
>>> imprimir(cv2.getBuildInformation)

Al ejecutar el script, la información de compilación de la versión OpenCV instalada se imprimirá en la Terminal.

Esto completa la instalación de OpenCV4.5 en Raspbian Bullseye. Se realizará una instalación similar para otras microcomputadoras que ejecuten un derivado de Debian Linux.

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.