4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi + python + IoTデバイスで、画像処理や機械学習を始めるための環境構築手順

Last updated at Posted at 2017-09-12

はじめに

カメラや検出デバイスを使った画像処理や機械学習をラズパイと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サーバに変更。

/etc/ntp.conf
...
...
#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

以下のような、バックアップ用のスクリプトを作ると、いつの時点でクローンしたか、何を入力したかをログテキストで管理できる。

mkclone.scr
#!/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
SSIDPWDは自宅のものを入力して暗号化情報を生成。

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を編集。

/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を編集。

/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を編集。

/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

~/.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 PlatformSDK。ただし、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
4
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?