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

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

2015年03月

以前のブログエントリで、IBM IoT Foundations から提供されているオンライン IoT シミュレータを紹介しました:
センサー付き IoT シミュレータ


MAC アドレスを持つセンサー付き IoT デバイスがソフトウェアでシミュレートされていて、温度や湿度などの情報を任意値に変えることができ、かつ MAC アドレスを通じてそれらの値を取得することができるようになっている、というものです。

今日はこのシミュレータを使って IoT のリアルタイムアプリケーション・・・と呼んでいいのかどうか微妙ですが、IoT リアルタイムアプリケーションの前段階になるようなフローチャートを、IBM Bluemix の Node-RED サービスを使って作成する、という手順を紹介します。 前半の今回は Node-RED サービスと IoT センサーシミュレータが接続できる確認までを、次回はもう少しワークフローっぽい内容のアプリケーションを実際に作るサンプルを紹介します。


では最初に Node-RED について簡単に紹介します。Node-RED は IBM Emerging Technology が作成したオープンソースツールです。入力/出力/処理といった様々な種類のブロックを組み合わせるだけでワークフローを作ることができるツールで、その入力は各種デバイスであったりネットサービスであったり、出力結果はデータストアであったりウェブサービスであったりします。独自に開発するコードを使わない場合であれば、ほぼコーディングは不要です。Node-RED 自体は IoT 専用のツールではないのですが、IoT 向けのアプリケーションを非常に簡単に作ることができます。この辺りは「論より証拠」なので、早速使ってみましょう。


まず接続する IoT センサーシミュレータの情報を確認しておきます。「センサー付き IoT シミュレータ」にアクセスして、横スワイプで Object Temperature(機器温度)の画面に切り替えます(この画面では初期値が 24 度になっていることが確認できます)。同時に画面右上部の MAC アドレスをメモしておきます。今からこの仮想センサーの機器温度の値を取得するアプリケーションを Node-RED を使って作成します:
2015032019


Node-RED の環境を簡単に準備するために IBM Bluemix のボイラープレート(テンプレート)機能を使います。まず IBM Bluemix にログインして、「カタログ」の「ボイラープレート」カテゴリから、「Node RED Starter」を選択します。このボイラープレートを選択することで、初期データストア機能まで含めた Node-RED 環境を簡単に構築できます:
2015032001


Node-RED Starter の設定画面です。設定といっても注意すべきはアプリケーションの名前くらいです。インターネット上のホスト名として重複のない名前(この例では自分の ID を使って dotnsf-nodered という名前を指定することで重複を避けています)を入力し、「作成」ボタンをクリックします:
2015032002


Node-RED Starter ボイラープレートを使ったアプリケーションの起動が開始されます。ここで一度ダッシュボードに戻ります:
2015032003


しばらく待つとアプリケーションサーバーと各種サービスが全て起動し、作成したアプリケーション(この例では dotnsf-nodered)が「実行中」というステータスになります。この時点で Node-RED エディタが使えるようになっています:
2015032004


実際に Node-RED エディタを使ってみましょう。ダッシュボードでアプリケーションを選択後、アプリケーションが起動していることを確認したら「経路」と書かれた箇所に表示されているリンクをクリックして、Node-RED アプリケーションにアクセスします:
2015032005


このような Node-RED の初期画面が表示されるはずです。画面下部の "Go to your Node RED flow editor" と書かれたボタンをクリックします:
2015032006


Node-RED エディタ画面が表示されます。環境によっては初期状態でなんらかのブロックが画面中央のキャンバス設置されていることがあるかもしれませんが、一旦全て削除(マウスでクリックして DEL キー)して、キャンバスを空の状態にしておきます:
2015032007


ではこの状態から、IoT センサー(シミュレーター)の機器温度値を取得して表示する、というアプリケーションを作ってみます。画面左ペインの input カテゴリから "ibmiot" と書かれたブロックをドラッグ&ドロップしてキャンバス内に配置します。このブロックが「IoT 機器からの入力」と意味するブロックになります:
2015032008


"ibmiot" ブロックがキャンバス内に配置されました。同時に画面右ペインの info タブ内にこの "ibmiot" ブロックに関する属性が表示されます:
2015032009


配置された "ibmiot" ブロックをダブルクリックすると、この "ibmiot" ブロックの属性値を変更する画面が表示されます。このブロックを IoT センサーシミュレータとするために、以下の値を入力します:
 Authentication: "Quickstart"
 Input Type: "Device Event"
 Device Id: IoT センサーシミュレータに表示されていた MAC アドレス(英字は全て小文字、コロンなし)
 Name: "IoT Sensor"(表示上の名前なのでなんでも可)
最後に OK ボタンをクリックして、この編集画面を終了します。これで MAC アドレスの値が間違っていなければ、このブロックは IoT センサーシミュレータをエミュレートしていることになり、センサーの値が取得できるようになりました:
2015032010


次に画面左ペインの output カテゴリから "debug" と書かれたブロックをキャンバス内にドラッグ&ドロップします:
2015032011


続けて "ibmiot" ブロックから "debug" ブロックに向けてマウスをドラッグします:
2015032012


するとこの2つのブロックの間が線で繋がり、下図のような状態になります:
2015032013


ここで "debug" ブロックをダブルクリックして属性を確認します(以下のデフォルト値のまま変更する必要はありません、この内容になっていることを確認して OK ボタンをクリックしてください)。これでこのブロックは入力値として入ってくるデータの中の msg.payload の値を debug タブに出力する、という処理を行うブロックになりました:
2015032014


ここまでの作業でどのようなワークフローになるか、一度実行して確認してみましょう。画面右ペインを "debug" にした上で、右上の "Deploy" ボタンをクリックします:
2015032015


画面上部に "Successfully deployed" と表示されれば、このワークフローが正しくデプロイされて稼働したことを意味します:
2015032016


しばらくすると画面右ペインの "debug" タブに値が JSON テキストが2秒おきに表示されはじめます。これが IoT センサーシミュレータから得られた msg.payload の値です(d.objectTemp の値が 24 になっていることを確認してください。IoT センサーシミュレータで設定されている Object Tempreture の値と同じです):
2015032018


ではこの状態で IoT センサーシミュレータの機器温度を変更してみます。矢印ボタンを何度かクリックして機器温度を別の値に(下図では 41 度に)変更します:
2015032020


その直後から Node-RED エディタ内の debug タブに表示される値の d.objectTemp の値も 24 から 41 に変わるはずです(画面ではその途中の 36 度の時の値も表示されています):
2015032021


つまり、この Node-RED キャンバス内に配置された "ibmiot" ブロックは(MAC アドレスを指定しただけですが)IoT センサーシミュレータのデバイスをシミュレートして動いていることが分かりました。そしてこのデバイスから送られてくるセンサーからの入力値は debug ブロックによって正しく出力できていることもわかりました。

とりあえず前半はここまで。Node-RED エディタを使って IoT 機器(シミュレータ)からセンサーの値を取得して表示する、というシンプルなワークフローを作ることができました。次回はもう少し複雑なワークフロー処理を実現する予定です。

















 

先日、このブログでも紹介した、IBM Bluemix から提供されている性格分析の人工知能 API "Personality Insights" に関する新着情報です:
IBM Bluemix で性格分析サービスを使う


Bluemix から提供されているコグニティブ(学習型人工知能)サービスの先陣を切って、この Personality Insights API がベータ版を卒業し、正式サービスとしての運用が開始されました:
2015032000
↑「IBM ベータ」の「ベータ」が取れました。


そして正式公開に併せて価格も変更されました。これまではベータ版だったため、制限なく無料で利用できていましたが、今後は1回のコールにつき 63 円かかります。ただし月間 100 コールまでは無料枠として実行できるようになっています:
2015032001

今後、この API を利用する場合は料金にもご注意ください。なお、現時点では他のサービスはまだベータ版扱いとなっています。

(2015/03/21 補足)
この正式サービスインされた Personality Insights サービスも無料トライアル30日期間中は制限なく無料で利用できます。






 

IBM のクラウドサービスの1つに IoT(Internet of Things) Foundations があります:
IBM Internet of Things Foundation
2015031701


このポータルサイトでは、各種 IoT デバイスの情報やクイックスタート情報などが提供されるほかに、インターネットから使えるシミュレータが提供されています:
IoT Sensor
2015031702


この仮想 IoT シミュレータには温度/湿度/機器温度という3つの仮想センサーが付いています。横スワイプでセンサーの種類を切り替えることができて、画面内のボタンでそれぞれの数値を切り替えることができるようになっています。また画面右上にはこの IoT 機器が使っている仮想的な MAC アドレスが表示されているはずです:
2015031703


右上の MAC アドレス部分をクリックすると、この各センサーの値を2秒毎に更新して表示する確認画面が表示できます。この図では Object Temprature(機器温度)を 25 度から 31 度に上げた直後の様子が示されています:
2015031704


この画面下の表をクリックすることで、別のセンサーのグラフに切り替えることができるようになっています:
2015031705


IoT (のシミュレータ)がスタンドアロンで動いている、この部分だけを見ると特別に面白いことはないですよね。

でもこのグラフが表示される確認画面は MAC アドレスだけを頼りに動いています。その IoT 機器が物理的に存在するものなのか、仮想的なシミュレータなのかは区別していません。例えばラズベリーパイなどの IoT 機器に温度センサーが付属していて、インターネットにつながった状態で稼働しているのであれば、そのラズベリーパイの MAC アドレスを指定することで、この確認画面にはラズベリーパイの温度センサーからの情報が表示される、ということです。


ということは、各種温度情報を MAC アドレスベースのセンサーから提供するような IoT 実機の代わりにこのシミュレーターを使ってアプリやサービスを開発することができて、本番の IoT 実機を使う時は MAC アドレスを実機のものに切り替えればよい、ということになります。要は単にスタンドアロンでこのシミュレータが動いているわけではなく、非常に手軽にリモート IoT 機器のシミュレーションを行うことができる環境が提供されていることになるのでした。


このブログエントリでは、このインターネット上で手軽に使える IoT Sensor シミュレータの紹介までとしますが、この続きとして、このシミュレータを使った IoT アプリケーションを開発するサンプルを紹介する予定です。お楽しみに。




 

IBM Bluemix から提供されているコグニティブ(Cognitive : 学習型人工知能)サービスの1つ、Personality Insights サービスを紹介します:
2015031601


このサービスは IBM が研究開発しているコグニティブエンジンの1つである WATSON サービスの1つで、与えられたテキスト情報(メール本文など、1人の誰かが書いたテキスト)だけを元に、その人の性格を分析する、というサービスです。残念ながらまだ日本語テキストには対応していませんが、英語メッセージであれば、ベータ版の現在は無料でこの機能を利用することが可能です。


このサービスの API が IBM Bluemix を通じて提供されます。つまり IBM Bluemix をお使いのユーザーであれば誰でもこの API を利用することができることになります。人工知能やその学習、ビッグデータ解析といった複雑な部分は全てブラックボックス化されており、単純にテキストをポストすれば結果を JSON フォーマットで取得できます。

このサービスはデモサイトが用意されています。API を使う前に、まずはこのサービスがどのようなものかをデモサイトを体験することで理解してみましょう:
Personal Insights Demonstration


上記ページを開くと、画面左ペインに英文テキストが表示されています。この中に解析したいテキスト(メール本文など)をコピー&ペーストなどで入力します。最初はデフォルト状態で入力されているテキストをそのまま使っても構いません:
2015031602


なお解析を行うには 100 単語以上からなるテキストを入力する必要があります(短すぎると解析できません):
2015031603


"Analyze" ボタンをクリックすると、このテキストが Personal Insights API に送られ、性格分析が行われます。その結果が画面右側に表示されます:
2015031604


更に下部には結果を視覚化したグラフが表示されています。この視覚化機能も現在は API の一部として提供されていますが、現在では deprecated 扱いになっており、将来的には使えなくなる(D3.js など別途視覚化ライブラリを使ってグラフ化する必要がある)予定になっています:
2015031606


上記のように、現在では与えられたテキストから、その著者の性格を分析して JSON フォーマットで返すという API と、その結果を更に視覚化する、という API の、2つの API が提供されています。ただし後者については将来的に廃止予定となっている、という状況です。まあ視覚化のための要素は JSON で取得できるため、後は何らかのライブラリを使って表示すればいいのだと思っています。グラフ化はあまりコグニティブな要素もないためだと思われます。


実際の使い方は API Reference を参照いただきたいのですが、Personality Insights プロファイル API のエンドポイントである https://gateway.watsonplatform.net/personality-insights/api/v2/profile (実際にはこの値も環境変数から取得できます) に対して、認証情報と解析したいメッセージ本文をプレーンテキストで POST すると、解析結果が以下のような、サンプリング誤差率※も含めたツリー型の JSON フォーマットで取得できる、というものです(赤字はコメント):
{
 "id":"*UNKNOWN*",
 "source":"*UNKNOWN*",
 "word_count":2196,  単語数
 "tree":{
  "id":"r",
  "name":"root",
  "children":[
   {
    "id":"personality",  性格
    "name":"Big 5 ",  性格の5大要素
    "children":[
     {
      "id":"Openness_parent",
      "name":"Openness",  社交性
      "category":"personality",
      "percentage":0.9493716242287923,  94.94%
      "children":[
       {
        "id":"Openness",
        "name":"Openness",  社交性
        "category":"personality",
        "percentage":0.9493716242287923,  94.94%
        "sampling_error":0.14430105599999998,  サンプリング誤差率 14.43%
        "children":[
         {
          "id":"Adventurousness",
          "name":"Adventurousness",  冒険心
          "category":"personality",
          "percentage":0.7224550516937974,  72.25%
          "sampling_error":0.11646272  サンプリング誤差率 11.65%
         },
         {
          "id":"Artistic interests",
          "name":"Artistic interests",  芸術性への興味
          "category":"personality",
          "percentage":0.16797400413558944,  16.80%
          "sampling_error":0.22150304  サンプリング誤差率 22.15%
         },
         {
             :
         }
       },
       {
         :
       }
      ]
     },
     {
       :
     }
   }
  ]
 }
}
※サンプルを元に推定した結果と、実際の値との誤差。この値が小さいほど精度が高い推測値、ということになる

後はアプリケーション側で、この得られた JSON テキストを解析して、一定の誤差率を下回るものだけを対象にするなどして性格分析結果を可視化する、といった処理をすることになると思います。


この Personality Insights API に関しては、解析結果に確実性だけでなくサンプリング誤差率まで含めて提供されるので、アプリケーション側での扱いにも自由度というか、独自性を出しやすい API だと感じました。




 

(少なくともこのブログでは)最近ホットな話題である「人工知能による画像認識機能」を拙作マンホールマップで使ってみました:


個別のマンホールページの右下部分に "Visual Recognition(Beta)" と書かれたリンクがあります。表示の通り、現時点ではベータ機能扱いです:
 2015031501


モバイル用ページの場合は一番下:
2015031502


ここをクリック/タップすると、「このマンホールに描かれた画像」を画像認識 API を使って調べた結果がトグル表示されます(もう一度クリック/タップすると消えます):
2015031503

上の画像の例だと "Nature_Scene"(自然の風景)68.56% とか、"Water_Scene"(水辺の風景) 61.96% とか・・・ マンホールというよりも、その周囲を読み取っているんでしょうかね。。


この画像認識 API は IBM Bluemix を通じて提供されている Watson Visual Recognition API を使って実装しています。画像認識のややこしい部分が全てブラックボックス化されていて、画像のバイナリデータをポストするだけで解析結果を JSON で返してくれる、というものです。なお、このAPI で使われている人工知能は「学習型」なので、同じ画像バイナリに対して必ずしも同じ結果を返すわけではありません。(精度が上がるかどうかはともかくとして)少しずつ学習しているようで、ある程度の時間をおいて実行すると少しずつ結果が異なるようです。


この API は非常にシンプルなので、私のように画像認識の難しい知識を持っていなくても簡単に使えます。サンプルというか実装例は以前のブログエントリで紹介しているので、興味のある方はこちらも参照ください:
Watson の画像認識 API を使う(2/2)



このページのトップヘ