忍者ブログ

設備のマニアどっとこむ

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

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

PR

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

08/01

Wed

2018

モナコインをGPUマイニングする方法

先日ラズパイでのマイニングをやってみて結構おもしろかったのでGPUを購入してやってみた。



とりあえずグラボ一枚でスモールスタート。

買ったのはこちら












ここまでは必需品だが
買うか迷うのがこの辺り








OSははじめubuntuでチャレンジしたが断念。後々普通のPCとして使うならWindowsでやった方がいいかもしれない。

USBからブートし問題なくSSDでインストールできた。

無線LANもノイズで切れるという記事もあったが特に問題なし。

DVDドライバーは念のため買ったものの使わなかった…


これはラズパイやarduino使っている人はいらないかもしれません。 でも短絡するところを迷うので自分みたいな初心者は念のため買っておいた方がいいかも。



PCが組めてOSがインストールできたらマイニングの準備

モナコインを掘るには下記ページからダウンロードする

https://askmona.org/5596

そしてこの記事の様にvippool に登録しbatファイルを書き換えるだけ。


終わってみればとても簡単な気がしましたが、今回はかなり苦戦。
ccminerが全く動きませんでした。
(結構な金額を使ってるんで焦りました…)

ドライバーを入れてみたり、cudaのバージョンを変えてみたり何度やってもエラーが…Unable to query number of CUDA devices!

結局のところグラボの補助電源を入れてなかっただけだった。ファンは回っていたので動いていたのかと…

ホッとひと安心したもののモナコインを掘り始めた途端、価値が下がってきました涙

まあ儲かるかどうかはまた報告したいと思います。 とりあえず20数年ぶりにPC組んだので規格とか変わっていて新鮮でした。最悪グラボを売って普通のPCにするのもアリなので、損することはそんなにないのかも?どうかな?






スイーン
音はそんなにうるさくないです
夏場はかなり熱くなりますが…






拍手[0回]

07/21

Sat

2018

raspberry pi×Open CVで庭に来る猫対策

マンション一階に住んでいるのだが、庭に猫がときどき入ってくる時がある。 通りすぎるくらいならいいのだが、奥さんが育てているコケを荒らしたり、糞をしたり結構やりたい放題。

こんな猫よけグッズはあるのだが全然効果なし。(慣れちゃったのか?)

近くを通ると耳がキーンってする


退治するまではいかないまでも、どの時間帯にに来るのかぐらいは調べてみることにした。
といってもずっと見ているわけにはいかないのでラズパイでOpenCVを動かして、反応した時だけ写真をとってみます。

まずはこの記事など見てもらってラズパイにOpenCVインストール済みということで… 

インストールがうまくできたらこのようなコードを書きます。
# -*- coding: utf-8 -*-
import sys
import cv2  
import time
if _name_ == '_main_':
    try:
      
        cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/cascade.xml"
        cascade = cv2.CascadeClassifier(cascade_path)
        capture = cv2.VideoCapture(0)
        if capture.isOpened() is False:
            raise IOError("VideoCapture could not open.")
       
        while True:
           
            ret, image = capture.read()
            if ret == False:
                continue
           
            facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
           
            color = (255, 255, 255)     
            for rect in facerect:
                cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2)
                
                time.sleep(1)
                
                cv2.imwrite("img.png", image);
                break
            
            cv2.imshow("FaceDetection", image)
            #wait[ms]
            cv2.waitKey(1)
    except KeyboardInterrupt  :         
        print("\nCtl+C")
    except Exception as e:
        print(str(e))                   
    finally:
        capture.release()              
        cv2.destroyAllWindows()         
        for i in range (1,5):
            cv2.waitKey(10)             
        print("\nexit program")         
    

ここで顔認識と違うのは画像処理を行う判別ファイルが違います。
猫用なんてあるの? って思うかもしれませんが、ここにあります。
保存したら、パスを入れ替えてください。
 cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/cascade.xml"

あとは猫を認識したときに画像を保存します。ファイル名は適当です。
cv2.imwrite("img.png", image);
                
これでとりあえず、猫を画像検索したタブレットでテスト


に、認識してる気がする…

ホントは電磁弁とかと連動させて水でもかけたいとこだけどかわいそうなのでやめときます…

とりあえずリフォーム終わったら仕掛けてみます!!








拍手[0回]

07/16

Mon

2018

マンションで隣の部屋とくっつけるリフォームをする話 2

家のマンションのリフォームが進んできました。

1LDKに家族3人住んでいたのですが、隣のへやとの壁をぶち抜いてひとつの部屋にするリフォームしています。

ついに壁に穴があきました!!




※昼間工事をしているので夜撮影しています。

内装工事も徐々にすすんでいます。
現在は仮住まい。雨漏りしたり、NHKが映らなかったりとトラブル続きです…
(家賃はタダになりました)


早く引っ越したい!!







拍手[0回]

翻訳(Translate)

AD

シェアしてね

プロフィール

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

カウンター

お問い合わせ

忍者アクセスランキング

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

TemplateDesign by KARMA7

忍者ブログ [PR]