ラズパイ用なんですが・・
この本おもしろいです。Raspberry Piではじめる機械学習
夜な夜な、演習のファイルを、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って使えるのかな?そっちの移植は大変そうだけど。。
https://github.com/waveform80/picamera
https://www.pygame.org/
PyGameは使えそうですね。。PiGameじゃないんだ(笑)
http://www.pygame.org/docs/tut/CameraIntro.html
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 じゃんけんできます。
認識率の向上は果たして?? やってみると、わかります(笑)
コメントを残していただけるとありがたいです