raspi4B + cameraで画像認識してみる

Raspberry Pi 4Bの入手

ラズパイは、以下のスターターキットを購入しました。

 

カメラモジュールの入手

カメラモジュールは、ソニー製にしました。

LABISTS Raspberry Pi カメラモジュール V2 ソニーIMX219PQ CMOS画像センサ 8メガピクセル 4B、3B+、3B、2Bに対応可能

LABISTS Raspberry Pi カメラモジュール V2 ソニーIMX219PQ CMOS画像センサ 8メガピクセル 4B、3B+、3B、2Bに対応可能

そのほかに必要なもの

そのほかに以下が必要です。家にあったものを使いました。

  • USBマウス(無線)
  • USBキーボード(無線)
  • ディスプレイ(HDMI対応)
  • 無線LANルータ

 

ラズパイの組み立て

箱を開けるとクイックスタートガイドが付いていて、特に問題なく組み立てが完成しました。ざっくりと以下のような作業です。ドライバーも入っていました。

  1. ヒートシンクの貼り付け
  2. Raspiをケースにねじ止め
  3. ファンをケースにねじ止め
  4. ファンのケーブルをGPIO端子に接続
  5. ケースの蓋をする

4.のファン接続は、低冷却モードの3Vと高冷却モードの5Vがあります。とりあえず3Vの方に接続。

あとは、USBマウスとキーボード、ディスプレイをつなげて設置完了です。

ちなみに、カメラモジュールを接続する場合は、2.の前にやっておくことをオススメします。

 

ラズパイの初期設定

電源を入れると、ファンが「ジーーー」と聞こえるか聞こえないかぐらいの音で回り始めました。

最初は英語のまま、いくつか初期設定をします。

  • 言語の選択:日本語
  • 場所:日本
  • パスワード:必ず変えましょう
  • 無線LAN接続:SSIDから選択して接続

最後にソフトウェアアップデートのダウンロードが始まり、待つこと1時間以上!

ようやく完了して再起動すると、日本語バージョンのOSになりました。

 

カメラモジュールの接続

カメラ関係は、以下のサイトを参考にしました。

カメラモジュールをつけてみます。

ケーブルの端子への差し込み方も参考になりました。基板をケースにねじ止めする前にケーブルを差し込んでおくべきでした。指が入らず、ボールペンで端子の端っこを持ち上げることになってしまった。

また、ケーブルがケースに収まりにくくて若干苦労しました。

ファンと反対側に折り曲げて、USBやEtherのコネクタの上部にケーブルが来るようにして、最後は無理やり蓋をした感じです。

 

カメラ有効の設定

ケースに収まり、Raspiを起動。Raspiの設定アプリから、カメラを「有効」にします。

 

カメラの動作確認(記念撮影)

そして、コマンドラインから「vcgencmd get_camera」と入力して実行します。

supported=1 detected=1

と表示され、無事カメラが認識されたようです。

次に、「sudo raspistill -o image.jpg」と入力して実行すると、画面上にカメラ映像が表示されて5秒後に消えました。

フォルダの/home/piの直下に、image.jpgが保存されていて、ファイルを開くと、自分の横顔が写っている!

 

画像認識

以下のサイトを参考に、ソフトウェアのインストールと実行をしました。

karaage.hatenadiary.jp

 

上記サイトに記載されていたそのままを実行しました。

$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup && ./setup-ai.sh

15分ぐらいで インストールが完了。

そして、物体検出。

$ cd && git clone https://github.com/karaage0703/object_detection_tools
$ cd ~/object_detection_tools/models
$ ./get_ssdlite_mobilenet_v2_coco_model.sh
$ cd ~/object_detection_tools
$ python3 scripts/object_detection.py -l='models/coco-labels-paper.txt' -m='models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb' -d='raspi_cam'

 

無事にカメラが起動して、自分が写り、「Person 70.3%」とか表示されました!

こんなに簡単に物体検出までできて、感謝感謝です。

 

node.jsのWebサーバからPythonでファイルをダウンロード

<システム構成>

サーバ:node.jsのWebサーバ

クライアント:Python実行

 

<やりたいこと>

クライアントからサーバにあるファイルをダウンロードする。

今回は、クライアントとサーバは同じPC。

 

以下、参考にしたサイト。

qiita.com

 

www.shibuya24.info

 

 

pandasでデータの相関分析 Mac

統計の問題を Python で実際に計算してみる

[Python] pandasを使ってcsvファイルの読み込み

 

上記の記事を参考にして、試して見ます。

test.csv

95,-10,110
5,-40,108
60,5,100
100,-5,101
33,0,93
5,-10,91
0,0,88

 

sample.py

import pandas as pd
xxx = pd.read_csv('test.csv') #xxxは適当な変数

print (xxx) # 全カラムの出力

 

これでとりあえず実行してみる。

$ python sample.py 

    95  -10  110

0    5  -40  108

1   60    5  100

2  100   -5  101

3   33    0   93

4    5  -10   91

5    0    0   88

 test.csvのデータが出力された。

 

matplotlib をインストールする。

$ pip install matplotlib

 

色々と試してみた。

 

import seaborn as sns

import pandas as pd

import numpy as np

import matplotlib as mpl

import matplotlib.pyplot as plt

import scipy as sp

 

data = pd.read_csv("data2.csv", 

names=[

'Temp1', 'TempMax1', 'TempMin1', 'Rain1', 'Sun1', 'Wind1'

# 'Temp2', 'TempMax2', 'TempMin2', 'Rain2', 'Sun2', 'Wind2',

]

)

df2 = data.describe()

print(df2)

 

 

from pandas.tools.plotting import scatter_matrix

#plt.figure()

scatter_matrix(data)

plt.show()

plt.savefig("image.png")

 

# heat map

#sns.heatmap(sm)

 

 

df = data.corr()

 

print(df)

 

sns.heatmap(df,annot=True, fmt='.2f')

plt.show()

 

# 値を取り出す

temp = data.iloc[:,0].values

TMax = data.iloc[:,1].values

TMin = data.iloc[:,2].values

Rain = data.iloc[:,3].values

Sun  = data.iloc[:,4].values

Wind = data.iloc[:,5].values

 

# temp TMax の回帰式

slope, intercept, r_value, p_value, std_err = sp.stats.linregress(temp, TMax)

print(slope, intercept, r_value)

 

# temp Rain の回帰式

slope, intercept, r_value, p_value, std_err = sp.stats.linregress(temp, Rain)

print(slope, intercept, r_value)

 

気象庁ホームページから、気温などのデータを取得した。

気象庁|過去の気象データ・ダウンロード

 

f:id:marchantime:20180716211145p:plainf:id:marchantime:20180716211141p:plain

 

 

 

 

 

 

 

pandasでデータの相関分析 Mac (準備)

まずはpandasのインストールから。

brew install pyenv

でエラーが出たので、MacOSをHigh Sierraにアップデート。

f:id:marchantime:20180716115820p:plain

もう一度、pandasのインストール。

$ brew install pyenv

Warning: You are using OS X 10.13.

We do not provide support for this pre-release version.

You may encounter build failures or other breakage.

とのこと。

$ brew install python3

でも同じような結果になった。

brewのアップデート。。。

$ brew update

warning: unable to unlink .yardopts: Permission denied

warning: unable to unlink CONTRIBUTING.md: Permission denied

warning: unable to unlink SUPPORTERS.md: Permission denied

fatal: cannot create directory at '.github': Permission denied

Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

これもエラー。

 

$ cd $(brew --prefix)

$ pwd

/usr/local


$ sudo chown -R $USER $(brew --prefix)

$ sudo chown -R $USER $(brew --prefix)

chown: /usr/local: Operation not permitted

$ sudo chown -R $(whoami) $(brew --prefix)/*

としたらコマンドは通ったが解決していない。

macOS High Sierra で Ansible 入れようとしたら失敗した。

に書いてあったが、High Sierra では上記操作ができない。


$ git fetch --all

$ git fetch --all

Fetching origin


$ git reset --hard origin/master

$ git reset --hard origin/master

warning: unable to unlink .yardopts: Permission denied

warning: unable to unlink CONTRIBUTING.md: Permission denied

warning: unable to unlink SUPPORTERS.md: Permission denied

fatal: cannot create directory at '.github': Permission denied

 

本当は、chownを1つずつ実行すれば良かったらしいが、

brewの再インストールをしてしまった。。

 

brewを再インストール。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

再び、Python3をインストールを試す。

$ brew install python3

$ which python3

/usr/local/bin/python3

ようやくできるようになった。

 

$ brew install pyenv

$ export PYENV_ROOT="$HOME/.pyenv"

$ export PATH="$PYENV_ROOT/bin:$PATH"

$ eval "$(pyenv init -)"

バージョンチェック。

$ pyenv install --list

3.7.0が最新の様だった。

pyenvとは、複数バージョンのPythonを簡単に切り替えられるツールらしい。

$ pyenv versions

* system (set by /Users/masahiro/.pyenv/version)

  3.7.0

 

pipを使ってパッケージをインストールする。

$ easy_install pip

$ pip list

Package    Version

---------- -------

pip        10.0.1 

setuptools 39.0.1 

 

$ pip install pandas

Collecting pandas

Collecting python-dateutil>=2.5.0 (from pandas)

Collecting pytz>=2011k (from pandas)

Collecting numpy>=1.9.0 (from pandas)

Installing collected packages: six, python-dateutil, pytz, numpy, pandas

Successfully installed numpy-1.14.5 pandas-0.23.3 python-dateutil-2.7.3 pytz-2018.5 six-1.11.0

$ pip install scipy

$ pip install pyparsing

$ pip install freetype-py

$ pip install scikit-learn

$ pip install django

$ pip install tornado

 

$ pip freeze

Django==2.0.7

freetype-py==2.0.0.post6

numpy==1.14.5

pandas==0.23.3

pyparsing==2.2.0

python-dateutil==2.7.3

pytz==2018.5

scikit-learn==0.19.2

scipy==1.1.0

six==1.11.0

tornado==5.1

 

よし、これで準備が出来た。

 

人工知能って何ができるの?

最近流行りの人工知能

人工知能がどんなものなのか、イメージをつけるためにまずは使ってみます。

 

2015年11月にGoogleが公開した、DeepLearningのライブラリ「TensorFlow」を選びました。選んだ理由としては、一番メジャーなので。

https://9to5google.files.wordpress.com/2015/11/tensorflow-lead.jpg

Macを使っているので、

Mac OS XにTensorflowをインストールして、Hello worldまでやってみる - ワタナベ書店

を参考にしてやってみます。

 

OSXのVirtualenv(仮想環境モジュール)上に、TensorFlow環境を構築

・TensorFlow環境に入るには、$ source ~/tensorflow/bin/activate

・実行するには、$ python helloworld.py でHelloWorldが実行できる

・元の環境に戻るには、(tensorflow) $ deactivate

 

簡単にできました。

 

次は、画像認識をやってみます。

ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換) - Over&Out その後

を参考にします。

 

・MNISTのチュートリアルスクリプトを実行 →dataディレクトリが生成

・TensorBoardで学習状況を可視化 →学習回数と不正解のグラフを表示

 

ができました。

 

ここまでは簡単にできました。プログラムの内容を理解していないので、TensorFlowで何ができるのか、今の時点では良く分かりません。

色んな事例を探して、勉強してみます。

 

 

MacでMQTTを体験

Raspberry PiにMQTT Brokerをインストール - Qiita

がやりたいが、まずはMacでMQTTを動かしてみる。

 

MQTTの挙動をMacで確認する - 発熱するマイナ魂

を参考にしました。

 

 

まずは、Mosquitto Brokerのインストール

sudo xcodebuild -license

でライセンス契約にagree。

$ brew install mosquitto

を実行して、

🍺  /usr/local/Cellar/mosquitto/1.4.2: 28 files, 700K

とインストールが完了した。

 

次に、Publisher/Subscriberの準備

$ git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git
$ cd org.eclipse.paho.mqtt.python.git
$ sudo python setup.py install

でgit clone。

サンプルプログラムを作成。

 

そして、動作確認。

ターミナル1 (Broker) メッセージを集める人

$ /usr/local/opt/mosquitto/sbin/mosquitto


ターミナル2 (Subscriber) メッセージを読む人

$ python subscriber.py


ターミナル3 (Publisher) メッセージを送る人

$ python publisher.py

 

動作結果
ターミナル2に以下が表示された。成功。

topic/hoge hello world!