人工知能って何ができるの?

最近流行りの人工知能

人工知能がどんなものなのか、イメージをつけるためにまずは使ってみます。

 

2015年11月にGoogleが公開した、DeepLearningのライブラリ「TensorFlow」を選びました。選んだ理由としては、一番メジャーなので。

https://9to5google.files.wordpress.com/2015/11/tensorflow-lead.jpg

Macを使っているので、

Mac OS XにTensorflowをインストールして、Hello worldまでやってみる - ワタナベ書店

を参考にしてやってみます。

 

OSXのVirtualenv(仮想環境モジュール)上に、TensorFlow環境を構築

・TensorFlow環境に入るには、$ source ~/tensorflow/bin/activate

・実行するには、$ python helloworld.py でHelloWorldが実行できる

・元の環境に戻るには、(tensorflow) $ deactivate

 

簡単にできました。

 

次は、画像認識をやってみます。

ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換) - Over&Out その後

を参考にします。

 

・MNISTのチュートリアルスクリプトを実行 →dataディレクトリが生成

・TensorBoardで学習状況を可視化 →学習回数と不正解のグラフを表示

 

ができました。

 

ここまでは簡単にできました。プログラムの内容を理解していないので、TensorFlowで何ができるのか、今の時点では良く分かりません。

色んな事例を探して、勉強してみます。

 

 

MacでMQTTを体験

Raspberry PiにMQTT Brokerをインストール - Qiita

がやりたいが、まずはMacでMQTTを動かしてみる。

 

MQTTの挙動をMacで確認する - 発熱するマイナ魂

を参考にしました。

 

 

まずは、Mosquitto Brokerのインストール

sudo xcodebuild -license

でライセンス契約にagree。

$ brew install mosquitto

を実行して、

🍺  /usr/local/Cellar/mosquitto/1.4.2: 28 files, 700K

とインストールが完了した。

 

次に、Publisher/Subscriberの準備

$ git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git
$ cd org.eclipse.paho.mqtt.python.git
$ sudo python setup.py install

でgit clone。

サンプルプログラムを作成。

 

そして、動作確認。

ターミナル1 (Broker) メッセージを集める人

$ /usr/local/opt/mosquitto/sbin/mosquitto


ターミナル2 (Subscriber) メッセージを読む人

$ python subscriber.py


ターミナル3 (Publisher) メッセージを送る人

$ python publisher.py

 

動作結果
ターミナル2に以下が表示された。成功。

topic/hoge hello world!

 

 

websocket

www.tettori.net

 

http://localhost:3000

 

を参考にしてWebSocketが動いたので、今日は、 

 

Node.jsを使ってみよう(1):Node.js、Socket.IO、MongoDBでリアルタイムWeb (1/2) - @IT 

Node.jsを使ってみよう(2):Node.js、MongoDBでデータの保存 (1/4) - @IT

 

を参考にして、MongoDBを使ってみます。

 

まず、rootになってmongodでデータベースを起動させる。

su -

mongod

 

別ウィンドウで、

node app.js 

 

mongooseを使ってmongodbにアクセスしてみる - A Peak Never Ending !

 に書いてあったのが参考になった。

 

ちなみにコレクション名を指定してる場所がないけど、mongooseはモデル名を lower caseにしてsを付けた名前をコレクション名として使うっぽい(この場合はmemosがコレクション名になる) 

 

ということらしい。memoなら、memosがコレクション名。

別のサンプルを触っていて、コマンドラインからコレクションにアクセスできなかった原因はこのためだったらしい。

 

var Memo = db.model('memo',MemoSchema);

 

とした場合、コレクション名は、memosになる。

なので、コマンドラインからアクセスする場合は、

use demo

db.memos.find( )

で、データベースの中身が見られる。

 

 ▪️今度はC言語からDBにアクセスする

Release Mongo-c-driver 1.1.9 · mongodb/mongo-c-driver · GitHub

からC言語ドライバをダウンロード。

 

./configure

make

 

 でオブジェクトが生成された。

 

C言語でMongoDBを使う - Qiita

を参考にしてみる。

 

 

 

 

 

LeapMotion LeapJS+Ball Poolで遊ぶ

HTML5のサンプル

http://www.mrdoob.com/projects/chromeexperiments/ball-pool/

を、LeapMotionのジェスチャー認識を使って遊んでみます。

 

手を掲げると、手が表示されます。

f:id:marchantime:20130905014438p:plain

 

 

指をタップしてLeapMotionが認識できるジェスチャーをします。

すると、ボールが生成されて、画面の下の方に落ちていきます。

f:id:marchantime:20130905014451p:plain

 

まずはここまでです。

 

LeapMotion Leap.js でジェスチャー取得

Leap.jsを使って、ジェスチャーを取得してみました。

f:id:marchantime:20130903232511p:plain

 

前回から使っている「DOM Visualizer」のソースを改造して、ジェスチャーのIDとタイプを表示するようにしました。

 

ジェスチャーの情報は、Gestureクラスが保持しています。

まず、frameクラスからGestureクラスのオブジェクトを取得します。

var gesture = frame.gestures[0];

 

gestures[id]は、Gestureクラスのオブジェクトのリストです。

ここでは、リストの0番目を指定しましたが、複数のオブジェクトが入ることがあります。なぜなら、複数の指のジェスチャーを同時に認識できるからです。

例えば、手を開いたままグルグルまわすと、5本の指それぞれに対してサークルのジェスチャーが認識されます。

 

次に、Gestureクラスのメンバである、idとtypeを取得します。

if(gesture){

 var gestureId = gesture.id;

 var gestureType = gesture.type;

}

 

typeはstring型で、以下の4種類です。

  • circle
  • swipe
  • screenTap
  • keyTap

 

最後に、表示します。

document.getElementById('out').innerHTML = "<div>"+frame.toString()+ gestureId + gestureType +"</div>";

 

APIは↓ここを参照

http://js.leapmotion.com/api/v0.2.0/docs#leap-gesture

 

LeapMotion マウスの代わり

Touchless For Mac

Leapで取得した点座標をマウスカーソルに変換し、指先をポインティングデバイスに変換するアプリ。

 

マウスで動かすアプリを作れば、これと組み合わせて手で操作できる。

 

LeapMotion LeapJS

LeapMotionを使ったアプリは、Javascriptを使っても簡単に作れるそうだ。

 

ここに、サンプルが公開されている。

http://js.leapmotion.com/examples

 

例えば、Hand and Finger 3D Visualizerを試してみる。

f:id:marchantime:20130829011222p:plain

左手をかざすと、それぞれの指の位置にあわせて物体が表示された。

指をいったん隠して再び表示させると、色がランダムに変化する。

 

もう一つ、1,048,576 Particles これは、粒子がたくさん。

f:id:marchantime:20130829013949p:plain

表示には、WebGLを使用しているらしい。

SafariはデフォルトでWebGLが無効になっていたので、

http://cross.hvn.to/?p=1031 を参考にして有効にしたらちゃんと表示された。

 

 

これらアプリに必要となる”leap.js”はGitbubに公開されている。

https://github.com/leapmotion/leapjs

 

さっそくダウンロードした。

examplesには、dumper.htmlとvisualizer.htmlが入っていた。

 

dumper.htmlを実行

f:id:marchantime:20130829010805p:plain

 

leapmotionからの戻り値が出力された。

 

visualizer.htmlを実行

f:id:marchantime:20130829011026p:plain

 

あれ、何も表示されない。

なぜ???

結局原因は不明のまま。

 

これでは改造しようがないので、

同じアプリと思われる、Hand and Finger 3D Visualizerのソースをダウンロード。

Chromeブラウザで表示して、

ファイル>ページを別名で保存>ウェブページ、完全>保存

sample.htmlとsample/leap.min.jsの2つのファイルが保存された。

 

ローカルに保存したsample.htmlを実行。f:id:marchantime:20130903211739p:plain

 

今度はちゃんと表示されました。

 

見た目も同じで、何が違うの?

ソースの比較だけしてみよう。

 

まず、比較ツールのゲットから。

Perforce Visual Merge and Diff Tools

http://www.perforce.com/perforce/products/merge.html

から、

Perforce ClientsのP4Merge: Visual Merge Toolをダウンロード。

f:id:marchantime:20130903213959p:plain

 

この中から、p4mergeを実行。

 

 

比較。

f:id:marchantime:20130903214408p:plain

 

大きく異なっていたのが、使用しているJavaScript

leap.js と leap.min.js。

 

あとは、

hand.palmPosition

hand.rotation

pointable.tipPosition

pointable.direction

の各XYZ軸の値を取得する際のメンバの指定方法が違ってる。

 

確かに動かない方は、書式が間違っている。古いコードなのかな?