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模組就正常了