まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:pi

Google が提供する機械学習ライブラリ TensorFlow公式にはラズベリーパイ用のモジュールは用意されていませんが、ラズベリーパイ向けのパッケージを作って公開されているものを見つけました:
https://github.com/samjabrahams/tensorflow-on-raspberry-pi


実際に導入してみた手順を紹介します。なお以下の情報は 2017/Jul/19 時点のものであり、実際に試した時の環境は以下のとおりです:
ハードウェア: Raspberry Pi 3 Type B
OS: Raspbian GNU/Linux 8.0(Jessie)
Linux カーネル: 4.9.28
TensorFlow: 1.1.0


【Pythonのインストール】
Python 2.7 または 3.3 以上が必要です。自分の環境では標準で 2.7 がインストールされていたので、これをそのまま使うことにしました。というわけで、以下の手順は Python 2.7 用のものです。


【pip 他のインストール】
TensorFlow 本体のインストール時に必要な pip や開発用依存モジュールをまとめてインストールします:
$ sudo apt-get update
$ sudo apt-get install python-pip python-dev

【TensorFlow のインストール】
ラズパイ用の TensorFlow 1.1.0 をダウンロードし、pip でインストールします:
$ 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

wheel パッケージが展開され、各種ライブラリ含めたビルドが行われます。実際には結構な時間がかかる作業です。


【mock ライブラリの再インストール】
最後に mock ライブラリの再インストール(一度削除して、もう一度インストール)が必要とのことで、その作業を行っておきます:
$ sudo pip uninstall mock
$ sudo pip install mock

【動作確認】
クラスメソッド様のサイトに「TensorFlow 版ハローワールド」的なサンプルプログラムがあったので、これをそのまま動かしてみます:
TensorFlowで Hello Worldを動かしてみた&その解説

テキストエディタで以下の内容を編集し、hello-tf.py という名前で保存します:
# hello-tf.py
import tensorflow as tf
import multiprocessing as mp
 
core_num = mp.cpu_count()
config = tf.ConfigProto(
    inter_op_parallelism_threads=core_num,
    intra_op_parallelism_threads=core_num )
sess = tf.Session(config=config)
 
hello = tf.constant('hello, tensorflow!')
print sess.run(hello)
 
a = tf.constant(10)
b = tf.constant(32)
print sess.run(a+b)

これを Python で実行します:
$ python hello-tf.py
hello, tensorflow!
42

青字のような結果が出力されれば、とりあえず動作していることが確認できました。


 

ラズパイ(ラズベリーパイ)上で検索エンジンである ElasticSearch が動くことがわかったので、自分も試してみました:
2017070601


まず、ElasticSearch そのものにラズパイネイティブ版が存在しているわけではありません。 ElasticSearch は Java アプリケーションなので実行には Java が必要であり、Java が有効な環境であれば理論上は動きます。というわけで最初にラズパイに JDK 8 を導入します(導入済みであれば、ここは読み飛ばしても可)。
$ sudo apt-get install oracle-java8-jdk

$ java -version
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

Java が使えるようになったので改めて ElasticSearch を導入します。ダウンロードページで確認すると、この記事を書いている 2017/Jul/06 時点での最新バージョンは 5.4.3 でした:
2017070602



これをラズパイ上にダウンロードして展開します:
$ cd ~
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.3.zip
$ unzip elasticsearch-5.4.3.zip
$ rm elasticsearch-5.4.3.zip
$ mv elasticsearch-5.4.3 elasticsearch
$ cd elasticsearch

さて、他のプラットフォームだとこのまま実行してもいいのですが、ラズパイの場合はシステムスペックの問題でデフォルトの設定のままだとメモリ不足になりやすいという問題があります。そこで実行前にメモリの設定を変更しておきます。22 行目と 23 行目(か、そのあたり)で、"-Xms2g" と "-Xmx2g" という指定がされており、これによって ElasticSearch に 2GB のメモリを使うよう指定されています。ここを以下の赤字のように書き換えて、メモリ使用量を 256MB にするよう変更します:
$ vi config/jvm.options

  :
  :
-Xms256m   ← -Xms2g から変更
-Xmx256m   ← -Xmx2g から変更
  :
  :

これでメモリの問題は解決した(はず)なので、改めて ElasticSearch を起動します:
$ ./bin/elasticsearch
[2017-07-06T10:41:17,203][WARN ][o.e.b.Natives ] unable to load JNA native support library, native methods will be disabled. : : [2017-07-06T10:41:39,511][INFO ][o.e.h.n.Netty4HttpServerTransport] [lonXjYa] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200} [2017-07-06T10:41:39,537][INFO ][o.e.n.Node ] [lonXjYa] started [2017-07-06T10:41:39,579][INFO ][o.e.g.GatewayService ] [lonXjYa] recovered [0] indices into cluster_state

いくつかの警告メッセージが表示されますが、ラズパイ上で ElasticSearch 5.4.3 が起動しています。確認のため、同じマシンから curl でアクセスしてみましょう:
$ curl http://localhost:9200/
{
  "name" : "lonXjYa",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "4hqvLhXQT0uqTaKOI02idg",
  "version" : {
    "number" : "5.4.3",
    "build_hash" : "eed30a8",
    "build_date" : "2017-06-22T00:34:03.743Z",
    "build_snapshot" : false,
    "lucene_version" : "6.5.1"
  },
  "tagline" : "You Know, for Search"
}

↑こんな感じのメッセージが表示されれば成功です。なお、ElasticSearch を終了するには実行中の端末で Ctrl+C を入力します:
    :
    :
[2017-07-06T10:41:39,537][INFO ][o.e.n.Node               ] [lonXjYa] started
[2017-07-06T10:41:39,579][INFO ][o.e.g.GatewayService     ] [lonXjYa] recovered [0] indices into cluster_state

^C[2017-07-06T10:52:09,484][INFO ][o.e.n.Node               ] [lonXjYa] stopping ...
[2017-07-06T10:52:09,579][INFO ][o.e.n.Node               ] [lonXjYa] stopped
[2017-07-06T10:52:09,581][INFO ][o.e.n.Node               ] [lonXjYa] closing ...
[2017-07-06T10:52:09,668][INFO ][o.e.n.Node               ] [lonXjYa] closed

$ 
  (↑Ctrl+C(赤字部分)を入力して終了する様子)


実はいま、個人的にはラズパイを開発環境として使う機会がそれなりにあります(ラズパイにリモートログインして vi でガシガシ、という感じ)。そのローカルシステム内に ElasticSearch 環境まで構築できる時代になったとは・・・今以上に開発がはかどりますね。


小型コンピュータである Raspberry Pi(以下「ラズパイ」)のデスクトップ環境をラズパイ以外にも提供するプロジェクト "PIXEL" 、その x86(i386) 版が公開されました:
PIXEL for PC and Mac

まだ実験的な段階であり、バージョン番号にも日付が使われている状態です。僕がダウンロードしたものは 2016-12-13 時点のものでした。デフォルトで LibreOfficeChromium ブラウザ、Scratch を含む各種プログラミングによる統合開発環境が搭載されており、最低限以上のデスクトップ環境になっていました:
2016122501


ラズパイはもともと教育用途に開発された経緯があり、低スペックなマシンでもある程度動作することを目標にしていました。その考え方は PIXEL にも受け継がれているようで、古い PC や Mac 環境を蘇らせることができるかもしれません。

現時点では PIXEL のトップページからブート可能な iso がダウンロードできるような形で公開されています。こいつを DVD や USB メモリに保存してそこから起動するか、あるいは仮想環境下でこの iso を指定してブートするだけです。ハードディスクへのインストールして簡単に起動できるような環境はまだ提供されていない模様ですが、今手元で使っている環境に影響を与えずに試せるようなものが提供されている、と考えられます。

日本語環境についてはカスタマイズで可能なように見えますが、その方法はまた別の機会に。


スウェーデン発祥の世界最大の家具量販店 "IKEA(イケア)"。ここは毎年ジンジャーブレッドハウスコンテストを開催しています:
https://www.smartcontest.jp/system/ikeafoodcontest/pc/

2016122301


イケア店内でも売られているジンジャーブレッドハウスキットを使ったデコレーションコンテストです:
2016122302


板状のジンジャーブレッドを組み立てて家を作って、デコレートして、写真に撮って、その出来栄えを競い合う、というものです。昨年の応募作品を見ると信じられないくらいにレベルが高い・・・
2016122303


もともとこのコンテストを知っていたわけではないのですが、たまたま近所の TOKYO BAY 店(旧船橋店)で実物を見かけた時、ふと
  「この家、ラズベリーパイがちょうど入るくらいのサイズなんじゃね?」
とアレなアイデアが浮かんでしまったのでした。。

いやでもクッキーだし、粉とかラズパイみたいな精密機械にいい影響があるわけないし、何より食べ物を粗末にするのはよくないし・・・うーん、、、


行けばわかるさ!
IMG_0082


ジンジャーブレッドハウスを作るのは初体験です。軽く「組み立てるだけだよね?」と考えて購入しましたが、その「組み立てるだけ」が難しいのなんのって。。 自分は一応は大工の息子ですが、そのDNAはもう残ってないと実感しました(苦笑)。屋根が自分の重みで落ちてきちゃって、、、みんなどうやって固定させるんだろ・・・

苦労しながらもなんとか家が家の形になってきました。外から見たお家の中の様子。一瞬「業務用キッチン?」と見間違えそうですが、USB ポート x 4です:
IMG_0083


煙突立てて、サンタ人形を載せて、外観は完成。なんかケーブルが見えてますが気のせいです:
IMG_0085


気のせいなケーブルをコンセントに挿すと、家の中にほのかな明かりが灯ります。意外と悪くないかも!(慣れない創作作業で結構苦労したせいか、この辺りから判断基準がおかしくなってるかもしれません):
IMG_0086


ラズパイはもちろん無線 LAN で Linux サーバーとしても稼働中なので、GPD WIN 機から ssh で接続してみました。このゲーム機みたいな PC から家の中の様子を覗いてるイメージです:
IMG_0091


最後にシュガーとグミでデコレーションを追加。本当は砂糖の粉雪を降らせたかったのですが、さすがにラズパイの動作への影響と、何より危険だと思ったので断念しました。GPD WIN から IBM Bluemix の Node-RED スターター環境にアクセスして、この家(ラズパイ)からのセンサーデータを取得できるようにしました。わかりにくいのですが、家の中の状態をこの PC から監視しています。一応これが完成品です(コンテストにはこの写真で応募する予定w):
IMG_0097


微妙なタイミングを測って、ラズパイの LED が2つ(赤と緑)点灯した瞬間を撮影してみました。僕の脳内では少女とその両親が、キャンドルの周りで神様にお祈りをしている姿まで見えています:
2016122300


お約束ですが、この後美味しくいただきます!

なお、ジンジャーブレッドハウスコンテストへの投票はこちらから。よろしくお願いします(笑):
ジンジャーブレッドハウスコンテスト | IKEA FOOD


Happy Merry Christmas!

僕のブログの全エントリの中でも指折りの人気ページの1つが Kali Linux ネタです:
http://dotnsf.blog.jp/tag/kali

ペネトレーションテスト用に開発された Kali Linux は本来の目的で使われることはもちろん、Debian ベースで apt-get コマンドを使ったカスタマイズもでき、何よりもカッコいいデスクトップ環境(大事!)もあって、最近人気が上がっているディストリビューションの1つだと思っています。

そんな Kali Linux は組み込み用環境向けにもイメージが提供されています。今回はそんな中から Raspberry Pi(以下、「ラズパイ」)用イメージを使って、ラズパイに Kali Linux 環境を構築する手順を紹介します。なお、以下の手順はラズパイ3で試していますが、2でも同様に可能なはずです。

まず用意するのは 8GB の MicroSD カード。ここにほぼ同じ大きさの Kali Linux イメージを書き込んで使います。

ラズパイ用の Kali Linux はこちらからダウンロードします:
https://www.offensive-security.com/kali-linux-arm-images/

2016121501


このサイトの中ほどにラズパイ用のセクションがあり、その中から環境にあったイメージ("RaspberryPi 2/3")を選んでダウンロードします。ダウンロードファイルは .xz という拡張子をもったフォーマットで圧縮されています。

ダウンロード後、このファイルを展開します。Windows であれば 7zip で、Linux であれば tar の Jxf オプションを使うなどして圧縮を展開し、約 8GB のイメージファイルを取り出してください。

取り出したイメージファイルを MicroSD カードにダンプで書き込みします。Windows であれば DD for Windows 、Linux であれば dd コマンドを使ってイメージをそのまま書き込んでください。これで Kali Linux が導入されたラズパイ用の MicroSD カードが用意できました。

ここまでできれば後は普通のラズパイ同様に、HDMI ケーブル/キーボード/マウス/有線LANケーブル などを必要に応じて繋いで使って起動してください:
IMG_0055


↑普通に起動できました。




このページのトップヘ