Macで深層学習の環境をさくっと作る手順 with TensorFlow and OpenCV

# はじめに

新しくMacBook Airを購入したので、これまで使っていたMacBook Airと同じ環境を構築するために必要な手順を整理します。
再セットアップをする時に困らないため自分用にメモしている感じですが、共有すると誰か他の人のためにもなるかもしれないと期待するところです。

# 主な手順

以下の順番でインストールします。

1. Xcode
2. pyenv
3. anaconda
4. autoconf、automake、libtool、CMake
5. OpenCV
6. TensorFlow

# Xcode

App Storeを起動してXcodeをインストール。

![スクリーンショット 2017-05-06 8.07.17.png](https://qiita-image-store.s3.amazonaws.com/0/114240/a2bf92b6-6d9c-f56b-28f9-4248cc168832.png)

# pyenvとanaconda

以下のスクリプトを作成して実行。
※ ここでは2017年5月6日現在の最新版4.3.1のanacondaをインストールします。

```sh:pyenv_installer.sh
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

echo 'if [ -f ~/.bashrc ] ; then' >> ~/.bash_profile
echo '. ~/.bashrc' >> ~/.bash_profile
echo 'fi' >> ~/.bash_profile

source ~/.bashrc

pyenv install anaconda3-4.3.1
pyenv rehash
pyenv global anaconda3-4.3.1

echo 'export PATH="$PYENV_ROOT/versions/anaconda3-4.3.1/bin/:$PATH"' >> ~/.bashrc
source ~/.bashrc
```

## XGBoost

以下のコマンドを実行します。

```sh:
conda install py-xgboost
```

## Jupyter Notebookの設定

IPAフォントをダウンロードします。

[IPAフォントのダウンロード](http://ipafont.ipa.go.jp/old/ipafont/download.html)

ダウンロード後、以下のスクリプトを作成して実行

```sh:jupyter_setup.sh
cd ~/Downloads
unzip IPAfont00303.zip
mv IPAfont00303/*.ttf ~/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/

jupyter notebook --generate-config
echo "c.NotebookApp.notebook_dir = u'notebook'" >> ~/.jupyter/jupyter_notebook_config.py
```

# autoconf、automake、libtool、CMake

以下のスクリプトを作成。

```sh:tools_installer.sh
cd ~/Downloads
curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
tar xzf autoconf-latest.tar.gz
cd autoconf-*
./configure --prefix=/usr/local
make && sudo make install

cd ~/Downloads
curl -fL http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz | tar xzf -
cd automake-*
./configure --prefix=/usr/local
make && sudo make install

cd ~/Downloads
curl -fL http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz | tar xzf -
cd libtool-*
./configure --prefix=/usr/local
make && sudo make install

cd ~/Downloads
curl -OL https://cmake.org/files/v3.8/cmake-3.8.1-Darwin-x86_64.tar.gz
tar xzf cmake-3.8.1-Darwin-x86_64.tar.gz
cd cmame-*
cp CMake.app /Applications/

ln -s "/Applications/CMake.app/Contents/bin/ccmake" /usr/local/bin/ccmake
ln -s "/Applications/CMake.app/Contents/bin/cmake" /usr/local/bin/cmake
ln -s "/Applications/CMake.app/Contents/bin/cmake-gui" /usr/local/bin/cmake-gui
ln -s "/Applications/CMake.app/Contents/bin/cmakexbuild" /usr/local/bin/cmakexbuild
ln -s "/Applications/CMake.app/Contents/bin/cpack" /usr/local/bin/cpack
ln -s "/Applications/CMake.app/Contents/bin/ctest" /usr/local/bin/ctest
```

管理者権限で実行。

```sh:
$ sudo sh tools_installer.sh
```

# FFmpeg

OpenCVで動画を扱うため、FFmpegをインストールします。
また、FFmpegのインストールに必要なpkg-configとyasmもインストールします。

```sh:ffmpeg_installer.sh
cd ~/Downloads
curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar xf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --with-internal-glib
make && make install

cd ~/Downloads
curl -LO http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make && make install

cd ~/Downloads
curl -LO http://www.ffmpegmac.net/resources/ffmpeg-3.3.1.tar.bz2
tar xf ffmpeg-3.3.1.tar.bz2
cd ffmpeg-3.3.1
./configure
make && make install
```

管理者権限で実行。

```sh:
$ sudo sh ffmpeg_installer.sh
```

# OpenCV

以下のスクリプトを作成。
※スクリプト中の[username]の部分はそれぞれの環境にあわせて書き換えて下さい。

```sh:opencv_installer.sh
cd ~/Downloads
git clone https://github.com/Itseez/opencv.git opencv
git clone https://github.com/Itseez/opencv_contrib.git opencv_contrib

cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_SHARED_LIBS=OFF \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D FFMPEG=ON \
-D PYTHON3_EXECUTABLE=/Users/[username]/.pyenv/versions/anaconda3-4.3.1/bin/python \
-D PYTHON3_INCLUDE_DIR=/Users/[username]/.pyenv/versions/anaconda3-4.3.1/include/python3.6m \
-D PYTHON3_LIBRARY=/Users/[username]/.pyenv/versions/anaconda3-4.3.1/lib/libpython3.6m.dylib \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/Users/[username]/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/numpy/core/include \
-D PYTHON3_PACKAGES_PATH=/Users/[username]/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python3=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib/modules \
..
make -j4
make install
```

管理者権限で実行。

```sh:
$ sudo sh opencv_installer.sh
```

# TensorFlow

以下のコマンドを実行。

```sh:
$ pip install tensorflow
```

# 動作確認

OpenCVとTensorFlowが読み込めるか確認。
エラーが出なければO.K.

```sh:
$ python
Python 3.6.0 |Anaconda 4.3.1 (x86_64)| (default, Dec 23 2016, 13:19:00) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import tensorflow as tf
>>> exit()
$ 
```

できた(^-^)

これで以下の記事のコードの動作環境が整います。

[「ある美女がどの大学にいそうかをCNNで判別する」という記事のコードをPython3系に移植してみる](http://qiita.com/mix_dvd/items/8e5d4c9703e3db6e3851)

# おまけ

Jupyter NotebookでRubyを使えるようにするiRubyもインストール。
以下のスクリプトを作成して実行。

```sh:iruby_installer.sh
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

echo 'export RBENV_ROOT="$HOME/.rbenv"' >> ~/.bashrc
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

source ~/.bashrc

rbenv install 2.4.1
rbenv rehash
rbenv global 2.4.1

gem install rbczmq
gem install iruby
gem install erector
iruby notebook
```

![スクリーンショット 2017-05-06 8.36.49.png](https://qiita-image-store.s3.amazonaws.com/0/114240/ce1bd268-46f8-d30b-2822-3886c5297ae0.png)

できた(^-^)

# もうひとつおまけ

jupyter notebookを起動した時に自動でSafariが立ち上がるようにするためには、設定ファイルに以下の1行を追加。

```py:
c.NotebookApp.browser = u'/usr/bin/open -a Safari %s'
```