LoginSignup
4
12

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