Raspberry Pi 人工知能ツールをインストール【Python3】

Raspberry Piを利用して人工知能ツール（深層学習ライブラリ・自然言語処理ライブラリなど）を利用する手順をまとめてみます。

## 環境

- RASPBIAN JESSIE WITH PIXEL 4.4
- Python 3.4.2
- tensorflow-0.12.1
- Keras-1.2.1
- opencv-3.1.0
- MeCab 0.996
- mecab-ipadic-neologd
- gensim-0.13.4.1
- Open JTalk Version 1.07

## RaspbianとPython3系のインストール

Raspbianの最新版を公式ページよりダウンロードしSDカードへ。Python3系は依存関係を簡単にする為`apt-get`を利用してインストールします。

```bash
$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev
```

## Tensorflowのダウンロード

公式パッケージは公開されていないので、以下のレポジトリよりダウンロードします。

[samjabrahams/tensorflow-on-raspberry-pi - GitHub](https://github.com/samjabrahams/tensorflow-on-raspberry-pi)

解説記事はこちらを参考にして下さい。

[TensorFlowをRaspberryPIにインストールする手順 - Qiita](http://qiita.com/mix_dvd/items/6b38859148a988c3fe06)

```bash
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0.12.1/tensorflow-0.12.1-cp34-cp34m-linux_armv7l.whl
$ sudo pip3 install tensorflow-0.12.1-cp34-cp34m-linux_armv7l.whl
```

## Kerasインストール

Kerasは`pip`を利用してインストールします。

```bash
$ sudo pip3 install keras
```
Tesnorflowをバックエンドで指定する`json`ファイルを用意します。

```json:~/.keras/keras.json
{
    "image_dim_ordering": "tf", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "tensorflow"
}
```

実行してみます。

```bash
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>> 
```
`import`してエラーが出なければ無事インストールしています。

## Pythonの依存ライブラリをインストール

深層学習で利用するライブラリは`apt-get`でインストールすると時間短縮になります。

[Raspberry Pi 2 でDeepDreamを動かしてみた - 電脳あざらしの泳ぎ Raspberry Pi別館](http://azarashi55.hatenablog.com/entry/2015/07/31/032620)

```bash
$ sudo apt-get install python3-numpy
$ sudo apt-get install python3-scipy
$ sudo apt-get install python3-pandas
$ sudo apt-get install python3-h5py
```

特に`h5py`を`pip`でインストールすると非常に時間が掛かるのでこちらの方法がオススメです。これらをインストールすることにより、Macなどで学習させたモデルのファイル

![Monosnap 2017-01-29 10-44-46.png](https://qiita-image-store.s3.amazonaws.com/0/47128/16f26e0e-2c82-8f0b-f053-615d51363bee.png)

`.h5`ファイルをRaspberryPiで読み込むことが出来ます。

## OprnCV3をインストール

`anaconda`でインストール出来れば良いのですが、ARMv7版は対応していないのでソースをダウンロードし、コンパイルしなければなりません。（RaspberryPi3で2時間位掛かります）

以下の海外記事の手順通りに行います。

[Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3 - PyImageSearch](http://www.pyimagesearch.com/2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/)

日本語の解説記事はこちらを参考にして下さい。

[Raspberry Pi 3にOpenCV 3.1のインストール - TomoSoft](http://tomosoft.jp/design/?p=7476)

上記記事のコマンドを転記させて頂きます。

```bash
$ sudo apt-get install build-essential cmake pkg-config
$ sudo apt-get install libjpeg-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 libgtk2.0-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip opencv.zip
$ cd ~/opencv-3.1.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
$ make -j4
$ sudo make install
$ sudo ldconfig
```
インストールが完了したらテストしてみて下さい。

### 追記（2017/5/22）

コード間違いを修正しました。

```bash
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> 
```
`import`してみてエラーが出なければ無事インストール出来ています。

デフォルトのカスケード分類器（例えば顔認識の分類器`haarcascade_frontalface_default.xml`）を利用したい場合

![Monosnap 2017-01-29 10-57-21.png](https://qiita-image-store.s3.amazonaws.com/0/47128/368c9a6c-298a-a200-c245-2650bfe7e14d.png)

`/usr/local/share/OpenCV/haarcascades`フォルダに格納されています。こちらのパスを指定するか、任意のディレクトリにコピーするかして利用出来ます。


## Mecabのインストール

以下記事を参考にワンライナーでインストール可能です。

[Raspberry Pi で形態素解析をやってみる（前編） - uepon日々の備忘録](http://uepon.hatenadiary.com/entry/2016/07/01/000643)

```bash
$ sudo apt-get update
$ sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 python-mecab
```
テストしてみます。

```bash
$ mecab
すもももももももものうち
すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
```

無事インストールされました。デフォルト辞書は`/var/lib/mecab/dic/ipadic-utf8`に格納されます。

固有名詞抽出の精度を高めるために`mecab-ipadic-neologd`を使います。

[neologd/mecab-ipadic-neologd - GitHub](https://github.com/neologd/mecab-ipadic-neologd)

RaspberryPiでは展開が出来ないので、Macなどで展開した辞書をZipファイルにします。

![](https://qiita-image-store.s3.amazonaws.com/0/47128/aff028c2-de4d-d26f-464c-5e2af7c74ee1.png)

ここではホームディレクトリに`dic.zip`としてFTPソフトを利用してアップロードしました。

```bash
$ unzip dic.zip
$ mv -v /home/pi/dic/mecab-ipadic-neologd /var/lib/mecab/dic/mecab-ipadic-neologd
```
解凍した辞書をデフォルトの辞書と同じフォルダに移動します。これで`mecab-ipadic-neologd`を利用出来ます。

```bash
$ mecab -d /var/lib/mecab/dic/mecab-ipadic-neologd
攻殻機動隊
攻殻機動隊	名詞,固有名詞,一般,*,*,*,攻殻機動隊,コウカクキドウタイ,コウカクキドータイ
EOS
```

## gensimをインストール

gensimは`pip`でインストール出来ますので、Word2Vecが利用可能です。

```bash
$ sudo pip3 install ginsim
```
テストしてみます。

```bash
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gensim.models import word2vec
>>> 
```

無事`import`出来ました。試しに映画「攻殻機動隊」の台詞を元に作成したモデルを使ってみましょう。

![Monosnap 2017-01-28 21-24-41.png](https://qiita-image-store.s3.amazonaws.com/0/47128/7acdd437-b46a-3b8a-f0dc-9f9cf6186e80.png)

FTPソフトを利用しアップロード解凍し、任意のディレクトリに移動します。

```bash
$ unzip kokaku.model.zip
$ mv -v /home/pi/kokaku.model /home/pi/word2vec/kokaku.model
```

モデルを利用してテストしてみます。

```bash
~/word2vec $ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gensim.models import word2vec
>>> model = word2vec.Word2Vec.load('kokaku.model')
>>> answer = model.most_similar(positive=['人形使い'])
>>> print(answer)
[('こと', 0.4652143120765686), ('ところ', 0.4647933542728424), ('の', 0.4600028097629547), ('課', 0.4548775553703308), ('部長', 0.4542877972126007), ('義体', 0.43155333399772644), ('わけ', 0.43044525384902954), ('回収', 0.4292528033256531), ('ネット', 0.422966867685318), ('記憶', 0.4185473620891571)]
>>> 
```

モデルを元に単語の類似度を抽出できました。

---

ここからはおまけです。作成した日本語を発話させてみます。

## Open JTalkのインストール

以下の記事を参考にします。Raspbianでも同じ方法でインストール出来ます。

[OpenJTalk + python で日本語テキストを発話 - Qiita](http://qiita.com/kkoba84/items/b828229c374a249965a9)

上記記事のコマンドを転記させて頂きます。

```bash
$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
$ wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip/download -O MMDAgent_Example-1.6.zip
$ unzip MMDAgent_Example-1.6.zip MMDAgent_Example-1.6/Voice/*
$ sudo cp -r MMDAgent_Example-1.6/Voice/mei/ /usr/share/hts-voice
```
テストしてみます。

```text:hello.txt
こんにちは
```
```bash
$ open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -r 1.0 -ow hello_jtalk.wav ~/hello.txt
```
テキストからwavファイルを生成します。

```bash
$ aplay hello_jtalk.wav
再生中 WAVE 'hello_jtalk.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
```
`aplay`コマンドで再生出来ました。Python3で利用するときは、`subprocess`モジュールのパイプコマンドを利用して、wavファイル生成→再生します。

音響モデル`.htsvoice`を指定する場合（例えば「メイ」ちゃんのノーマルボイスを使用したい場合）

![Monosnap 2017-01-29 11-32-15.png](https://qiita-image-store.s3.amazonaws.com/0/47128/e45c4ad5-48e5-d8a3-4a56-5e9dd1ad5b31.png)

`/usr/share/hts-voice/mei`に格納されています。男性ボイスや有志が作った音響モデルを利用する際は任意の場所に格納してパスを指定してください。

## まとめ

最近こんな記事（[グーグル、「Raspberry Pi」向けAIツールを提供へ](http://japan.cnet.com/news/service/35095490/)）を目にし、今のところ使えそうなライブラリをまとめてみました。

学習済み辞書や、学習済みモデルを出来る限りコンパクトにまとめれば、RaspberryPiでも結構色んなことが出来るかもしれません。（さすがに1.2GBのWikipedia辞書モデルの読み込みはエラーになりましたが）

5千円位の手の平サイズPCで人工知能が動くって、なんか凄い未来な感じですね。

それでは皆様良き人工知能ライフを。