1. 程式人生 > >linux下安裝python dlib依賴

linux下安裝python dlib依賴

linux下安裝python dlib依賴

轉:https://www.cnblogs.com/freeweb/p/7699996.html

  dlib是主要用於機器學習的庫,封裝了機器學習演算法,可以非常方便的實現比如人臉識別,車輛識別,物體檢測以其他很多功能,dlib預設使用C++進行開發,另外影象識別有一部分支援python介面開發,上手非常快,因為對於系統的安裝過程,都來自官方文件的拼湊,網上資料很少,對新手會有一些坑,所以這裡主要說一下python依賴介面的安裝,伺服器環境centos7.3,python版本2.7,下面是所有的依賴以及安裝順序:

  1. pip python模組,下載地址:https://pypi.python.org/pypi/pip

  2. cmake編譯工具  之前文章有詳細的安裝過程

  3. Boost.Python  boost是一款非常流行的C++類庫,封裝了非常多好用的工具,Boost.Python其中一個元件,主要封裝了python和C/C++之間通訊的API,比預設的python api更完善,dlib基於這個依賴進行互動,所以這裡需要編譯boost.python依賴

  4. dlib python模組,前面環境都準備完畢,最後一步就是編譯並安裝dlib python擴充套件了

  dlib python模組執行安裝時,過程是會基於cmake編譯工具和Boost.Python工具對dlib原始碼進行編譯,最後將二進位制模組編譯至python庫目錄下,然後python就可以呼叫了,那下面開始安裝

  1. pip模組

  pip模組從上面網址下載下來,解壓開,直接執行python setup.py install即可,和普通模組安裝一樣,沒什麼說的

  2. cmake編譯工具

  參考之前的文章 http://www.cnblogs.com/freeweb/p/5788729.html 安裝即可;如果沒有cmake工具,在安裝dlib時也會給出提示

  3. Boost.Python

  如果沒有boost python依賴,那麼下一步編譯dlib時,會給出明確的提示和操作步驟,如下:

  

  步驟其實都給出來了,按上面的步驟安裝即可,下面是具體過程:

  3.1.  下載boost庫

  boost官網:http://www.boost.org/,點選右側的最新版下載即可:

  

  我這裡下載的是:boost_1_65_1.tar.bz2 大小80M左右

  3.2. 安裝boost庫

  下載之後開始安裝,首先解壓安裝包:

tar -jxvf boost_1_65_1.tar.bz2
cd boost_1_65_1/

  然後按照上面圖片的步驟和官網文件的步驟安裝:

./bootstrap.sh --prefix=/monchickey/boost --with-libraries=python
./b2
./b2 install

  上面的引數解釋:

      1. --prefix是指定安裝的位置,如果不加預設是安裝在/usr/local和系統庫混合,這樣後面比較省事,但是手動指定目錄便於對庫進行管理,不過後期要配置一些東西,下面會說到.

      2. python支援編譯:--with-libraries=python 這裡意思是僅安裝python的庫,其餘的都不安裝,對於dlib來說就是夠用即可,但是如果需要編譯全部庫--with-libraries引數需要留空,也就是不加,文件中具體有寫到,此時編譯python要使用--with-python引數來專門指定,python2只使用引數:--with-python=python即可,其餘的都預設,python3要使用--with-python=PYTHON3_HOME以及其他引數都指定詳細,另外有篇文章是專門編譯python3的,可以參考;

     根據上面說的,如果需要編譯boost全部依賴以及python 2.x的話,則使用下面的命令:

./bootstrap.sh --prefix=/monchickey/boost --with-python=python
./b2 && ./b2 install

     上面編譯和安裝過程需要等待挺長時間,完了之後進入安裝目錄,會看到只有兩個目錄,一個是include主要是存放標頭檔案和原始碼檔案,另一個是lib,也就是我們編譯好的python相關依賴,如下(備註: 這裡因為僅編譯python庫, 所以比較少):

  

  到這裡boost.python依賴就算安裝完成了

  4. 最後編譯dlib python模組

  dlib庫官網地址:http://dlib.net/ml.html 進入後點擊左下側按鈕直接下載即可:

  

  這裡下載的是:dlib-19.7.tar.bz2,首先在指定位置解壓:

tar -jxvf dlib-19.7.tar.bz2
cd dlib-19.7/

  進入目錄後會看到setup.py,如果上面boost.python安裝到系統目錄下的話,那麼現在直接安裝應該就可以了,如果是自定義目錄,這時候安裝仍然會報錯提示找不到boost python庫,其實是cmake找不到boost,這時候先不要急著配置系統庫建軟鏈,而是要配置環境變數,目的是讓cmake找到boost即可,首先執行 vim /etc/profile 然後在最後一行加上: export BOOST_ROOT=/monchickey/boost 指定boost根目錄,如下:

  

  配置好之後,執行 source /etc/profile 使環境變數生效,接下來就可以執行安裝了:

python setup.py install --yes USE_AVX_INSTRUCTIONS

  這裡後面加這個引數是為了支援CPU AVX指令集,這樣可以提升程式執行的效能,目前一般CPU都支援;等一會就安裝完成了,安裝完成之後執行 python 進入互動式介面,輸入 import dlib 如果正常就成功了,不過如果boost庫安裝的不是預設目錄,仍然會出問題即libboost_python.so找不到的錯誤,原因是匯入編譯好的dlib模組時,同時dlib執行時又會載入boost.python庫,這時候系統搜尋不到所以會報錯,這和剛才cmake報錯是不同的,這個時候不要將剛才的boost庫檔案放到python庫下面,只有編譯成可以被python直接呼叫的庫才放在python目錄下面,而基於C的python庫,執行時依賴的是系統庫搜尋路徑,應該是/usr/lib,/usr/lib64這些,所以這時候解決方法有以下兩種:

  1). 將/monchickey/boost/lib中的so模組建立軟連結到/usr/lib64下面

  2). 利用配置檔案/etc/ld.so.conf載入新的庫搜尋路徑

  這裡使用第二種方法,首先執行 vim /etc/ld.so.conf.d/boost.conf 新建配置檔案,然後加入一行:/monchickey/boost/lib 儲存並退出,

  然後執行命令: ldconfig 使配置生效,這樣指定的連結庫就被加到執行時搜尋目錄了

  現在再次匯入dlib模組就正常了