1. 程式人生 > >opencv+CUDA9.1+vs2015環境搭建,編譯opencv庫,呼叫GPU加速運算

opencv+CUDA9.1+vs2015環境搭建,編譯opencv庫,呼叫GPU加速運算

1.準備工作(需要用的軟體安裝)

1.1安裝VS2015

CUDA是以VS為基礎的,因此要先安裝VS。安裝CUDA的時候會自動檢測VS的版本。安裝步驟較簡單,下載線上安裝程式之後雙擊即可,配置欄有關C++的都勾上,其中最重要的一項為VC++,點選下一步安裝。

1.2安裝CUDA

解壓和安裝路徑最好不要改,否則會出現找不到路徑之類的不要麻煩。

 CUDA解壓完後會自動安裝,出現檢查系統相容性的介面。如果你的顯示卡適用的版本比CUDA版本高,則會出現硬體找不到的錯誤,不必理會,下一步安裝。

我的顯示卡是GTX1050,CUDA版本是9.1.126,而我安裝的CUDA版本是9.1.85,因此會出現找不到硬體,不要緊,點選“繼續”安裝

同意並繼續

選擇“自定義”->“下一步”

只勾選"CUDA"

 這裡的安裝位置不要改,按預設的就行,“下一步"

之後便是等待安裝。。。。

安裝完:

使用nvcc -V檢視是否安裝成功

 

 1.3 安裝Cmake

百度上下載一個,版本不要太低也不要太高,我用的是3.10.1,下一步安裝就行,沒特別的。

1.4 下載opencv原始碼

到opencv官網下載opencv原始碼。

2.編譯opencv原始碼

安裝好以上基礎工具之後可以進入下一步編譯opencv原始碼了。

開啟Cmake。

 1處為原始碼路徑,2處為Cmake配置後的路徑。配置好之後點選configure。

選擇“Visual Studio 14 2015 win64 ” 和 “use  defalut native compilers"   後點擊Finish,等待配置完畢。 如果你的CUDA安裝正確會檢測到你的CUDA版本。在配置過程中會聯網下載點東西,如果這時候網路不好的話會報錯,在Cmake編譯的Log檔案中有需要下載的檔案和檔案對應的網址,可以等網路好的時候再聯網下載,將下載好的檔案放入原位置即可。

配置完成之後點選生成(注意勾選WITH_CUDA)

生成完畢之後在 “ Configuring done"下面會出現”Generating done"。之後直接點選“Open Project",便會使用VS2015開啟工程。

在 VS2015介面  點選 “ 生成”->“配置管理器”,在配置管理器中選擇 “ALL_BUILD"和”INSTALL“ ,生成即可 。這個時候看電腦速度了,我電腦是I7-8750H ,GTX1050 編譯了四個多小時。

編譯成功後在自己選的Cmake的Build路徑下會出現一個install資料夾,這個就是咱編譯後生成的檔案。

3.執行CUDA程式碼測試

3.1配置opencv執行環境

   opencv執行環境配置不難,主要有兩個步驟:

3.1.1  配置系統環境變數

按照下圖順序進入到環境變數對話方塊,新增生成bin路徑。

 3.1.2 VS2015包含庫路徑配置

按照自己的平臺新增屬性表,我的是Debug X64平臺,因此在Debug|X64下新增一個“OpencvProjectySheet"。在“OpencvProjectySheet"中的”VC++“目錄中新增包含目錄和庫目錄。

在”連結器“中新增巨集定義。

 這些庫檔案全是自己通過VS2015編譯出來的。這個也是檢查自己編譯是否成功的標準,如果編譯不成功,則沒有庫檔案;編譯成功則有需要的庫檔案。

3.2測試例程(程式碼)

3.2.1測試程式碼

/*直接在cu檔案中實現cuda與opencv混合程式設計*/
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/cudaobjdetect.hpp>

using namespace std;
using namespace cv;
using namespace cuda;
#ifdef _DEBUG
#pragma comment ( lib,"opencv_core340d.lib")
#pragma comment ( lib,"opencv_highgui340d.lib")
#pragma comment ( lib,"opencv_calib3d340d.lib")
#pragma comment ( lib,"opencv_imgcodecs340d.lib")
#pragma comment ( lib,"opencv_imgproc340d.lib")
#pragma comment ( lib,"opencv_cudaimgproc340d.lib")
#pragma comment ( lib,"opencv_cudaarithm340d.lib")
#pragma comment ( lib,"cudart.lib")
#else
#pragma comment ( lib,"opencv_core340.lib")
#pragma comment ( lib,"opencv_highgui340.lib")
#pragma comment ( lib,"opencv_calib3d340.lib")
#pragma comment ( lib,"opencv_imgcodecs340.lib")
#pragma comment ( lib,"opencv_imgproc340.lib")
#pragma comment ( lib,"opencv_cudaimgproc340.lib")
#pragma comment ( lib,"opencv_cudaarithm340.lib")
#pragma comment ( lib,"cudart.lib")
#endif

//出錯處理函式
#define CHECK_ERROR(call){\
    const cudaError_t err = call;\
    if (err != cudaSuccess)\
    {\
        printf("Error:%s,%d,",__FILE__,__LINE__);\
        printf("code:%d,reason:%s\n",err,cudaGetErrorString(err));\
        exit(1);\
    }\
}

int main(int argc, char **argv)
{
    
    VideoCapture cap;
    //cap.open("rtsp://admin:[email protected]:80/cam/realmonitor?channel=1&subtype=0");
    cap.open(0);
    if(!cap.isOpened())    
        return -1;

    Mat frame;
    cuda::GpuMat  cu_dst;

    Ptr<cuda::CascadeClassifier> cascade_gpu = cuda::CascadeClassifier::create("D:\\opencv3_4_0\\sources\\data\\haarcascades_cuda\\haarcascade_frontalface_default.xml");

    vector<Rect> faces;

    while (1)
    {
        cap >> frame;
        if (frame.empty())
            break;

        cuda::GpuMat image_gpu(frame);

        cascade_gpu->detectMultiScale(image_gpu, cu_dst);
        
        cascade_gpu->convert(cu_dst, faces);

        for (int i = 0; i < faces.size(); ++i)
            rectangle(frame, faces[i], Scalar(255));

        imshow("faces", frame);
        //等待使用者按鍵
        waitKey(1);

    };

    cap.release();
    return 0;
    /*以下程式碼是用 一張圖片進行測試的*/
    /*
    Ptr<cuda::CascadeClassifier> cascade_gpu = cuda::CascadeClassifier::create("D:\\opencv3_4_0\\sources\\data\\haarcascades_cuda\\haarcascade_frontalface_default.xml");
    Mat image_cpu = imread("D:\\opencv_work\\006.jpg");
    imshow("image_cpu", image_cpu);
    GpuMat image_gpu(image_cpu);
    GpuMat objbuf;
    cascade_gpu->detectMultiScale(image_gpu, objbuf);
    std::vector<Rect> faces;
    cascade_gpu->convert(objbuf, faces);
    for (int i = 0; i < faces.size(); ++i)
        cv::rectangle(image_cpu, faces[i], Scalar(255));
    imshow("Faces", image_cpu);
    waitKey(0);
    destroyAllWindows();
    return 0;
    */
}

3.2.2 實驗結果

呼叫攝像頭進行人臉識別,使用Opencv的CascadeClassifier分類器做運算量是及其大的,但從右側可以看到CPU的佔用率很低,說明主要的運算不在CPU,能快速執行這樣大運算量的地方也只有GPU了。

可以用CPU執行同樣的演算法對比一下,右側的CPU佔用率極高。通過工作管理員看的話CPU佔用會達到100%。

進一步對比,cuda的CascadeClassifier識別命中率不如CPU的CascadeClassifier。

相關推薦

opencv+CUDA9.1+vs2015環境搭建編譯opencv呼叫GPU加速運算

1.準備工作(需要用的軟體安裝) 1.1安裝VS2015 CUDA是以VS為基礎的,因此要先安裝VS。安裝CUDA的時候會自動檢測VS的版本。安裝步驟較簡單,下載線上安裝程式之後雙擊即可,配置欄有關C++的都勾上,其中最重要的一項為VC++,點選下一步安裝。 1.2

Qt5.9.1+VS2015環境搭建

1、軟體及工具下載安裝 QT5.9.1: 安裝時,記得把“msvc2015”和“msvc2015_64”安裝上(下圖中圈紅部分) VS2015 :安裝時,一定要選擇“visual c++”選項(下圖中圈紅部分) Qt VS Tools: 當安裝完VS

保姆級教程——Ubuntu16.04 Server下深度學習環境搭建:安裝CUDA8.0cuDNN6.0Bazel0.5.4原始碼編譯安裝TensorFlow1.4.0(GPU版)

寫在前面 本文敘述了在Ubuntu16.04 Server下安裝CUDA8.0,cuDNN6.0以及原始碼編譯安裝TensorFlow1.4.0(GPU版)的親身經歷,包括遇到的問題及解決辦法,也有一些自己的經驗,希望能對讀者有所幫助。期間參考了許多前人的文章,後文會一一附上鍊接,在此先行謝過。在下能力有限,

VS2015下安裝與編譯OpenCV原始碼並在VS2015下配置OpenCV環境

debug opencv_calib3d2413d.lib opencv_contrib2413d.lib opencv_core2413d.lib opencv_features2d2413d.lib opencv_flann2413d.lib opencv_gpu2413d.lib opencv_high

Hadoop2.7.1+Hbase1.2.1叢集環境搭建(1)hadoop2.7.1原始碼編譯

        官網目前提供的下載包為32位系統的安裝包,在linux 64位系統下安裝後會一直提示錯誤“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-j

超級記賬本學習筆記:Hyperledger Fabric 1.0環境搭建及執行e2e的問題

Cannot run peer because cannot init crypto, missing /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[ema

Msm8937+android7.1.1編譯環境搭建編譯

Msm8937+android7.1.1編譯環境搭建及編譯1. 硬體配置建議如下:記憶體>=16GBCPU>=i7 四核2. 軟體配置如下:系統:Ubuntu16.04JDK:open jdk 1.83.環境安裝:更換預設shell,使用下面命令:sudo rm

高通平臺開發環境搭建編譯、燒錄(android5.1以上系統)

1. 安裝Ubuntu(12.04LTS以上穩定版本)     安裝過程中必須以根使用者登入或使用sudo獲取root許可權。     1.1按照http://releases.ubuntu.com中的說明,建立安裝光碟,將其安裝到計算機上。     1.2. 安裝完成後,通過下列選項之一來更新軟體:    

protobuf windows java 環境搭建編譯出protobuf需要的jar包解決編譯時OutOfMemory的問題)

使用maven編譯protobuf需要的jar包 1.下載maven(編譯工具) 2.安裝 3.編譯 (1)把protoc.exe檔案放入E:\protobuf-2.4.1\src中 (2)然後進入E:\apache-maven-3.0.4\bin目錄,修改mvn

Python3-Django-1.開發環境搭建

file 響應 令行 ide star local bsp pla 創建 官網   https://www.djangoproject.com/ 安裝   http://www.runoob.com/django/django-install.html 創建項目   方式一

WebDriver自動化測試工具(1)---C#環境搭建

quit 打開百度 asp.net ace chrome color 根路徑 var image Webdriver是一個前端自動化測試工具,可以模擬用戶點擊鏈接,填寫表單,點擊按鈕等操作,下面介紹其使用 一.下載WebdriverC#類庫以及對應瀏覽器驅動 http:

Directx 9 VS2015環境搭建

ros 項目 win32控制臺 windows 包含 files 系統 directx uid 安裝好Directx9 sdk和vs2015後 打開vs,新建項目 --》 c++項目 --》win32控制臺應用程序--》空項目 創建項目後,右鍵項目屬性,   

[lisp] scheme環境搭建編譯運行

文件格式 .com book factorial 加載過程 牛頓法 搭建 mac 代碼 搭建環境參考這篇 http://leochin.com/mac-scheme-install/ 用文本編輯器寫代碼 保存文件格式為 .scm 在終端中cd到scm文件所在文件夾, 執行

Android開發之旅1環境搭建及HelloWorld

lan 及其 其它 ply 新項目 bsp 驗證 for 對話框 ——工欲善其事必先利其器 引言 本系列適合0基礎的人員,因為我就是從0開始的,此系列記錄我步入Android開發的一些經驗分享,望與君共勉!作為Android隊伍中的一個新人的

接口自動化測試Python(1)_環境搭建配置

下載安裝配置 nload 使用 環境變量 django lan 測試 img 只需要 Windows下 一. Python下載安裝配置環境變量 1. Python 下載地址:https://www.python.org/downloads/ 2. 安裝Python你只需要下

【unp】unix網絡編程卷1-->環境搭建(ubuntu14.04)

func class pos span net 下載 size_t tran make 學習unp網絡編程,樹上的例子均存在#include "unp.h",故需要對環境進行配置。 1. 到資源頁下載unpv13e 2. 解壓並將unpv13e 移動到相應的文件夾下

Python學習第1天 - 環境搭建

OS 是否 png 環境搭建 clas .org class 設置 完成 1. 若是WINDOWS系統,首先在CMD中查看是否有安裝python, 若是有,則會顯示相應的版本信息 2. 如果沒有,則先下載python, 對應的網址是:https://www.python.

python+selenium(1)--環境搭建

重新 一個 輸入 3.x 成了 ade pytho 復習 安裝 做自動化也很長時間了,這段時間項目初期沒什麽事情幹就在復習以前做過的seleniu+python的知識,現在想做一個簡單的記錄,也對自己學習有一個驅動作用吧。 以上。 一、python下載地址: https

ant design後臺模板-1.前端環境搭建

學習了一段時間的React,試著搭建一個後臺管理的模板,算是這一段時間的學習總結,前端將採用create-react-app作為腳手架,引用react-router進行路由處理,後臺將採用spring、spring-mvc、MyBatis搭建一個簡單的後臺管理系統架子,初步實現使用者、角

[RK3399][Android7.1]開發環境搭建

最後還是安裝了雙系統,在Ubuntu16.04下編譯的,以下的解決方法依然後效;/(ㄒoㄒ)/~~ ######################黃金分割線########################### Virtual Machine:Vmware 14, Linux:Ubuntu16