OpenCV
python3
xubuntu
Python2
ubuntu16.04

Xubuntu16.04の環境構築の個人的まとめ(python2系3系の分離, OpenCV)

Xubuntu16.04を入れてからの環境構築方法

Xubuntu16.04をインストールした際の自分用のメモ.
Xubuntuを入れた際に個人的にまず入れるものと, python2系と3系を仮想環境を使うことでうまく使い分けるための方法, 更にはハマるとやばいOpenCV3のインストール方法を中心にまとめました.
多分, XubuntuはUbuntuとデスクトップ環境が違う点以外システム的にはほとんど変わっていないので, Ubuntu16.04にもほぼ適応できる環境構築法だと思います.

環境

Xubuntu16.04

まず準備すべきもの

  • パネルの設定やウィンドウの設定
  • Slack
  • Dropbox: アイコンがうまく表示されない問題あり.ここを見ると良い.
    【補足】
    上のサイトを参考にすると, 自動開始アプリケーションとして「Exec=env DBUS_SESSION_BUS_ADDRESS="" dropbox start -i 」とデフォルトの「dropbox start」の2つが登録されてしまう. そのため, 前者のコマンドが時間的に早く自動開始された場合にはうまくいくが, 後者が早い場合にはアイコンは元のままになってしまう. そこで,このサイトの3つ目の回答を参考にするとよい. これはdropboxの本体コード/usr/bin/dropboxに以下の要素を書き加えるという解決法である. これによって起動時のコマンドとしてExec=env DBUS_SESSION_BUS_ADDRESS=""を加えなくてもプログラム内でそれが定義されるので良くなる.
os.environ['DBUS_SESSION_BUS_ADDRESS'] = ""
$ sudo add-apt-repository ppa:indicator-multiload/stable-daily
$ sudo apt-get update && sudo apt-get install indicator-multiload

Python3(venv)

python3のvenvを利用することで仮想環境構築.

$ python3 -m venv ~/.python_venv_3
$ echo 'VIRTUAL_ENV_DISABLE_PROMPT=1' >> ~/.bashrc
$ echo 'source ~/.python_venv_3/bin/activate' >> ~/.bashrc
$ source ~/.bashrc

Python2(venv)

pyhton2が使いたくなる場合のために, python2でもvenvで環境構築を行う. まずデフォルトのpythonにする必要がある. python3(venv)の場合には, deactivate後に,

$ which python
>> /usr/bin/python

となっていることを確認.

$ pip install virtualenv
$ sudo apt install virtualenv
$ virtualenv ~/.python_venv_2
$ source ~/.python_venv_2/bin/activate

でpython2でのvenv環境が構築できる. python2はほとんど使わないので自分が使う場合には

source ~/.python_venv_2/bin/activate

を使って仮想環境に切り替えてる.

porg

make installといった野良ソースコードのインストールを管理. これを入れないとソースコードからコンパイルしたプログラムの更新やアンインストールがごちゃごちゃになるのですごく重宝してる.

$ wget http://downloads.sourceforge.net/project/porg/porg-0.8.tar.gz
$ tar xzvf porg-0.8.tar.gz
$ cd porg-0.8
$ ./configure --disable-grop
$ make && make install
$ make logme #自身を管理

使い方

make install時に以下のように使うことによってパッケージ管理.

$ porg -lD make install
$ porg -lp <package_name> make install

パッケージ一覧の確認

$ porg -a

パッケージのメタ情報を確認

$ porg -i <package_name>

パッケージの全ファイルを表示

$ porg -f <package_name>

パッケージの削除

$ porg -r <package_name>

numpy,scipy,matplotlib

まあ必要でしょう.

$ sudo apt-get install python python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib

OpenCV3 (for python3)

python3でopencv3を利用する形でインストール. python3のvenv環境を整えた後に行う.
まず依存ライブラリのインストールを行う.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python2.7-dev python3.5-dev
$ pip install numpy

opencv本体のダウンロード.

$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.1.zip
$ unzip opencv.zip

opencv_contribのダウンロード.(SIFTとか使いたい場合)

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.1.zip
$ unzip opencv_contrib.zip

ビルドを行う. cmakeの引数は一例です.

$ cd ~/opencv-3.3.1/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D INSTALL_C_EXAMPLES=ON \
  -D BUILD_WITH_DEBUG_INFO=ON \
  -D BUILD_TESTS=ON \
  -D WITH_OPENCL=ON \
  -D WITH_OPENGL=ON \
  -D WITH_CUDA=OFF \
  -D WITH_LAPACK=OFF \
  -D WITH_EIGEN=ON \
  -D WITH_MATLAB=OFF \
  -D OPENCV_EXTRA_MODULES_PATH=~/Makelist/opencv_contrib-3.3.1/modules \
  -D PYTHON_EXECUTABLE=~/.python_venv_3/bin/python \
  -D BUILD_opencv_python2=OFF \
  -D BUILD_EXAMPLES=ON ..
$ make -j3
$ sudo porg -lp opencv3 make install #porgを使ったパッケージ管理

この後に,pathを通す必要がある.

$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
$ cd ~/.python_venv_3/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

なお, cmakeした時のpythonを認識している箇所の正しい例は以下のようになる(今回はpython3).特にこの部分が正しくないとpathを通すためのcv2.soが生成されない. 個人的にはpython3にpipでnumpyを入れ忘れ, 詰まった経験が何度かある.

--
--   Python 2:
--     Interpreter:                 NO
--
--   Python 3:
--     Interpreter:                 /home/kmmasaya/.python_venv_3/bin/python3 (ver 3.5.2)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.2)
--     numpy:                       /home/kmmasaya/.python_venv_3/lib/python3.5/site-packages/numpy/core/include (ver 1.13.3)
--     packages path:               lib/python3.5/site-packages
--
--   Python (for build):            /home/kmmasaya/.python_venv_3/bin/python3
--

また, porgを使っているので, もしOpenCVのインストールにミスったり, 違うバージョンを入れたいなど, OpenCVをアンインストールしたい場合にはporgを用いて以下のコマンドを使えば簡単にアンインストールできる. これで何回でも失敗できるぜ.

sudo porg -r opencv3

OpenCV3 (for python2)

上でソースコードインストールしたOpenCV3について設定をうまくすればpython3だけじゃなくてpython2でも利用できるのかもしれないが, 今回は安牌を取って, python2(venv)でもopenCV3を使いたい場合に関してはpipで入れている.非公式なopencv-pythonが存在するのでこれを利用.
まずpython2に環境を切り替えていることを確認.

$ source ~/.python_venv_2/bin/activate
$ which python
>> ~/.python_venv_2/bin/python

そして以下のようにpipで簡単にインストール.

$ pip install opencv-contrib-python