Configuración de OpenCV con CUDA en Win11

Hace unos días, vi un tutorial sobre el uso de OpenCV para llamar a CUDA para acelerar la detección de objetivos y la detección de puntos clave en Bilibili. La velocidad de inferencia ha mejorado significativamente en comparación con Pytorch. Recientemente instalé un RTX4070, así que quería probarlo. . Como acabo de cambiar mi computadora y no tengo un entorno relevante, me encontré con algunos problemas durante el proceso de configuración, así que escribí este artículo récord.

Configuracion basica

  1. Sistema: Windows11-22H2
  2. Tarjeta gráfica: RTX4070
  3. Controlador: CUDA-11.8, cudnn-windows-x86_64-8.9.2.26
  4. Software de compilación: CMake, Visual Studio 2019
  5. Versión: OpenCV 4.7.0, contribución 4.7.0

Condiciones previas

Instale Visual Studio2019, CMake, CUDA y cuDNN

  1. Dirección de descarga de Visual Studio
  2. Enlace de descarga de CMake
  3. Enlace de descarga CUDA
  4. Enlace de descarga de cuDNN
    La instalación de VS y CMake es muy simple, como el software normal. Para descargar e instalar CUDA y cuDNN, consulte este artículo anterior.

Descargar y modificar OpenCV

descargar

DIRECCIÓN

  1. OpenCV
  2. paquete de contribución

Cabe señalar que las versiones del paquete principal OpenCV descargado y el paquete Contrib deben ser consistentes, yo usé la versión 4.7.0.

Después de la descarga, descomprima los dos paquetes en el mismo directorio para facilitar la búsqueda. Al mismo tiempo, para almacenar la biblioteca OpenCV compilada que admite CUDA, es necesario crear una nueva carpeta, aquí creé una carpeta llamada opencv_cuda_build en el mismo directorio, como se muestra en la Figura 1 .

Figura 1-Tabla de contenido
Dado que el paquete compilado OpenCV descargado no tiene soporte relevante en los paquetes CUDA y contrib, se requiere la compilación del código fuente para generar una biblioteca OpenCV personalizada que admita Contrib y CUDA. Se requieren los siguientes pasos entre el código fuente OpenCV descargado y los archivos de la biblioteca que necesitamos para acelerar la inferencia:

  1. Utilice CMake para configurar el proyecto de código fuente OpenCV y generar los archivos de proyecto necesarios para la compilación VS.
  2. Utilice VS para compilar el código fuente en el archivo de biblioteca correspondiente
  3. Configure el archivo de biblioteca OpenCV generado por la compilación en VS antes de vincularlo a nuestra propia biblioteca compilada en el proyecto VS.

Cambio de configuracion

Debido a algunas razones objetivas, algunas bibliotecas necesarias para compilar OpenCV y contrib no se pueden descargar en China, por lo que se requieren algunas modificaciones en la configuración del código descargado para evitar fallas de compilación causadas por la falta de ciertas bibliotecas.

Específicamente, se trata principalmente de las bibliotecas ffmpeg, ippicv y contrib de OpenCV, xfeatures2d.

La solución es modificar las direcciones de descarga de estas bibliotecas y agregar agentes delante de las direcciones de descarga originales.
Por ejemplo, la dirección de descarga original en el archivo ippicv.cmake de ippicv

https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/

Agregue una dirección de proxy al frente

https://ghproxy.com/

Simplemente modifícalo así

https://ghproxy.com/https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/

Como se muestra en la Figura 2
Figura 2-Modificar la dirección de descarga de ippicv
, por analogía, el archivo de configuración ffmpeg es opencv\sources\3rdparty\ffmpeg\ffmpeg.cmake , y el archivo de configuración xfeatures2d está en opencv_contrib-4.7.0\opencv_contrib-4.7.0\modules\xfeatures2d\ directorio cmake**.Download_boostdesc.cmake y download_vgg.cmake**, el archivo de configuración de face es F:\packages\opencv_contrib-4.7.0\opencv_contrib-4.7.0\modules\face\ CMakeLists .

Compilar OpenCV

Se completa el trabajo preliminar y comenzamos a compilar el OpenCV que necesitamos.

1. Utilice CMake para configurar el proyecto de código fuente OpenCV

  • Abra el software CMake y seleccione la ruta del código fuente OpenCV que descomprimimos en la columna ¿ Dónde está el código fuente ? En mi caso, es F:/packages/opencv/sources. En la columna Dónde construir los archivos binarios , seleccione la carpeta opencv_cuda_build que creamos. Luego haga clic en Configurar para realizar la Configuración por primera vez, seleccione VS 2019 y x64 en el cuadro de diálogo emergente y luego haga clic en finalizar.
    Figura 3: Configuración de CMake
    Una vez completada la ejecución, la interfaz se muestra a continuación:
    Figura 4: Se completa la primera configuración

  • A continuación, busque CUDA en el cuadro de búsqueda de CMake y marque la opción CUDA emergente.
    Figura 5-CUDA

  • Buscar y comprobar temas relacionados con las matemáticas.
    Figura 6: Agregar soporte matemático

  • Busca y comprueba NO GRATIS
    Figura 7-NO LIBRE

  • Busque y verifique BUILD_opencv_world
    Figura 8-BUILD_opencv_world

  • Busque GENERATE_SETUPVARS y desmarque
    Figura 9: Cancelar GENERATE_SETUPVARS

  • Finalmente, busque MÓDULOS y agregue la ruta al paquete contrib.
    Figura 10: Agregar ruta del paquete contrib
    En este punto, complete la selección de configuración de este paso. Haga clic en configurar por segunda vez y espere a que se complete la configuración, como se muestra a continuación:
    Figura 11: Se completa la segunda configuración.

  • Una vez completada la configuración, busque CUDA_ARCH_BIN y elija conservar el valor correspondiente según la potencia informática de su propia GPU. Los valores correspondientes a la GPU específica se pueden encontrar en la web oficial de Nvidia . Dado que la potencia informática de la tarjeta gráfica de la serie 40 es 8.9, y la potencia informática máxima admitida por la versión 4.7 de OpenCV es 8.6, elegí 8.6 aquí.

Figura 12-Potencia informática de la GPU
A continuación, haga clic en configurar por tercera vez . Después de esperar a que finalice, haga clic en generar como se muestra a continuación:
Figura 13: la configuración se completa y la generación se realiza correctamente
Luego puede hacer clic en Abrir proyecto para abrir Visual Studio 2019. En este punto, CMake ha completado su misión.

2.Visual Studio 2019 Compile el código fuente de OpenCV

  • Después de abrir el proyecto VS, seleccione la versión Release x64, haga clic con el botón derecho en ALL_BUILD en el directorio CMakeTargets en el Administrador de soluciones , seleccione Generar e inicie la compilación. (Este proceso lleva mucho tiempo, la compilación de 13600K tarda unos 50 minutos)

Figura 14: compilar ALL_BUILD

  • Después de completar la compilación ALL_BUILD, seleccione INSTALAR y también haga clic derecho para realizar la operación de generación
    Figura 14-Generar INSTALAR
    . Después de completar este paso, la carpeta de instalación se generará en la carpeta opencv_cuda_build/:
    Figura 15: Carpeta de instalación generada
    los archivos en la carpeta de instalación generada son los archivos que Necesito ¡En este punto, la compilación de OpenCV finaliza!

Configurando Visual Studio 2019

Después de compilar OpenCV, debe configurar VS para poder hacer referencia a nuestra biblioteca OpenCV compilada en nuestro proyecto. En concreto, existen principalmente

  1. Agregar directorio de inclusión
  2. Agregar directorio de biblioteca
  3. Agregar dependencias adicionales
  4. Agregar variables de entorno
  • Primero, creamos un proyecto VS C++ en blanco y agregamos el archivo fuente main.cpp, luego seleccionamos Release x64 , hacemos clic derecho en Release |
F:\packages\opencv_cuda_build\install\include
F:\packages\opencv_cuda_build\install\include\opencv2

Figura 16-Agregar directorio de inclusión
Figura 17-Agregar directorio de inclusión

  • Luego agregue la ruta lib en el directorio de la biblioteca a continuación :
F:\packages\opencv_cuda_build\install\x64\vc16\lib

Figura 18-Agregar directorio de biblioteca

  • Finalmente, agregue todos los nombres de los archivos lib en la carpeta opencv_cuda_build\install\x64\vc16\lib en la opción vinculador->entrada->dependencias adicionales . Solo tengo opencv_img_hash470.lib y opencv_world470.lib aquí.
    Figura 19: Agregar dependencias adicionales
  • Finalmente, debe agregar la ruta del archivo binario compilado a la variable de entorno, buscar y editar la variable de entorno en la barra de búsqueda del sistema y agregar la ruta bin en la columna Ruta :
F:\packages\opencv_cuda_build\install\x64\vc16\bin

Insertar descripción de la imagen aquí

En este punto, la configuración de VS está completa y podemos llamar al OpenCV compatible con CUDA que acabamos de compilar en VS.

Programa de prueba

Agregue el siguiente programa de muestra al main.cpp que acaba de crear:

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/cudaarithm.hpp>
#include <iostream>

using namespace std;
using namespace cv;
using namespace cv::cuda;

int main()
{
    
    
    // OpenCV版本号
    cout << "OpenCV_Version: " << CV_VERSION << endl;
    // CUDA
    int num_devices = getCudaEnabledDeviceCount();
    if (num_devices)
        cout << "CUDA is available, num_devices:" << num_devices << endl;
    else
        cout << "CUDA is not available." << endl;
    //读取图片
    Mat img = imread("D:/CUDA_ARCH_BIN.png");

    imshow("picture", img);
    waitKey(0);
    return 0;
}

Si la imagen y CUDA se pueden mostrar correctamente, ¡la instalación se realizó correctamente!
Figura 20-Resultados de la prueba

Tutorial de referencia

  1. Resolver problemas de descarga como ippicv
  2. Tutorial de instalación de OpenCV
  3. Artículos de instalación anteriores

Supongo que te gusta

Origin blog.csdn.net/weixin_40313940/article/details/131265058
Recomendado
Clasificación