VISIÓN POR COMPUTADORA CON GPU
OpenCV es una biblioteca de código abierto para Visión por Computadora, Aprendizaje Automático y Procesamiento de Imágenes. Puede procesar imágenes y videos para identificar objetos y rostros, trabajar con código de barras y código QR, entre otros. Admite una amplia variedad de lenguajes de programación como Python, C++, Java y otros.
La versión instalada de OpenCV es 4.5.5, compilada con CUDA 10.2 y cuDNN 7.6.5.
Se sugiere el trabajo con OpenCV en entornos virtuales de Python. Para ello se debe:
1. Crear un entorno virtual con Anaconda, por ejemplo, cv_gpu
conda create -n cv_gpu Python=3.7 anaconda
Nota: Consultar los cuatro primeros pasos de creación de entornos virtuales de Python para la instalación de Anaconda3.
2. Activar el entorno virtual
source ~/.bashrc conda activate cv_gpu
3. Con el entorno virtual activado, hacer un enlace simbólico.
ln -s /opt/apps/manually/cv_GPU/lib/python3.7/site-packages/cv2/python-3.7/cv2.cpython-37m-x86_64-linux-gnu.so ~/anaconda3/envs/cv_gpu/lib/python3.7/site-packages/cv2.so
4. Verificar el funcionamiento de OpenCV
Escriba el código version.py:
import cv2 import re print ("Version de cv2 =", cv2.__version__) cv_info = [re.sub('\s+', ' ', ci.strip()) for ci in cv2.getBuildInformation().strip().split('\n') if len(ci) > 0 and re.search(r'(nvidia*:?)|(cuda*:)|(cudnn*:)', ci.lower()) is not None] print(cv_info)
Y envíelo a ejecutar con el script version.sl, utilizando el comando sbatch version.sl.
version.sl
#!/bin/bash #SBATCH --partition=gpu #SBATCH --job-name=cv_version SBATCH --gres=gpu:m10:1 #SBATCH -o slurm.%N.%j.out #STDOUT #SBATCH -e slurm.%N.%j.err #STDERR # Activar el entorno cv_gpu source ~/.bashrc conda activate cv_gpu # Cambiar al directorio de envío cd $SLURM_SUBMIT_DIR # Ejecutar el programa python version.py > cv2.txt
5. Enviar un trabajo
Por ejemplo, escriba el código rotate_image.py:
# Rotar 12 grados la imagen usando OpenCV y GPU import cv2 import cv2.cuda as cuda image = cv2.imread("myimage.png") # Storing the image on GPU src = cv2.cuda_GpuMat() src.upload(image) # Applying the rotation a = cv2.cuda.rotate(src=src, dsize = (414,500), angle = 12, xShift= 0, yShift=0, interpolation=cv2.INTER_NEAREST) # Downloading the image from GPU and visualizing the image result = a.download() cv2.imwrite('myimage_rotated.jpg',result)
con myimage.png en el directorio de envío y ejecute el script rotate_image.sl con el comando sbatch rotate_image.sl.
rotate_image.sl
#!/bin/bash #SBATCH --partition=gpu #SBATCH --job-name=rotate SBATCH --gres=gpu:m10:1 #SBATCH -o slurm.%N.%j.out #STDOUT #SBATCH -e slurm.%N.%j.err #STDERR # Cargar módulo module load opencv/4.5.4 # Activar el entorno cv_gpu source ~/.bashrc conda activate cv_gpu # Cambiar al directorio de envío cd $SLURM_SUBMIT_DIR # Ejecutar el programa python rotate_image.py