====== 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