はじめに
カメラや検出デバイスを使った画像処理や機械学習をラズパイと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
##twitter
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