忍者ブログ

設備のマニアどっとこむ

設備、電子工作、DIYのブログ!

11/18

Sun

2018

ラズパイでビットコイン相場の監視

最近はじめたマイニングなんですが、ビットコインの調子がよろしくなく・・。
先日も1ビットコインあたり70万を推移していたのが、急に62万円まで急落。
なかなか厳しい状況が続いています・・。

そんなこんなでビットコイン相場の監視をすることにしました。
1ビットコイン何ドルかを定期的に出力しているAPIがあるのでそれを利用してます。
import poloniex
import smbus
import time
polo = poloniex.Poloniex()
polo.timeout = 2
chartUSDT_BTC = polo.returnChartData('USDT_BTC', period=polo.DAY, start=time.time()-polo.DAY*500, end=time.time())
print(chartUSDT_BTC[-1]['open'])
import requests
import json
SLACK_URL = "https://hooks.slack.com/services/トークンを取得してください"
def send_slack():
    content = chartUSDT_BTC[-1]['open']
    payload = {
        "text": content,
        "icon_emoji": ':snake:',
    }
    data = json.dumps(payload)
    requests.post(SLACK_URL, data)
send_slack()

このままではpoloniexがimportエラーになってしまうので下記コマンドでダウンロードします。

pip3 install https://github.com/s4w3d0ff/python-poloniex/archive/v0.4.6.zip

このpythonファイルをcrontab -eで定期的に吐き出していきます。
※やり方はこちら
1分に1度ファイルを動作させているのですが、ビットコインの更新は5分に1回です。
slackでは下記の様になります。


ちょっとドル表示なのでピンと来ないのですが、監視することができました。
んー年末に上がるとの予測でしたが、どうも極端に下がった時に購入したほうがいい気がしました。
ビットコインを持っている人は意外と手放さずじっと上がるのを待っているのかも(特にマイナーは・・)
うまく応用すれば大きく下がった時アラームを出して、その時購入→じわじわ戻した時に売るのがベストかも。
もしちょうどいいAIがあれば予測モデルでも作るのですが。 

ちょっとオープンソースAIでは無理かな~  機会があれば頑張ります!







拍手[0回]

PR

11/04

Sun

2018

みちびき衛星サービス開始! GPSモジュールの精度は上がるか!?

国産の測位衛星サービス「みちびき」が今月から本格サービス開始したらしい。

ラズパイにGPSモジュールをつないで自作androidアプリで位置を確認した話


以前にラズパイで使ってみたものの、けっこう誤差あるなあ・・・という印象でした。
衛星が4機になり、数十センチの誤差になったそうな。ホント??


秋月で買ったGPSモジュールを再度ひっぱりだして検証してみた。
いまだに外に出て5~10分くらいは衛星探すのは変わらず。



道路で測定したが建物になってしまった。まだまだ5mくらいは誤差あるのかな…

ただし、前回使用時よりは感度が良くなった気がします。

将来的にはドローンにでも乗せて遠隔操作したいところですね・・。






拍手[0回]

09/30

Sun

2018

raspberry piでAIを使う

スペックに制限のあるラズパイでも工夫すればAIを使うことはできます。
まずAIライブラリをThonnyなどで使うのがかなりきついのでjupyter notebookを入れます。
これでブラウザでpythonを軽めに?動かすことができます。
sudo apt-get install build-essential python-dev
sudo pip install jupyter
sudo apt-get install libpng12-dev libjpeg8-dev libfreetype6-dev libxft-dev liblapack-dev libatlas-base-dev gfortran g++


インストールが済んだら jupyter notebookとコマンドを打てば起動します。

しかしそのままではログインできないので password or tokenというところに 
token= 以下をコピペして進んでください。


トークンはコマンド打ってすぐのやつです。何個か出てくるので注意!


そこから右上のNEW→pythonで新規作成できるのですが、python2のみになっている場合は 
下記コマンドで解決できます。


python3 -m IPython kernelspec install-self

あとはwindowsでもラズパイでも変わりません。

下記コードで以前のこの記事の手書き数字画像の判別ができます。
画像データはフルパスが好ましいですが home/pi/直下であれば動かせます。
※ちなみに、
sklearn、numpyのインポートは必要ですがopenCVはjpg→png変換に使用しているだけで
必須ではありません。


from sklearn import datasets, cross_validation, svm, metrics
import numpy as np
from PIL import Image
import cv2

digits = datasets.load_digits()

im_gray = cv2.imread('test6.jpg')
cv2.imwrite('my_photo.png', im_gray)
label_test = [6]
image = Image.open('my_photo.png').convert('L')
image = image.resize((8, 8) Image.ANTIALIAS)

img = np.asarray(image, dtype=float)
img = np.floor(16 - 16 * (img / 256))


img = img.flatten()
data_train = digits.data

label_train = digits.target
data_test = img

clf = svm.SVC(C=1.0, cache_size=200, class_weight=None, coef0=1.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
clf2 =data_test.reshape(1,-1)
clf.fit(data_train, label_train)


predict = clf.predict(clf2)

print(data_test)
print(clf2)
print(clf)
print("テストラベル=",label_test)
print("解析結果=",predict)
ac_score = metrics.accuracy_score(label_test, predict)
print("正解率=", ac_score*100, "%")

これでラズパイで手書きデータを判別することができました。
AI関連のライブラリはリソースが必要と思われがちですが、大量のデータのディープラーニングでもやらない限り
結構動いてしまったりします。 今後はラズパイのような小型PCにAIが搭載されるのがトレンドに……
なるのかなあ。


↑こんな本も出てます!







拍手[0回]

08/14

Tue

2018

ラズパイ拡張ボード DesignSpark Pmod HATについて

先日ラズパイコンテストに応募してみました。 https://trendy.nikkeibp.co.jp/pcls/rpic/

このコンテストにはスポンサーから部品類が提供されます。2018年はオムロンから環境センサ、RSコンポーネンツから Pmod HAT、eneblerからAPI的なものが利用でき、これを使ったアイディアを応募します。

設備のマニアどっとこむ的にはオムロンの温度センサーを希望したが、次点でPmod HATになりました。




応募して数日後この液晶PmodOLEDrgbと拡張ボードが届きました。


さーてコンテスト用の作品をつくるか、と思ったのですが予想以上にハードな道のりでした。

まずはググっても日本語記事が検索できず、参考文献はほぼ英語だった…。

数少ない日本語での解説 https://www.rs-online.com/designspark/easy-peasy-peripheral-interfacing-with-pi-python-and-pmods-jp

この記事を参考にしてインストールは可能でパイソンコード例は使えるんですが、PmodOLEDrgbはこの記事だけでは動かせません。SPI通信でJA1か2を使うみたいなのですが…
(SPI設定はraspi-configでやっておいてください)

リファレンスをみると

https://reference.digilentinc.com/reference/pmod/pmodoled/reference-manual

The Pmod OLED communicates with the host board via the SPI protocol. By driving and keeping the Chip Select (CS) line at a logic level low, users may send both commands and data streams to the display controller based on the state of the Data/Command (D/C) pin.

どうやらCSピンをGNDに落とさなければならないのですが、いったいどれがCSピンなのか…??

拡張ボードのリファレンスにラズパイのピン配置との対象表があるのでこちらを参照してください。(JA1とJA2でGNDに落とすピンは異なるので注意してください)
https://reference.digilentinc.com/reference/add-ons/pmod-hat/reference-manual


無事CNピンをGNDに落とし、サンプルコードをpython2で実行すると


from DesignSpark.Pmod.HAT import createPmod
from luma.core.render import canvas
from luma.oled.device import ssd1331
oled = createPmod('OLEDrgb','JA')
device = oled.getDevice()

with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
draw.text((16,20), "Hello, World!", fill="white")

while True:
pass



ディスプレイにHello World!の文字が出てきます。
注意して頂きたいのが、この状態でないとSPI通信をしていると反応しません。
lsmodコマンドで事前に確認する事はできません。(ここで結構つまづいた)
 


無事動作確認する事ができたのですが、普段日本語のブログなどに頼りきっていたのでいい経験になりました。 やはり電子工作をするにあたり英文が読めないいけないですね笑
今回数少ない日本語解説記事として参考になればと思います

そのうちコンテスト応募作品を紹介していきまーす。








拍手[0回]

08/12

Sun

2018

OpenCV で分類器を作成する (ラズパイ、一部Win10)

OpenCVも多少慣れてきたので、次のステップに移ろうと思って分類器作成に取り組んだものの、お盆休みにがっつりハマってしまった。

日本語、英語ともにググればかなり参考文献が出てくるから大丈夫と思っていたが、甘かった…


分類器は、画像処理をやるにあたり、判別するために使用するxmlファイルで、かなりサンプルがなければ難しいらしい。1000枚近く画像ファイルをもっているのは娘の写真くらいなので娘の顔を判別するファイルを作ることにした。

まずは画像にワクをつくるところから




objectmakerというフリーソフトで写真をワクで囲むと表をテキストで出力するというとても便利なソフトです。100枚くらいならいいのですが、1000枚やると病んできます笑

↓このサイトを参考にしました
http://d.hatena.ne.jp/takmin/20100930/1285848450


↓解像度が大きい画像の場合は一気に縮小するソフトも使います。
https://www.vector.co.jp/download/file/win95/art/fh690609.html


これで学習させる正常画像とそのリストができました。


続いてまったく関係ないNG画像も集め、テキストでリストも作ります。

ここまでWin10で作成しUSBメモリーでラズパイに移しました。

ラズパイで動かす場合、画像の格納場所などフォルダ体系に注意が必要です。



自分はhomeのpiにOpenCVをインストールし保存していますが、/home/pi/Build/binのなかの
OpenCV~関係のファイルをコピーして新規に作成したフォルダにもっていきます。


新規フォルダーーー正常画像フォルダーー判別したい画像
       |
       |
       --NG画像フォルダーー関係のない画像
       |
       |
       --正常画像リスト.txtかdat(objectmakerで作成)
       |
       |
       --NG画像リスト.txt
       |   
       |
       --分類器フォルダーーtraincascadeでxmlが作成される
       |
       |
       --/home/pi/Build/bin/opencv関係ファイル
       | 
       |
       --vecファイル createsample実施時に作成される。

まずは正常画像リストを確認します。objectmakeで作成しても最初の何行目かは消した方がエラーが出にくいと思われます。正常画像フォルダ/ファイル名 ワクの数 座標というテキストになっているはずです。パスを確認して下さい。

取り急ぎ学習データであるvecファイルを作るには判別したい画像、正常画像リスト、/home/pi/Build/bin/opencv関係ファイルがあればOKです。

まずはコマンドプロンプトで移動 
cd 新規フォルダ

続いてreatesampleのコマンドです。

opencv_createsample -info 正常画像リスト.txt  -vec vecファイル名.vec -num 正常画像数
-bg NG画像リスト.txt  -show -w24 -h24

-w24 -h24はvecファイルの大きさです。分類器ファイルを作成する際に合わせる必要があります。 -show をつけるとサンプル画像が表示されます。ワクで切り抜かれた画像が出てくれば成功です。ちなみに失敗するとvecファイルがえらい軽くなります。
学習結果で-imgがnullになっていますが -infoでリストと紐づいて実行しているので気にしなくてOKです。

続いてxmlファイルを作成していくのですがその前にNG画像リストのチェックです。
Windowsで改行するとエラーが出てきます。

Image reader can not be created.....

自分はとりあえずリストを1行だけにして確認しました。(改行が原因だとエラーが出ない)
テキストをラズパイで作り直したら復旧しました。

あとは勇気をだして下記コマンドを入力


opencv_traincascade -data 分類器フォルダ名 -vec vecファイル名.vec -bg NG画像リスト.txt 
-numPos 正常画像数×0.9ぐらい -numNeg NG画像数 -mode all  -w24 -h24

NG画像数はそのまま数を入力すればいいのですが、正常画像はそのまま入れると


Bad argument (Can not get new positive sample. The most possible reason is insufficient count of samples in given vec-file.)








こんなエラーが出てきます。正常の画像に0.9くらいかけた数にしておけば解消する(はず)です。


成功すると下記の様な表示がしばらく繰り返されたら成功です。

ーーーーーーーーーーーーーーーーーーーーーー
|                           |                            |                    |
|      FA                 |    HR                   |     N            |
|                           |                            |                    |
|                           |                            |                    |
|                           |                            |                    |

 
完了すると分類器フォルダにcascade.xmlという分類器が作成されるのでこの記事あるコードの分類器パスを変更すればOKです。(赤字の部分)
 cascade_path = "haarcascade_frontalface_alt.xml"

分類器が作成されても精度?が悪すぎるとカメラ画像が呼び出せなかったり、フリーズしたりするのでその場合はcreatesampleからやり直したり、NGファイルを増やしたりといろいろ試してください。

とりあえず相当苦労しましたが、娘を判別することができたので感無量でした。
いろいろな文献ありますが、微妙に古い記事だとOpenCVのバージョンが違ったりして参考にならなかったりします。今回はver3.1.0にて動作させています。あまり内容は理解していませんが(オイ)、参考になればまたOpenCV関連の記事を書いていこうと思います。









拍手[0回]

翻訳(Translate)

AD

シェアしてね

プロフィール

HN:
アルティメット雅史
性別:
男性
自己紹介:
製油所、データセンター、化学工場を渡り歩いた設備のマニア
最近はarduino,Raspberry pi等の電子工作にハマる。
取得資格は電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトほか

カウンター

お問い合わせ

忍者アクセスランキング

Copyright © 設備のマニアどっとこむ : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]