読者です 読者をやめる 読者になる 読者になる

AKIBAko

自分のためのナレッジ的ブログ

windows10 フォルダリネームの激オモプンプン

メールに複数のファイルを添付するとき、フォルダに詰め込んで圧縮して添付する

そのときのフォルダ名はもっぱら PackFiles だ

 

最近、ディスクトップに作成したフォルダを PackFiles にリネームすると1分くらいフリーズしてエクスプローラが落ちる現象が頻発しだした

名前が違うとこの現象は起きない。。

そう、PackFile は問題ないけど PackFiles だと ほぼフリーズだ!

 

こんなマイナーな問題と思いながら google 先生に聞いてみた

windows search のインデックスが激オモなんだよ』

ふむ、ファイル名的な縛りはないものの、フォルダリネームでフリーズ現象は結構起きているようだ

さっそくインデックスを再構築してみると、なんということでしょう。。

あれだけ激オモプンプンだったリネームが光の速度で完了したのである

 

今後、Windows search からは目が離せないのである

darknet on raspberry pi で物体認識

なんということでしょう
忙しさにかまけて更新してなかったら、ひと月も経っていたようだ。。

こういうのを毎日更新できる人は本当にすごいと思う
ということで、とりあえず更新しようと思い raspberry pi で darknet を動かしてみた。

pjreddie.com

インストールはめちゃ簡単で、git clone して make するだけ
darknet は C で書かれているので非常に親近感が持てる

$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet
$ make

Makefile のオプションで GPU や CUDNN、OPENCV の指定が可能
WEBカメラからの入力を物体認識させる場合はOpenCV をインストールしておく必要がある

さあ、でき上がった実行ファイル darknet を実行して物体認識。

$ ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

長い、、長すぎる!
画像一枚に 5分もかかってしまった。。 Raspberry pi の限界だ

一応、結果は下記のとおりバッチリ動いている。ただただ時間がかかるのだ。

input output
f:id:minori-san:20170116231705j:plain f:id:minori-san:20170116231703j:plain
f:id:minori-san:20170116232536j:plain f:id:minori-san:20170116232542j:plain

Raspberry Pi シリアル接続

最近の忙しさは殺人級だ
久しぶりの休みに STAR WARS をおさらいしようと TUTAYA で全部借りてしまった
映画館はその後だな。。

ということで、久しぶりに Rassberry pi を起動したら IPアドレスが分からない
いちいち HDMI でテレビに接続して確認するのも面倒なのでシリアルで接続した

USB to UART TTLシリアルケーブル 1M (PL2303HX)

USB to UART TTLシリアルケーブル 1M (PL2303HX)

そのまま接続しても繋がらない。デバイスマネージャーを見ると COMポートにびっくりマークが付いている
当たり前だけど、ドライバが必要なようだ。

下記のサイトからドライバ(PL2303_Prolific_DriverInstaller_v1.12.0.zip)をダウンロードしインストール
http://www.prolific.com.tw/JP/ShowProduct.aspx?p_id=223&pcid=126
Windows 10 は未サポートみたいなので注意

無事に接続完了

raspberrypi login: pi
Password:
Last login: Sat Nov 26 15:49:42 UTC 2016 on ttyAMA0
Linux raspberrypi 4.4.32-v7+ #924 SMP Tue Nov 15 18:11:28 GMT 2016 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@raspberrypi:~$
pi@raspberrypi:~$ uname -a
Linux raspberrypi 4.4.32-v7+ #924 SMP Tue Nov 15 18:11:28 GMT 2016 armv7l GNU/Linux
pi@raspberrypi:~$

ちなみに Raspberry pi の UART(TX) は GPIO14、UART(RX) は GPIO15 です f:id:minori-san:20161217205302j:plain

Amazon de Dash

Amazon Dash Button を早速買ってみた
ピッタリほしいのは無かったのだが、ティッシュとかトイレットペーパーは必要だろうとエリエールのやつを購入

f:id:minori-san:20161206220327j:plain

Amazonアプリから Dash Button の Wi-Fi を設定し、購入可能商品の中から購入するものをいずれか一点選ぶ(複数はダメなのね)
あとはボタンを押すだけでトイレットペーパーを買いまくれるのである。やったね

f:id:minori-san:20161206220916j:plain

Raspberry pi をアクセスポイントに

最近の寒さはなんなんだ 体調くずれまくりである。。

で、Raspberry pi をアクセスポイントにしようという話

Wifiドングルはこいつを使用

BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

 

hostapd インストール

$ sudo apt-get install -y hostapd

hostapd.conf の編集
hostapd.conf を examples から展開

$ zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz | sudo tee -a /etc/hostapd/hostapd.conf

で /etc/hostapd/hostapd.conf を確認して、下記の値が違ってたら修正

interface=wlan0
ssid=my-raspberry
hw_mode=g
wpa=2
wpa_passphrase=PASS
wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256

/etc/network/interfaces を編集
wlan0 のネットワークを static で設定しなおし

(修正前)
:
allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
:

(修正後)
:
auto wlan0
iface wlan0 inet static
hostapd /etc/hostapd/hostapd.conf
address 192.168.64.1
netmask 255.255.255.0
:

DNSMASQ インストール
DHCPサーバは、今回 dnsmasq を使うことにした

$ sudo apt-get install -y dnsmasq

/etc/dnsmasq.conf の編集
下記の値を修正する

interface=lo,wlan0
no-dhcp-interface=lo
dhcp-range=192.168.64.20,192.168.64.254,255.255.255.0,12h

IP Foward 設定

/etc/sysctl.conf で 以下をアンコメント

net.ipv4.ip_forward=1

/etc/rc.local に以下の行を追加して起動時に iptable 設定する

iptables -t nat -A POSTROUTING -s 192.168.64.0/24 ! -d 192.168.64.0/24  -j MASQUERADE

 

Raspberry pi リブート後、wlan0 がアクセスポイントとして立ち上がってたら OKAY

pi@raspberrypi:~ $ iw wlan0 info
Interface wlan0
        ifindex 3
        ssid my-raspberry
        type AP
        wiphy 0

DIGITS で MNIST リベンジ

Raspberry pi に DIGITS をインストールするというあまりにも無駄なことに頑張ってみた

DIGITS インストール

DIGITS/BuildDigits.md at master · NVIDIA/DIGITS · GitHub の手順どおりで特にエラーもなく DIGITS 起動までOK

関連ライブラリのインストール

$ sudo apt-get install --no-install-recommends git graphviz python-dev python-flask python-flaskext.wtf python-gevent python-h5py python-numpy python-pil python-pip python-protobuf python-scipy

DIGITSダウンロード

$ DIGITS_ROOT=~/digits
$ git clone https://github.com/NVIDIA/DIGITS.git $DIGITS_ROOT

Pythonパッケージをインストール

$ sudo pip install -r $DIGITS_ROOT/requirements.txt
$ sudo pip install -e $DIGITS_ROOT

DIGITS起動

$ cd ~/digits
$ ./digits-devserver

ちょっと感動。。Raspberry pi でも DIGITS が動いた f:id:minori-san:20161117000735p:plain  

MNIST トレーニング

データセットを取得

$ cd ~/digits
$ python -m digits.download_data mnist ~/mnist

データベースを作成してトレーニングを開始

f:id:minori-san:20161117001543p:plain

トレーニングは開始できたが、絶望的に時間がかかる。
ラズパイがんばれ!とりあえず2エポックまわしたときのモデルで推論

f:id:minori-san:20161117001941p:plain

f:id:minori-san:20161117001949p:plain

おー、ちゃんと分類できている。すばらしい

webカメラを買った

これ

LOGICOOL ウェブカム HD画質 120万画素 C270

LOGICOOL ウェブカム HD画質 120万画素 C270

安いからある程度は気にしないつもりだけど、
未開封パッケージの外面からでも見える擦り傷ってどうなの?
新品じゃないのかしら。。

で、とりあえず RaspberryPi での動作確認

import cv2
import sys, time

# cascade_path = "/home/pi/opencv-2.4.13/data/haarcascades_GPU/haarcascade_frontalface_alt.xml"
# cascade = cv2.CascadeClassifier(cascade_path)

cam = cv2.VideoCapture(0)
cam.set(3, 320)
cam.set(4, 240)

if cam.isOpened() is False:
        print("cannot open the device")
        sys.exit()

while True:
        ret, img = cam.read()
        if ret == False:
                continue

        # img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # facerect = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
        # if len(facerect) > 0:
        #       for rect in facerect:
        #               cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0,0,255), thickness=2)

        cv2.imshow("web cam", img)

        if cv2.waitKey(10) >= 0:
                break

        time.sleep(0.1)

cv2.destroyAllWindows()

顔検出とか入れてみたら死ぬほど重かったのでコメントアウト
RaspberryPi の限界を感じる