opencv4.5,ubuntu16.04编译,移植(cuda版本)

一、安装必要的依赖环境

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

最后3个模块是供opencv调用rtsp视频流的

后期需要python版本numpy的话需要安装python版本和其对应的numpy版本(下面是python3版本例子)

sudo apt-get install python3-dev python3-numpy

二、下载opencv和opencv-contrib

github下载很慢,而且很容易中断,建议采用gitee的方式下载,详见参考资料5

三、解压下载好的包

unzip opencv-4.5.0.zip
unzip opencv_contrib-4.5.0.zip

解压完后需要将opencv_contrib.zip提取到opencv目录下

sudo cp -r opencv_contrib-4.5.0 opencv-4.5.0/

在该目录下新建一个文件夹build

cd opencv-4.5.0
mkdir build
cd build

四、保证电脑上安装有cuda

这一点不在本文论述范围内,请自行安装
安装成功后,输入指令 nvidia-smi,会显示显卡占用情况

333.png

五、cmake获取一些依赖项

sudo cmake -D CMAKE_BUILD_TYPE=Release \
           -D CMAKE_INSTALL_PREFIX=/usr/local \
           -D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.5/dist-packages \
           -D OPENCV_EXTRA_MODULES_PATH=/home/username/opencv-4.5.0/opencv_contrib-4.5.0/modules/ \
           -D WITH_CUDA=ON \
           -D WITH_CUDNN=ON \
           -D OPENCV_DNN_CUDA=ON \
           -D ENABLE_FAST_MATH=1 \
           -D CUDA_FAST_MATH=1 \
           -D CUDA_ARCH_BIN=6.1 \
           -D WITH_CUBLAS=1 \
           -DOPENCV_ENABLE_NONFREE=True ..

上述命令注意路径,跟自己电脑上的路径保持一致
其中 CUDA_ARCH_BIN=6.1这个参数,需要根据自己的显卡参数来填写,具体操作步骤详见 参考资料6
这个参数至关重要,如果填错了,编译过程能正常运行,但是最后运行代码的时候会出错

File "ssd_object_detection.py", line 74, in 
    detections = net.forward()
cv2.error: OpenCV(4.2.0) /home/a_rosebrock/opencv/modules/dnn/src/cuda/execution.hpp:52: error: (-217:Gpu API call) invalid device function in function 'make_policy'

如果我们仅仅是想用GPU来加速深度学习的预测,有WITH_CUDA=ONCUDA_ARCH_BIN=6.1OPENCV_DNN_CUDA=ON这三个可选项就可以了(本人未尝试,待验证)

这里还编译了cuDNN (WITH_CUDNN=ON).
ENABLE_FAST_MATH, CUDA_FAST_MATH, and WITH_CUBLAS是用来优化的

上述过程中会下载一些必要的安装包,由于我朝众所周知的原因,下载过程很慢,大概率会下载失败
下载失败后,不会一直卡着不动,最终这个命令能正常执行完,但是后续正式编译会报错
待这个命令执行完之后,需要手动下载一些文件

1. 卡在ippicv下载的地方,一直下载不下来

ippicv.png

从参考资料3中找到对应的下载位置,手动下载到本地(建议存放到ippicv的cmake文件所在位置)
修改ippicv的cmake配置文件

sudo gedit opencv-4.5.0/3rdparty/ippicv/ippicv.cmake

将第47行替换为本地路径

URL
                 "${OPENCV_IPPICV_URL}"
                 "$ENV{OPENCV_IPPICV_URL}"
                 #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
                 "/home/usrname/opencv-4.5.0/3rdparty/ippicv/"

2. 卡在face_landmark_model.dat下载的地方,一直下载不下来

face_landmark.png

从网上下载face_landmark_model.dat,放置到本地(建议放在face模块位置)
修改face模块的配置文件

sudo gedit /home/username/opencv-4.5.0/opencv_contrib/modules/face/CMakeLists.txt

将第19行替换为本地路径

    URL
      "${OPENCV_FACE_ALIGNMENT_URL}"
      "$ENV{OPENCV_FACE_ALIGNMENT_URL}"
      #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
      "/home/username/opencv-4.5.0/opencv_contrib/modules/face/src
/"

3. 卡在vgg_generated下载的地方,一直下载不下来

boostdesc_bgm.png

vgg_generated.png

参考资料4中有下载地址,下载成功后放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可

六、make编译

sudo make -j4

代码最后的数字代表使用多少个CPU进行编译,我的电脑是12核的CPU,所以我把数字4改为10,编译速度立马从一两个小时降为10来分钟

过程中遇到一个报错


111.png

往上翻了翻,发现是文件缺失


222.png

根据 参考资料7 找到了解决方案:将opencv/modules/features2d复制,粘贴到build目录中来解决该问题

先将build文件夹清空,然后复制上述文件夹,重复第五和第六步两个指令即可

根据make结果进行安装

sudo make install

安装成功后,本机就可以正常使用了

七、打包编译好的动态库

在需要的地方创建一个文件夹

mkdir  -p opencv450/lib
cd opencv450

将安装好的opencv库打包进新建的文件夹内,留作新的电脑内使用

cp /usr/local/lib/libopencv* opencv450/lib
cp /usr/local/lib/python3.5/dist-packages/cv2/python-3.5/cv2.cpython-35m-x86_64-linux-gnu.so opencv450/cv2.so

以上命令注意文件路径

八、将编译好的opencv动态库放到新的电脑指定路径内

cp opencv420/lib/libopencv* /usr/local/lib/
cp opencv420/cv2.so /usr/local/lib/python3.5/dist-packages/cv2.so

以上命令注意文件路径
这样就可以在新电脑中测试opencv了,哈哈!!

参考资料:
1. ubuntu16.04+opencv420+移植到新的相对应的环境中
2. ubuntu16.04 安装opencv IPPICV 和 face_landmark_model.dat下载不下来的问题解决
3. ubuntu安装opencv无法下载IPPICV的问题 ippicv_2020_lnx_intel64_20191018_general.tgz
4. 编译OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件
5. 2020年github文件高速下载方法
6. How to use OpenCV’s “dnn” module with NVIDIA GPUs, CUDA, and cuDNN
7. Ubuntu系统opencv4.4安装常见问题 找不到 feature2d/test/test_detectors_regression.impl.hpp 文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容