python opencv源码_caffegpu源码编译
軟硬件環境
- ubuntu 18.04 64bit
- NVidia GTX 1070Ti
- anaconda with python 3.7
- CUDA 10.1
- cuDNN 7.6
- opencv 3.4.2
- caffe 1.0.0
簡介
先說一下環境,使用anaconda的python虛擬環境,支持opencv,支持CUDA和cuDNN加速,支持在python中調用caffe。基礎組件部分可以參考前面的文章,本文就不贅述了
- anaconda基本使用 https://xugaoxiang.com/2019/12/08/anaconda/
- ubuntu安裝CUDA和cuDNN https://xugaoxiang.com/2019/12/13/ubuntu-cuda/
- opencv源碼編譯,支持CUDA https://xugaoxiang.com/2019/12/17/opencv-cuda/
基礎環境準備
安裝依賴包和工具
sudo?apt?install?build-essential?cmake?git?ffmpeg?libatlas-base-dev?libtiff-dev?pkg-config?python3-dev?libavcodec-dev?libavformat-dev?libswscale-dev?libtbb-dev?libjpeg-dev?libpng-dev?libavcodec-dev?libavformat-dev?libswscale-dev?libv4l-dev?libx264-dev?libboost-all-dev?libhdf5-serial-dev?libleveldb-dev?liblmdb-devpip?install?protobuf
opencv
這里把opencv單獨拿出來說,是因為opencv的安裝方法非常多
- apt install python3-opencv
- conda install opencv
- 源碼編譯
通過apt install安裝最簡單,也是最不容易出錯的方法;其次是conda install,最容易出問題的是自己編譯源碼,編譯參數復雜,依賴庫繁多,而且還有版本差異。
安裝完成后,建議使用opencv_version命令來查看當前版本,默認ubuntu 18.04源提供的是3.2.0版本,conda的會更高一些,這里是3.4.0,源碼安裝的話,注意在sudo make install后再執行一句sudo ldconfig。本文以conda的方式進行安裝。
編譯caffe
接下來就可以編譯caffe了
git?clone?https://github.com/BVLC/caffe.gitcd?caffe
cp?Makefile.config.example?Makefile.config
編輯文件Makefile.config,主要是一些路徑的修改,貼上已經修改好的
##?Refer?to?http://caffe.berkeleyvision.org/installation.html#?Contributions?simplifying?and?improving?our?build?system?are?welcome!
#?cuDNN?acceleration?switch?(uncomment?to?build?with?cuDNN).
#?啟用cuDNN加速
USE_CUDNN?:=?1
#?CPU-only?switch?(uncomment?to?build?without?GPU?support).
#?CPU_ONLY?:=?1
#?uncomment?to?disable?IO?dependencies?and?corresponding?data?layers
#?啟用opencv
USE_OPENCV?:=?1
#?USE_LEVELDB?:=?0
#?USE_LMDB?:=?0
#?This?code?is?taken?from?https://github.com/sh1r0/caffe-android-lib
#?USE_HDF5?:=?0
#?uncomment?to?allow?MDB_NOLOCK?when?reading?LMDB?files?(only?if?necessary)
#?You?should?not?set?this?flag?if?you?will?be?reading?LMDBs?with?any
#?possibility?of?simultaneous?read?and?write
#?ALLOW_LMDB_NOLOCK?:=?1
#?Uncomment?if?you're?using?OpenCV?3
#?opencv大版本號是3,這里一定要注意
OPENCV_VERSION?:=?3
#?To?customize?your?choice?of?compiler,?uncomment?and?set?the?following.
#?N.B.?the?default?for?Linux?is?g++?and?the?default?for?OSX?is?clang++
#?CUSTOM_CXX?:=?g++
#?CUDA?directory?contains?bin/?and?lib/?directories?that?we?need.
CUDA_DIR?:=?/usr/local/cuda
#?On?Ubuntu?14.04,?if?cuda?tools?are?installed?via
#?"sudo?apt-get?install?nvidia-cuda-toolkit"?then?use?this?instead:
#?CUDA_DIR?:=?/usr
#?CUDA?architecture?setting:?going?with?all?of?them.
#?For?CUDA?#?For?CUDA?#?For?CUDA?>=?9.0,?comment?the?*_20?and?*_21?lines?for?compatibility.#?-gencode?arch=compute_20,code=sm_21#?CUDA_ARCH?:=?-gencode?arch=compute_20,code=sm_20?#?這里使用的是CUDA10.1,所以要注釋掉前兩行
CUDA_ARCH?:=?-gencode?arch=compute_30,code=sm_30?\
??-gencode?arch=compute_35,code=sm_35?\
??-gencode?arch=compute_50,code=sm_50?\
??-gencode?arch=compute_52,code=sm_52?\
??-gencode?arch=compute_60,code=sm_60?\
??-gencode?arch=compute_61,code=sm_61?\
??-gencode?arch=compute_61,code=compute_61#?BLAS?choice:#?atlas?for?ATLAS?(default)#?mkl?for?MKL#?open?for?OpenBlas
BLAS?:=?atlas#?Custom?(MKL/ATLAS/OpenBLAS)?include?and?lib?directories.#?Leave?commented?to?accept?the?defaults?for?your?choice?of?BLAS#?(which?should?work)!#?BLAS_INCLUDE?:=?/path/to/your/blas#?BLAS_LIB?:=?/path/to/your/blas#?Homebrew?puts?openblas?in?a?directory?that?is?not?on?the?standard?search?path#?BLAS_INCLUDE?:=?$(shell?brew?--prefix?openblas)/include#?BLAS_LIB?:=?$(shell?brew?--prefix?openblas)/lib#?This?is?required?only?if?you?will?compile?the?matlab?interface.#?MATLAB?directory?should?contain?the?mex?binary?in?/bin.#?MATLAB_DIR?:=?/usr/local#?MATLAB_DIR?:=?/Applications/MATLAB_R2012b.app#?NOTE:?this?is?required?only?if?you?will?compile?the?python?interface.#?We?need?to?be?able?to?find?Python.h?and?numpy/arrayobject.h.#?Python頭文件路徑,再加上numpy的頭文件路徑
PYTHON_INCLUDE?:=?/home/xugaoxiang/anaconda3/include/python3.7m?\
??/home/xugaoxiang/anaconda3/lib/python3.7/site-packages/numpy/core/include#?Anaconda?Python?distribution?is?quite?popular.?Include?path:#?Verify?anaconda?location,?sometimes?it's?in?root.#?ANACONDA_HOME?:=?$(HOME)/anaconda#?PYTHON_INCLUDE?:=?$(ANACONDA_HOME)/include?\#?$(ANACONDA_HOME)/include/python2.7?\#?$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include#?Uncomment?to?use?Python?3?(default?is?Python?2)#?默認是python2,這里使用python3,一定要改,不然后面會報錯相應沒人在用python2了吧
PYTHON_LIBRARIES?:=?boost_python3?python3.7m#?PYTHON_INCLUDE?:=?/usr/include/python3.5m?\#?????????????????/usr/lib/python3.5/dist-packages/numpy/core/include#?We?need?to?be?able?to?find?libpythonX.X.so?or?.dylib.#?libpython*.so庫的路徑
PYTHON_LIB?:=?/home/xugaoxiang/anaconda3/lib#?如果設置了ANACONDA_HOME環境變量,可以使用下面的設置方法,作用一樣#?PYTHON_LIB?:=?$(ANACONDA_HOME)/lib#?Homebrew?installs?numpy?in?a?non?standard?path?(keg?only)#?PYTHON_INCLUDE?+=?$(dir?$(shell?python?-c?'import?numpy.core;?print(numpy.core.__file__)'))/include#?PYTHON_LIB?+=?$(shell?brew?--prefix?numpy)/lib#?Uncomment?to?support?layers?written?in?Python?(will?link?against?Python?libs)#?WITH_PYTHON_LAYER?:=?1#?Whatever?else?you?find?you?need?goes?here.
INCLUDE_DIRS?:=?$(PYTHON_INCLUDE)?/usr/local/include?/home/xugaoxiang/anaconda3/include
LIBRARY_DIRS?:=?$(PYTHON_LIB)?/usr/local/lib?/usr/lib?/usr/lib/x86_64-linux-gnu/hdf5/serial/#?If?Homebrew?is?installed?at?a?non?standard?location?(for?example?your?home?directory)?and?you?use?it?for?general?dependencies#?INCLUDE_DIRS?+=?$(shell?brew?--prefix)/include#?LIBRARY_DIRS?+=?$(shell?brew?--prefix)/lib#?NCCL?acceleration?switch?(uncomment?to?build?with?NCCL)#?https://github.com/NVIDIA/nccl?(last?tested?version:?v1.2.3-1+cuda8.0)#?USE_NCCL?:=?1#?Uncomment?to?use?`pkg-config`?to?specify?OpenCV?library?paths.#?(Usually?not?necessary?--?OpenCV?libraries?are?normally?installed?in?one?of?the?above?$LIBRARY_DIRS.)#?啟用pkg_config,方便caffe找到opencv
USE_PKG_CONFIG?:=?1#?N.B.?both?build?and?distribute?dirs?are?cleared?on?`make?clean`#?默認編譯的目錄,所有的目標文件、可執行文件、庫都存放在這里
BUILD_DIR?:=?build
DISTRIBUTE_DIR?:=?distribute#?Uncomment?for?debugging.?Does?not?work?on?OSX?due?to?https://github.com/BVLC/caffe/issues/171#?是否打開debug信息#?DEBUG?:=?1#?The?ID?of?the?GPU?that?'make?runtest'?will?use?to?run?unit?tests.
TEST_GPUID?:=?0#?enable?pretty?build?(comment?to?see?full?commands)
Q??=?@
完成后,執行
make?all?-j12參數-j指的是使用多少個cpu核心,目的是加快編譯速度,根據自己的實際情況設定
為了能在python中調用caffe,還需要執行
make?pycaffe?-j12至此,整個編譯就結束了。
驗證
使用ipython環境測試
caffe如果細心一點,會發現,新開一個terminal,同樣打開ipython,同樣import caffe,但是會報錯,這是什么原因?
caffe在不報錯的terminal中,查看環境變量就會發現端倪
caffe在編譯caffe的過程中,會export環境變量PYTHONPATH,所以我們在使用前也需要這樣做
caffe為了簡便,可以將聲明語句寫入~/.bashrc中,就不用每次都去執行了
export?PYTHONPATH=/home/xugaoxiang/Works/github/caffe/python:$PYTHONPATHQ & A
Q1
編譯過程碰到了tiff相關的錯誤
caffe這是由于之前opencv源碼編譯引起的,這里特別要注意一點,如果是從源碼開始編譯opencv,那么在配置的時候一定要加上選項-D BUILD_TIFF=ON。還有就是盡量不要同時擁有apt和conda安裝的2種環境,對新手來說比較容易出錯。
Q2
進入ipython中,import caffe報錯
caffe將libhdf5_hl.so.100的路徑加入LD_LIBRARY_PATH中
export?LD_LIBRARY_PATH=/home/xugaoxiang/anaconda3/lib:$LD_LIBRARY_PATHQ3
進入ipython中,import caffe報錯
caffe修改Makefile.config,修改PYTHON_LIBRARIES為
PYTHON_LIBRARIES?:=?boost_python3?python3.7m默認的是python2
Q4
關于caffe中使用源碼編譯的opencv4,由于opencv4的版本差異,都會報錯
caffe這是由于在opencv4中,原來版本中的宏CV_LOAD_IMAGE_COLOR和CV_LOAD_IMAGE_GRAYSCALE已經改成了cv::IMREAD_COLOR和cv::ImreadModes::IMREAD_GRAYSCALE,所以,需要在caffe源碼目錄中查找并替換,才能夠編譯成功
caffe參考資料
- anaconda基本使用
- ubuntu安裝CUDA和cuDNN
- opencv源碼編譯,支持CUDA
- https://github.com/BVLC/caffe/issues/4436
總結
以上是生活随笔為你收集整理的python opencv源码_caffegpu源码编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iptables 生效_Linux防火墙
- 下一篇: python编程单词排序_Python读