はじめに
カメラや検出デバイスを使った画像処理や機械学習をラズパイとpythonで始めるために、これまで試行錯誤の上で安定化した環境構築方法をまとめておく。
手持ちのラズパイはPi2Bのため、USB接続のwi-fiモジュールを使っている。
基本環境
有線LAN接続できている前提で、基本環境を整備する。
日本語化
sudo dpkg-reconfigure locales
CUIで以下を選択し、了解する。
- en_GB.UTF-8 UTF-8
- ja_JP.EUC-JP EUC-JP
- ja_JP.UTF-8 UTF-8
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
sudo apt-get install uim uim-mozc
ClamAV
raspbianにも対応したウイルス対策ソフトClamAV。スキャンを自動にするにはcronで実行する必要がある。
sudo apt-get install clamav clamdscan
エディタ
emacsが好きなので、インストールする。
sudo apt-get install emacs
ユーザ追加、グループ追加
piユーザではセキュリティが気になるので、開発用のユーザを新規作成。NAMEにユーザ名を入力。
sudo adduser NAME
sudo gpasswd -a NAME sudo
sudo usermod -aG audio,video,plugdev,input,netdev,spi,i2c,gpio,dialout,cdrom NAME
パーティション拡張
raspi-config
でできるが、これはfdisk
でやった場合の参考。大容量SDカードを使用しても有効領域が狭い状態なのを解消する。
df -kh
sudo fdisk /dev/mmcblk0
p
d
2
p
n
p
2
w
sudo reboot
sudo resize2fs /dev/mmcblk0p2
最初のpで表示した2番めのパーティションのstartアドレスを指定し、何も入力しない。(デフォルトでOK)
NTP
時刻合わせ。
sudo apt-get install ntp
sudo emacs /etc/ntp.conf
/etc/ntp.conf
を編集し、日本のNTPサーバに変更。
...
...
# server 0.debian.pool.ntp.org iburst //コメント化
# server 1.debian.pool.ntp.org iburst //コメント化
# server 2.debian.pool.ntp.org iburst //コメント化
# server 3.debian.pool.ntp.org iburst //コメント化
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
...
...
sudo service ntp restart
ntpq -p
rpi-clone
SDカードのバックアップコマンドrpi-clone。容量が異なるSDカードにクローンすることが可能!
git clone https://github.com/billw2/rpi-clone.git
cd rpi-clone
手順はreadmeを見るのが一番だが、一応覚書。
カードリーダをUSBポートに差して、SDカードを挿入、fdisk
でデバイス名を確認。
sudo fdisk -l
クローンコマンドを実行し、対話的に設定を答えて実行し、しばらくすると完成。
sudo ./rpi-clone sda -f
以下のような、バックアップ用のスクリプトを作ると、いつの時点でクローンしたか、何を入力したかをログテキストで管理できる。
# !/bin/sh
dnow=`date +%Y%m%d-%H%M%S`
sudo ./rpi-clone sda -f | tee mkclone_${dnow}.log
echo '## Written install log to "mkclone_${dnow}.log"'
ネットワーク
wi-fi
SSIDとPWDは自宅のものを入力して暗号化情報を生成。
sudo sh -c 'wpa_passphrase SSID PWD >> /etc/wpa_supplicant/wpa_supplicant.conf'
cd /etc/wpa_supplicant/
sudo cp -p wpa_supplicant.conf wpa_supplicant.conf.ORG
sudo emacs wpa_supplicant.conf
/etc/wpa_supplicant/wpa_supplicant.conf
を編集。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
psk=???????????????????????????????????????????????????????????????
}
再起動すれば使えるようになる。
sudo /etc/init.d/networking restart
固定IP
DHCPでは嫌な場合の設定。IPアドレスは一例で、192.168.1.3に固定する場合。
cd /etc/network/
sudo cp -p interfaces interfaces.ORG
sudo emacs interfaces
/etc/network/interfaces
を編集。
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
# iface wlan0 inet manual
iface wlan0 inet static
address 192.168.1.3
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 192.168.1.1 <= これがないと外部アクセスできなくなる
再起動すれば固定IPになる。確認はifconfig
で。
sudo /etc/init.d/networking restart
http
一応LAMPサーバまで仕上げておく。
sudo apt-get install apache2 apache2-utils
mysql
一応LAMPサーバまで仕上げておく。
sudo apt-get install mysql-server libmysqlclient-dev
PHP
一応LAMPサーバまで仕上げておく。
sudo apt-get install php5 phpmyadmin
samba
ラズパイには基本的にリモートアクセスするので、windowsからファイルの読み書きなどができるようにしておく。
sudo apt-get install samba
sudo emacs /etc/samba/smb.conf
/etc/samba/smb.conf
を編集。
...
...
[global]workgroup = YourWorkGrp
...
...
[homes]
browseable = no
read only = no
create mask = 0640
directory mask = 0750
...
...
NAMEにはpiユーザや新規作成したユーザを入力。
sudo smbpasswd -a NAME
sudo /etc/init.d/samba start
ftp
基本はsambaやrcpだが、ftpも入れておく。
NAMEにはpiユーザや新規作成したユーザを入力。
sudo apt-get install pure-ftpd
sudo groupadd ftpgroup
sudo mkdir /home/NAME/FTP
sudo useradd ftpuser -g ftpgroup -s /sbin/nologin -d /dev/null
sudo chown -R ftpuser:ftpgroup /home/NAME/FTP
sudo pure-pw useradd upload -u ftpuser -g ftpgroup -d /home/NAME/FTP -m
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60puredb
VNC
重くなるのであまり使わないが、一応入れておく。
sudo apt-get upgrade realvnc-vnc-server realvnc-vnc-viewer
start VNC service
sudo systemctl start vncserver-x11-serviced.service
sudo systemctl enable vncserver-x11-serviced.service
stop VNC service
sudo systemctl stop vncserver-x11-serviced.service
sudo systemctl disable vncserver-x11-serviced.service
開発環境(ハード系)
IoTデバイスはI2CやSPI接続で使用する。
I2C
これができなくては話にならない。
sudo apt-get install i2c-tools python-smbus
fritzing
接続図作成用の神ソフトfritzing。ラズパイ上では使わないが、インストールはできることを確認した。
sudo apt-get inatall fritzing
開発環境(ソフト系)
開発言語は基本的にpython3を使用する。
subversion
使い慣れている構成管理ソフト。今どきはgitかも。。。
sudo apt-get install subversion
doxygen
ドキュメンテーションソフト。
sudo apt-get install doxygen
python
pythonがメインの開発言語になる。
sudo apt-get install python-pip python-dev
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib
sudo apt-get install libopencv-dev python-opencv
sudo apt-get install python-opengl
あとで削除することになるが、環境確認のためopencvのバージョンをチェック。
python -c "import cv2.cv as cv; print(cv.__version__)"
virtualenv
pythonの環境切り替え。入れてはいるがまだ使っていないため、デフォルトでpythonと打つとpython2になる。。。
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
~/.profile
を編集。
emacs ~/.profile
...
...
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
.profieをsourceして反映。
source ~/.profile
make "cv" workspace
mkvirtualenv cv -p python3
source ~/.profile
workon cv
picamera
picameraを使用する場合は必要。
sudo apt-get install python-picamera python3-picamera
sudo apt-get install python-picamera-docs
IoTの出力先の有力候補の一つ、twitter。pythonから情報を投げていけるよう、ライブラリを入れておく。あまたあるが、最初に引き当てたtwythonを選択した。
sudo pip install twython
sudo pip3 install twython
sudo pip install feedparser
sudo pip3 install feedparser
cffi
pythonからCの関数をコールするためのインターフェースライブラリcffi。ctypesでもできるが、記述のすっきりするのはこちら。
sudo apt-get install libffi-dev
sudo pip install cffi
sudo pip3 install cffi
sudo pip3 install smbus
requests
pythonのHTTPライブラリであるrequests。クラウドにアクセスする際も、なるべく汎用なライブラリでコードを書きたいので。
pip3 install requests
pip install requests
java
何かと使いそうなので、念のため。
sudo apt-get install oracle-java7-jdk
画像処理
opencv3
最新系のopencvは自分でコンパイルしてインストールする。現在は3.1.0までうまくいったが、3.2.0はNGだった。
sudo apt-get update
sudo apt-get upgrade
Remove default (old) OpenCV
sudo apt-get remove libopencv*
sudo apt-get autoremove
Install OpenCV 3.1.0
sudo apt-get install build-essential cmake cmake-curses-gui pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libeigen3-dev libxvidcore-dev libx264-dev libgtk2.0-dev
sudo apt-get -y install libv4l-dev v4l-utils
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3-dev python3-numpy
cd ~/download
wget -O opencv-3.1.0.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
wget -O opencv-3.1.0_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.1.0.zip
unzip opencv-3.1.0.zip
unzip opencv-3.1.0_contrib.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 OPENCV_EXTRA_MODULES_PATH=~/download/opencv_contrib-3.1.0/modules \
-D BUILD_EXAMPLES=ON ..
make
sudo make install
sudo ldconfig
python3 -c "import cv2 as cv; print(cv.\_\_version\_\_)"
imagemagick
画像処理、簡易画像ビューア。
sudo apt-get install imagemagick
以下のようなコマンドで、動作確認。
convert raspberrypi.png -resize 128x64 -gravity center -background black -extent 128x64 raspberrypi.ppm
movie tools
ffmpegの代替。
ffmpeg / avconv / mencoder all replaced.
libav-tools and mpv are the updated packages in Jessie:
https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=123442
sudo apt-get install libav-tools
sudo apt-get install openshot
tesseract-ocr + pyocr
日本語にも対応したOCRソフトtesseract-ocr。pythonから呼び出すラッパーはpyocrを選択。
apt-get install tesseract-ocr libtesseract-dev libleptonica-dev
tesseract -v
wget https://sourceforge.net/projects/tesseract-ocr-alt/files/tesseract-ocr-3.02.jpn.tar.gz
tar xvfz tesseract-ocr-3.02.jpn.tar.gz
cd tesseract-ocr/tessdata/
sudo cp jpn.traineddata /usr/share/tesseract-ocr/tessdata/
sudo pip install pyocr
sudo pip3 install pyocr
以下のように画像ファイルIMGを入力すると、文字が解析されてテキストファイルに保存される。
tesseract IMG out -l jpn
cat out.txt
音声処理
画像と同じく、音声も重要。
espeak
発話コマンド。英語のみ対応。。。
sudo apt-get install espeak
sudo apt-get install python-espeak
sudo apt-get install python3-espeak
こんな感じで、日本語っぽくもしゃべれるが。。。
espeak -g 20 -w a.wav "anata ga ill"
espeak -g 20 -w w.wav "watashi ga ill"
OpenJtalk
日本語を発話できるOpenJTalk。英単語がアルファベット読みになる。。。
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
sudo cp -r MMDAgent_Example-1.6/Voice/mei/ /usr/share/hts-voice
mplayer
開発環境ではないですが、ラズパイでインターネットラジオを聴きながら開発したいので。
sudo apt-get install mplayer
mplayer -playlist shoutcast_???.pls
プレイリスト(.pls)の取得ができるインターネットラジオは、例えばshoutcastがある。
機械学習
IoTとの連携で、理解を深めていきたい領域。
TensorFlow
最新版はtensorflow-on-raspberry-piをチェック。これは1.0.0の場合。
For Python 2.7
wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.0.0/tensorflow-1.0.0-cp27-none-linux_armv7l.whl
sudo pip install tensorflow-1.0.0-cp27-none-linux_armv7l.whl
sudo pip uninstall mock
sudo pip install mock
python -c "import tensorflow as tf; print(tf.__version__)"
For Python 3.3+
wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.0.0/tensorflow-1.0.0-cp34-cp34m-linux_armv7l.whl
sudo pip3 install tensorflow-1.0.0-cp34-cp34m-linux_armv7l.whl
sudo pip3 uninstall mock
sudo pip3 install mock
python3 -c "import tensorflow as tf; print(tf.__version__)"
keras
TensorFlowを使うなら、kerasがあると非常に使いやすくなる。
sudo pip install keras
sudo pip3 install keras
sudo apt-get install python3-numpy
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-h5py
場合によってはこっち(覚えてないが、pyenvを使ってた場合で、ラズパイではなくubuntuの時だったかと)。
pip3 install numpy
pip3 install scipy
pip3 install pandas
pip3 install h5py
pip3 install pillow
pip install numpy
pip install scipy
pip install pandas
pip install h5py
pip install pillow
Mecab
形態素解析エンジンMecab。pythonからも使えるようにします。
sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 python-mecab
sudo pip3 install mecab-python3
python3 -c "import MeCab; print(MeCab.__version__)"
Google Cloud SDK
日々進化しているGoogle Cloud PlatformのSDK。ただし、pythonではこのSDKを使わずにrequestsを使った実装を目指す。
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get apt-transport-https
sudo apt-get update
sudo apt-get install google-cloud-sdk