Ubuntu16.04+opencv3.1.0+python2.7.12提取視頻光流特徵(1)

1.背景

在使用的數據集中,只給了視頻文件,因網絡的需求,需要提取視頻的光流特徵,一路坎坷,終於完成了,記錄艱辛歷程......

2.準備

(1) opencv3.1.0  

(2)opencv_contrib:   提取光流算法需要該庫

           https://github.com/opencv/opencv_contrib      下載對應opencv3.1.0的版本,以備使用

(3)dense-flow:提取光流的算法程序

         https://github.com/yjxiong/dense_flow/tree/opencv-3.1

必須克隆該項目,不能zip下載,否則include中的easylogging++等文件夾會爲空,切記!

git clone --recursive http://github.com/yjxiong/dense_flow

克隆完之後,可以查看下easylogging++中是否爲空

3.開始編譯

因爲我已經安裝過了opencv3.1.0,因此只需添加opencv_contrib即可,沒有安裝過的,可以按此博客安裝:

https://blog.csdn.net/dwj6336736/article/details/76674748

(1) opencv_contrib

更新源:

 sudo apt-get update  
 sudo apt-get upgrade  

安裝編譯環境

sudo apt-get install build-essential  

安裝依賴項

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 

將下載下來的opencv_contrib壓縮包解壓到opencv3.1.0文件夾下,在opencv3.1.0文件夾下打開終端,進行編譯:

mkdir build
cd build
cmake -D WITH_OPENMP=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ..

其中OPENCV_EXTRA_MODULES_PATH=opencv_contrib中的modules文件夾

報錯1:cuda版本不對應,要求cuda8.0;但是找到了cuda9.0

因爲opencv裝了好長時間,後來一直用在anaconda中也沒報錯,而且中間因爲一些其他網絡需求更改了cuda版本,導致了現在的問題.

因爲我的機子上cuda8.0和cuda9.0共存,因此切換cuda爲8.0繼續編譯,切換方式:

cd /usr/local
stat cuda  # 查看當前鏈接的cuda版本


# 切換其他的cuda版本
sudo rm -rf cuda # s刪除當前軟連接
sudo ln -s /usr/local/cuda-8.0 usr/local/cuda    #建立新的軟連接

# 注意:使用以上方法,~/.bashrc中的環境變量應爲一下方式:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

編譯成功之後顯示:

-- Configuring done
-- Generating done
-- Build files have been written to: /home/XXX/opencv-3.1.0/build

之後執行: make -j8

報錯2:

Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

一通檢索之後,發現了以下解決辦法:

說是因爲anaconda和ubuntu自身的GCC衝突導致的,解決方案有兩個:

1. 編譯時增加 -D WITH_OPENMP=ON

嘗試之後,無用

2.刪除anaconda環境變量

sudo gedit ~/.bashrc

註釋掉裏面的anaconda環境變量

我將anaconda註釋掉之後,依然在編譯是加入了1中的方法,編譯通過,繼續進行

關於刪除anaconda環境變量之後anaconda怎麼用的問題,參考了一篇博客的說法,在anaconda文件夾下的bin中執行你以前的操作即可

XXX@XXX-System-Product-Name:~/anaconda3$ bin/python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.3'
>>> import torch
>>> exit()

報錯3:

opencv-3.1.0/opencv_contrib/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: 沒有那個文件或目錄
compilation terminated.
modules/python2/CMakeFiles/opencv_python2.dir/build.make:285: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:19635: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/all' failed
make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

找不到hdf5.h,一通搜索之後,找到大神的解決方法: https://github.com/opencv/opencv/issues/6016

在opencv3.1.0/modules/python/common.cmake中添加:

find_package(HDF5)
include_directories(${HDF5_INCLUDE_DIRS})

報錯4:

 modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/build.make:290: recipe for target 'modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o' failed
make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] Error 1

出現與graphcuts.cpp有關的錯誤,這是因爲opencv3.1.0與cuda8.0的時間問題導致的,進入opencv-3.1.0/modules/cudalegacy/src/目錄,修改graphcuts.cpp文件,修改以下內容:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

爲: 

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

成功之後顯示: [100%] Built target opencv_python2

接着在終端執行make install

報錯6:

-- Install configuration: "Release"
-- Up-to-date: /usr/local/share/OpenCV/3rdparty/lib/libippicv.a
CMake Error at cmake_install.cmake:36 (file):
  file INSTALL cannot set permissions on
  "/usr/local/share/OpenCV/3rdparty/lib/libippicv.a"
Makefile:116: recipe for target 'install' failed
make: *** [install] Error 1

執行:sudo make install

成功顯示:

-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib"

撒花,撒花,撒花........

然而只完成了二分之一...........

接下來完成dense_flow的編譯,鏈接:https://blog.csdn.net/u014421797/article/details/102764694

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章