忍者ブログ

設備のマニアどっとこむ

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

10/21

Sun

2018

3Dプリンターでマイニングマシンをハロウィン仕様にした話

2歳になる娘がいるんですが、3Dプリンターでなにか作ってあげようとずっと思ってたんだけど全然できていませんでした。

最近ハロウィンの季節ということでジャックランタンを作ってみました。
 


・・・ちょっとかぼちゃ感がないですが。
底に穴が開いているのはLEDを入れようと思ってていたので空いてます。

今回は接地面積が少なかったので、一回失敗してしまいました。(プラットフォームから落ちてしまいました。)
対策としてスティックのりをつかったんですが、今度ははがれなくなってしまいました・・。

はがすのにこんなものもあります。ダヴィンチプロについてるへらではちょっと分厚いので
おススメです。








できあがったものをマイニングマシンの電源ランプにつけてみました。





ちょっとハロウィン感でたかな?どうでしょう。






季節はずれになったら家にあるガチャガチャにでもいれてみようかと。
3Dプリンタを有効活用しようという毎日です・・。







拍手[0回]

PR

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回]

09/23

Sun

2018

Tensorflowで画像分類した話

なかなか使いこなせないでいるTensorflowですが、画像分類をやってみました。

VGG16という大量にある学習済みモデルを用いて画像を判別。可能性の高いベスト5をAIに選んでもらいました。

コードはこちら↓
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
import numpy as np
import sys
"""
ImageNetで学習済みのVGG16モデルを使って入力画像のクラスを予測する
"""
# 学習済みのVGG16をロード
# 構造とともに学習済みの重みも読み込まれる
model = VGG16(weights='imagenet')
# model.summary()
# 引数で指定した画像ファイルを読み込む
# サイズはVGG16のデフォルトである224x224にリサイズされる
img = image.load_img('C:\\Users\\masashi\\Desktop\\photo.jpg', target_size=(224, 224))
# 読み込んだPIL形式の画像をarrayに変換
x = image.img_to_array(img)
# 3次元テンソル(rows, cols, channels) を
# 4次元テンソル (samples, rows, cols, channels) に変換
# 入力画像は1枚なのでsamples=1でよい
x = np.expand_dims(x, axis=0)
# Top-5のクラスを予測する
# VGG16の1000クラスはdecode_predictions()で文字列に変換される
preds = model.predict(preprocess_input(x))
results = decode_predictions(preds, top=5)[0]
for result in results:
    print(result)



例えばこんな犬の画像だと…


('n02087394', 'Rhodesian_ridgeback', 0.58250064)
('n02090379', 'redbone', 0.1364721)
('n02099601', 'golden_retriever', 0.058095142)
('n02088466', 'bloodhound', 0.055783514)
('n02106662', 'German_shepherd', 0.03908478)




このように犬の種類が出ます。

参考にしたサイトです↓
http://aidiary.hatenablog.com/entry/20170104/1483535144

ラズパイでできればと思ったんですが、全然だめでした…






拍手[0回]

09/22

Sat

2018

kerasで手書き数字の認識をした話

tensorflowをいじって数週間、kerasというtensowflowのAPIを使って手書き文字が判別できるそうな。 画像ファイルを読み込ませて判別するコードを下記記事を参考に作ってみました。

https://pondad.net/web/2016/12/11/scikit-learn-mnist.html


今回はマイニング用PCでやりました。ラズパイでは厳しいと最初から判断してやめてしまいました。完全にチキン野郎です。きっと手書きデータが重いんじゃないかなって思ったんですけど…

→→なんとかラズパイでも動かせました!!


ちなみにWindows10では簡単に開発環境は整います。

インストールその他は下記本を参照にしました。



おおまかな流れはAnacondaをインストールし、そこからtensowflowその他ライブラリをインストールしていく形です。

Pythonはjupyter Notebookというwebエディターで使っていきます。15分~20分で完了しました。やっぱり汎用のOSはいいですね…。




画像は↑これなのですが、webエディターなのでファイルの場所はフルパスを入れたほうがよさそうです。
↓作ったコードはこちら。
from sklearn import datasets, cross_validation, svm, metrics
from tensorflow.python.keras.layers import Dropout
import numpy as np
from PIL import Image
digits = datasets.load_digits()
label_test = [7]
image = Image.open("test7.png").convert('L')
#フルパスの必要あり。convert('L')でデータの白黒を反転させている。

image = image.resize((8, 8), Image.ANTIALIAS)
#8×8の行列にしています。

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
#データをx、yの軸にしてます

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)
#SVCのパラメータです。読み込んだデータを判断する仕方が変わってきます。
#なぜかkernel='linear'にしたらよく当たるようになりました。

clf2 =data_test.reshape(1,-1)
#これ重要。data_test.のままではエラーがでます。

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, "%")
#判断した数字を出力。そしてlabel_test = [7]とあっているか確認しています。


詳しくは勉強中ですが、珍しく解説をいれました笑
参考にしたブログのコードをそのまま使うと下記のようなエラーが出ます。

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. 

どうも画像データを読み込んだ行列が単独だったらreshape(1, -1) をしてほしいとのことなのでclf2 =data_test.reshape(1,-1)としてます。printで行列を確認すると


reshape前

[0. 0. 1. 2. 3. 2. 1. 0. 0. 0. 7. 8. 7. 9. 9. 0. 0. 0. 0. 0. 0. 7. 3. 0.
0. 0. 0. 0. 3. 9. 0. 0. 0. 0. 0. 0. 9. 2. 0. 0. 0. 0. 0. 6. 6. 0. 0. 0.
0. 0. 0. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

reshape後
[[0. 0. 1. 2. 3. 2. 1. 0. 0. 0. 7. 8. 7. 9. 9. 0. 0. 0. 0. 0. 0. 7. 3. 0.
0. 0. 0. 0. 3. 9. 0. 0. 0. 0. 0. 0. 9. 2. 0. 0. 0. 0. 0. 6. 6. 0. 0. 0.
0. 0. 0. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]







どうもカッコがふたつないといけないのかな??
調べるとsklearnのバージョンが新しいとこうなってしまうらしいです。

これでなんとかエラーは突破できました。結果として

テストラベル= [7]
解析結果= [7]
正解率= 100.0 %

こうでればOKです。ほかにも4を試したりしましたが正解してます。

まあ精度はどうであれ、AIを実感することができました。
tensorflowでは最初から学習データを使うことができます。OpenCVみたいに死ぬほどデータを
用意しなくていいみたいですね。

最近Qiitaみたいにこのブログがなってきましたが、いろんなことやっていきますよ!!







拍手[0回]

09/17

Mon

2018

Raspberry piにtensorflowをインストールした話

以前にRaspberry piにopen CVをインストールして機械学習をしていたのですが、今度はGoogleのガチのAI(?)tensorflowに挑戦してみた。

意外にも参考にできる記事は多く、インストール自体はすぐにできた。

http://dotnsf.blog.jp/archives/1066763997.html


まずはアップデート

sudo apt-get update
sudo apt-get install python-pip python-dev

そしてtensorflowのダウンロードとインストール

wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl



インストールの確認はターミナルからpythonを立ち上げ import tensorflowで確認できる。
pythonファイルから動作させる場合は、python ファイル名.pyコマンドをおススメする。
※thonnnyからではpython3なのでインポートエラーになってしまった。

サンプルファイルはいろいろあるのだが効果が??なものが多い

import tensorflow as tf
x = tf.Variable(0., name='x')
func = (x - 1)**2
optimizer = tf.train.GradientDescentOptimizer( learning_rate=0.1 )
train_step = optimizer.minimize(func)
with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  for i in range(400):
       sess.run(train_step)
            print('x = ', sess.run(x))

このコードでは(x-1)²を最小化する値を求めるのだが、
for i in range(400)の値を小さくすると1から遠ざかっていく…
数字を変えていくとtrain_stepの回数が変わるので1に近づく。

なんとなく最適解を求めている雰囲気は伝わるだろうか。

これぐらいならraspberry piでも問題なくできるのでいろいろと試していきたい。
とりあえずはGPUを積んだマイニングリグでやりますが…







拍手[0回]

翻訳(Translate)

AD

シェアしてね

プロフィール

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

カウンター

お問い合わせ

忍者アクセスランキング

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

TemplateDesign by KARMA7

忍者ブログ [PR]