====== VISIÓN POR COMPUTADORA CON GPU ====== [[https://opencv.org|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 [[https://wiki.hpc.uo.edu.cu/doku.php?id=hpc-python-entorno|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