CPP项目中使用CUDA(opencv+cuda or pybind+cuda)

在这里插入图片描述

cmake_minimum_required(VERSION 2.8.12)
project(flow LANGUAGES CXX)


set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(include
        ${CUDA_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        )

link_directories(${OpenCV_LIBRARY_DIRS})

find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED)


FILE(GLOB SOURCES "*.cu" "*.cpp" "*.cuh" "*.h" )

set(CUDA_NVCC_FLAGS "-g -G")

CUDA_ADD_EXECUTABLE(flow hell0.cu example.cpp)  # add_executable(flow example.cpp)

target_link_libraries(flow ${OpenCV_LIBS})
#include "hell0.cuh"
int main(){
    cuda_main();
    return 0;
}
#include <stdio.h>

__global__ void cuda_hello(){
    printf("gpu\n");
}



extern "C" void cuda_main() {
    cuda_hello<<<1,10>>>();
    cudaDeviceSynchronize();//witout this no output
}

extern "C"
void cuda_main();

opencv+cuda

cmake_minimum_required(VERSION 3.5)

project(cuda_cv LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(include
        ${CUDA_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        )

link_directories(${OpenCV_LIBRARY_DIRS})

find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED)

#INCLUDE(/home/psdz/cmake-3.9.0/Modules/FindCUDA.cmake)

FILE(GLOB SOURCES "*.cu" "*.cpp" "*.c" "*.h")

set(CUDA_NVCC_FLAGS "-g -G")

CUDA_ADD_EXECUTABLE(cuda_cv main.cu)

target_link_libraries(cuda_cv ${OpenCV_LIBS})

pybind+cuda

cmake_minimum_required(VERSION 2.8.12)
project(example LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PYBIND11_PYTHON_VERSION "3.7")

#include_directories("/usr/include/python3.10/")

include_directories(include
        ${CUDA_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        )
link_directories(${OpenCV_LIBRARY_DIRS})

find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED)
include_directories("/home/pdd/anaconda3/envs/yolocopy/bin/")


FILE(GLOB SOURCES "*.cu" "*.cpp" "*.cuh" "*.h" )

set(CUDA_NVCC_FLAGS "-g -G")

add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)
#add_executable(untitled example.cpp)

#target_link_libraries(${PROJECT_NAME} INTERFACE
#        ${OpenCV_LIBRARIES}
##        pybind11::pybind11
#        )
target_link_libraries(${PROJECT_NAME} PRIVATE
       ${OpenCV_LIBRARIES}
        pybind11::pybind11
        )
#link_libraries(${OpenCV_LIBRARIES})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 OpenCV: 1. 在 Ubuntu 上执行以下命令安装依赖项: ``` sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev ``` 2. 下载 OpenCV 源代码: ``` git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.5.1 ``` 3. 创建并进入 build 目录: ``` cd .. mkdir build cd build ``` 4. 构建 OpenCV: ``` cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=OFF \ -D BUILD_opencv_cudacodec=OFF \ -D WITH_LIBV4L=ON \ -D WITH_V4L=ON \ -D WITH_OPENGL=ON .. make -j8 sudo make install ``` 安装 YOLOv5: 1. 在终端执行以下命令: ``` git clone https://github.com/ultralytics/yolov5.git cd yolov5 ``` 2. 安装依赖项: ``` pip install -r requirements.txt ``` 3. 下载预训练权重: ``` wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt ``` 4. 运行 YOLOv5: ``` python detect.py --weights yolov5s.pt --img 640 --conf 0.4 --source 0 ``` 其,--weights 参数指定预训练权重的路径,--img 参数指定输入图像的大小,--conf 参数指定置信度阈值,--source 参数指定输入源(例如摄像头或视频文件)。 安装 C++ API: 1. 在 yolov5 目录下创建 build 目录并进入: ``` mkdir build cd build ``` 2. 运行 cmake 命令: ``` cmake .. ``` 3. 运行 make 命令: ``` make ``` 4. 安装生成的库文件: ``` sudo make install ``` 5. 在 C++ 代码使用 YOLOv5: ```cpp #include <iostream> #include <opencv2/opencv.hpp> #include <torch/script.h> int main(int argc, const char* argv[]) { // 加载模型 torch::jit::script::Module module = torch::jit::load("yolov5s.torchscript.pt"); module.eval(); // 读取图片 cv::Mat img = cv::imread("test.jpg"); // 转换图片格式 cv::cvtColor(img, img, cv::COLOR_BGR2RGB); cv::Mat img_float; img.convertTo(img_float, CV_32F, 1.0 / 255); // 创建 Tensor torch::Tensor tensor_image = torch::from_blob(img_float.data, {1, img.rows, img.cols, 3}, torch::kFloat32).permute({0, 3, 1, 2}); // 推理 std::vector<torch::jit::IValue> inputs; inputs.push_back(tensor_image); at::Tensor output = module.forward(inputs).toTensor(); // 处理输出 auto boxes = output.select(1, 0); auto scores = output.select(1, 4); auto labels = output.select(1, 5); for (int i = 0; i < boxes.size(0); i++) { float score = scores[i].item().toFloat(); if (score > 0.5) { int label = labels[i].item().toInt(); float xmin = boxes[i][0].item().toFloat() * img.cols; float ymin = boxes[i][1].item().toFloat() * img.rows; float xmax = boxes[i][2].item().toFloat() * img.cols; float ymax = boxes[i][3].item().toFloat() * img.rows; cv::rectangle(img, cv::Point(xmin, ymin), cv::Point(xmax, ymax), cv::Scalar(0, 0, 255), 2); } } // 显示结果 cv::imshow("result", img); cv::waitKey(); return 0; } ``` 其,"yolov5s.torchscript.pt" 是通过 torch.jit.script 函数导出的 TorchScript 模型文件,test.jpg 是输入图片文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值