【機械学習】Pinebookではじめる機械学習(PiCamraを使わないだけですが・・)【Raspberry Pi】

スポンサーリンク
広告

ラズパイ用なんですが・・

この本おもしろいです。Raspberry Piではじめる機械学習

【人工知能】Raspberry Pi ではじめる機械学習 じゃんけん・あやめ分類など【ディープラーニング】
Raspberry Piで機械学習 なかなか面白そうな企画ですよね。 Pythonについて知っていて、機械学習(DeepLearni...

夜な夜な、演習のファイルを、Pinebookに移植して遊んでいます。RasbianとUbuntuの差はあまりないので、ほぼそのまま動きます。

Sklearn(Scikit-learn)でハマったり、とかありますが、一番の違いは、ハードまわりというか、PiCameraを使う部分ですね

でももともと、OpenCVを使っているので、PiCameraがなくても、OpenCVの関数でやっていることを置換してあげると、ほんの少しの書き換えで動いてくれます

PiCameraでサイズ、FPSなどを調整して画像取り込むのをOpenCVの素のコードで書いたものを、ここに、おいて置きます。

import cv2
import picamera
import picamera.array
~~
with picamera.PiCamera() as camera:
 with picamera.array.PiRGBArray(camera) as stream:
 camera.resolution = (320, 240)
 camera.framerate = 15
 camera.awb_mode = 'fluorescent'
~~

とPiCamera専用なっているところを、OpenCVのVideoCaptureで置き換えているだけです

import cv2
~~
camera=cv2.VideoCapture(0) 
camera.set(cv2.cv.CV_CAP_PROP_FPS, 15)
camera.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320) 
camera.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240)
~~

あとは、少しこのあたりを変えるだけです

#camera.capture(stream, 'bgr', use_video_port=True)
 return_value,stream = camera.read()

とか

#hsv = cv2.cvtColor(stream.array, cv2.COLOR_BGR2HSV)
 hsv = cv2.cvtColor(stream, cv2.COLOR_BGR2HSV)

RaspberryPiを持っている人で、Webカメラ(USBカメラ)の人はこの方法で使えますね。。 Donkey CarをUSBカメラで作る時にも同じようなコードの変更をしています。あれはPyGameを使っているんで。。ひょっとしてPinebookもGPIOはRaspberry Piと同じなのでPyGameとかPiCameraって使えるのかな?そっちの移植は大変そうだけど。。

GitHub - waveform80/picamera: A pure Python interface to the Raspberry Pi camera module
A pure Python interface to the Raspberry Pi camera module - GitHub - waveform80/picamera: A pure Python interface to the Raspberry Pi camera module

PyGameは使えそうですね。。PiGameじゃないんだ(笑)

Pygame Tutorials - Camera Module Introduction — pygame v2.6.0 documentation

OpenCV使うまでもなことは、こっちの方が軽いかもしれませんね。

第8章の手の認識

この本の演習は、ほぼすべてのファイルが専用サイトからダウンロードできますが、この章の学習データ(手の写真)から作る学習済みのネットワークファイルが入っていませんので、自分でつくらないといけません。

$python ml-08-03-learn.py learnfile.pkl

というPythonプログラムを動かして作ります。学習済みファイルをここにおいておきますね。 learnfile.pklって名前つけたつもりが・・リーンになってますけど(笑)

ちなみに学習時間は、Pinebookでやると1分くらいで終わりました。Pine64はだいたいRaspberryPi3+くらいの性能です。

じゃんけん認識の結果は、こんな感じ。学生時代にPC98とかで回した学習が懐かしいですね。昔だったら1日がかりの計算が今や。。ボードPCでできるんですねぇ

認識は、どれだけうまく二値化できるか??で決まりそうです。

プログラム側でいじるより、背景を単色にして試すのがよさそうですね。

コードは、こちらに。。

第9章 じゃんけんシステム

さてさて、9章のじゃんけんシステム。じゃんけんの手を過去3回ほどパーセプトロンに覚えさせて次の手を予測させる。画像認識で手も認識しています。このプログラムとっても参考になります。Threadを使って認識系は別threadで動かすんですね。Pythonでこんなこともできる。

音は出ませんが。。Pinebook用に書き換えたものをここに置いておきます

あんまり手の認識率はよくないので、もどかしい感じですが、一応動きます。10章ではこれをDeeplearningで認識させるようになっています。どれだけ認識率があがるのか??おもしろそうです。

いやぁすごいですね。 NVIDIAのGPUでやるとか、FPGAでやるとかだと、そらできるやろうなぁ~って思うけど、Raspberry PiやPine64みたいな数千円のハードでここまでできるんですね。

第10章 Deep learning

あやめの学習は4分くらいでできましたが・・・・ 他は手書き文字4時間(確かにかかる)とか手の認識7時間とか、かかります。GPUがあるもので、少しどれくらい時間が短縮できるか?またやってみます

Kerasの学習済みデータが入っているので、それを使えるように、上と同じようにPinebookで動くように修正したファイルをおいておきます。

ml-10-08-hand-cnn-load-linux.py 手の認識だけです。

ml-10-09-janken-deep-linux.py  じゃんけんできます。

認識率の向上は果たして?? やってみると、わかります(笑)

コメントを残していただけるとありがたいです

Loading Facebook Comments ...
%d人のブロガーが「いいね」をつけました。