2018年度のクラウド研究会は本格的に活動を開始いたしましたので、ご報告いたします。

 

■テーマ 「Domino + Box + Watson」

■日時 2018年5月17日(木) 13:30~17:00

■場所 日本アイ・ビー・エム本社(箱崎事業所)

 

手を動かす活動としては初めてとなる今回は、Node-RED を使い「Domino と Watson」、「Box と Watson」の連携が実装できることを検証いたしました。

 

連携の内容は次のとおりです。

  • Notes データベースの文書に添付されている画像(ファイル)に写っているものを Watson で調べる
  • 画像を Box にアップロードしたら自動でタグ付けする 

 

この検証で使用するサービスは3つあります。

  1. Node-RED
    クラウドサービスをつなぎます
  2. Watson “Visual Recognition”
    画像に写っているものやその状態を分析・認識します
  3. Box
    ファイル共有サービスです
 

1と2はどちらも IBM Cloud 上で提供されています。IBM Cloud には短期間の検証作業などに無償でサービスを利用できる便利な「ライト・アカウント」があります。今回は「ライト・アカウント」で登録します。3の Box も無料枠でアカウント登録します。

 

 

まず最初に、環境についての説明があり、Domino のクラウドサービスとの親和性を高めるための設定「Domino Access Service」について確認いたしました。

 

 

環境について

検証に使用するDomino サーバーとして、Notes/Domino on IBM Cloud (SoftLayer) に構築済みの Domino サーバーを利用しました。日本語化した Windows Server 2016 Standard Edition 上に Domino 9.0.1 FP10 が稼働しています。

Notesクライアントですが、参加者全員が検証環境から Domino サーバーへ接続できずセットアップにつまづいてしまったので、検証用のデータベースへは Web ブラウザからアクセスして内容を確認することで回避することになりました。

 

 

Domino Access Service について

Domino Access Service (以降"DAS"と省略) を有効にすることで Domino サーバー上のデータベースを REST API で操作できるようになります。ビューや文書を JSON 形式で扱うことが容易になり、クラウドサービスとの親和性が一層高まります。

 

DAS の設定について、次の3点を確認しました。

  1. Dominoディレクトリにあるサーバー文書
    「インターネットプロトコル - Domino Web Engine」タブにある「Domino アクセスサービス」の「有効なサービス」に"data"を入力
  2. データベースのプロパティ
    もっとも右のタブにある「IBM Domino データサービスを許可」に"ビューと文書"を選択
  3. ビューのプロパティ
    「詳細」タブにある「Webアクセス」の「IBM Domino データサービスの操作を許可」にチェックを付ける

 

 

続いて、サンプルとして用意され DAS の設定が完了している検証環境の Notes データベースへ Web ブラウザから次のURIを指定してアクセスして返される JSON のデータがどのようなものかを見てみました。

 

特定のビューにアクセスする

http://<host>/<database>/api/data/collections/unid/<ビューのUNID>

 

データベースに全文索引があれば、検索する文字列(ダブルバイトの場合はエンコードした文字列)を指定して検索結果を返すこともできます。

http://<host>/<database>/api/data/collections/unid/<ビューのUNID>?search=<文字列>

 


特定の文書にアクセスする

http://<host>/<database>/api/data/documents/unid/<文書のUNID>

 

文書にファイルが添付されている場合、ファイルがBASE64でエンコードされた状態で結果が返します。
パラメータに attachmentlink=true を追加することでエンコードしたファイルへアクセスするためのリンク情報を返します。

http://<host>/<database>/api/data/documents/unid/<文書のUNID>?attachmentlink=true

 

添付されたファイルにアクセスすることもできます。

http://<host>/<database>/api/data/documents/unid/<文書のUNID>/BodyLite/<ファイル名>

 

 

※REST API を使って文書の読み取り/追加/更新/削除もできますが、今回は読み取りだけを確認しました。

 

 

 

 

Notes データベースの文書に添付されている画像(ファイル)に写っているものを Watson で調べる

 

いよいよ Domino と Wastson の連携に進みます。

 

Domino と Watson をつなげるために Node-RED を使用します。Node-RED は、画面上に「ノード」と呼ばれる機能を割り当てた箱を置き、処理する順番にノードからノードを「ワイヤー」でつなぐことでフローを組み立てていくツールです。

 

IBM Cloud で Node-RED を使うには、ボイラープレート(サービスをまとめたテンプレートのようなもの)のカテゴリにある「Node-RED Starter」から、Visual Recognition は Watson のカテゴリの「Visual Recognition」から、リソースを作成します。

 

Node-RED から Visual Recognition を利用する際、APIキーが必要です。サービス資格情報から資格情報を表示して確認しておきます。

 

Node-RED を起動したら、フローエディタ上に4つのノード(「inject」「http request」「visual recognition」「debug」)を並べ、ワイヤーでつなぎます。

 

 

http request ノードをダブルクリックしてプロパティを表示したら、メソッドに "GET" 、出力形式に "バイナリバッファ" 、URL に添付ファイルに直接アクセスできる URI を設定します。

 

 

参考:添付ファイルに直接アクセスできる URI

http://<host>/<database>/api/data/documents/unid/<文書のUNID>/BodyLite/<ファイル名>

 

 

visual recognition ノードのプロパティでは、API Key にサービス資格情報で確認した API キーを、Language に "Japanese" を設定します。

 

 

 

debug ノードのプロパティでは、対象に msg.result を設定します。

 

 

ここまで終わったらデプロイして、inject ノードの左をクリックすると、「デバッグ」タブに Visual Recognition による分析・認識の結果が表示されました。

 

 

Visual Recognition からは5つのワードが返りました。最も高い score は「ネコ」の 1 です。score はワードの確からしさを示しますが、1 というのは「ネコでない訳がない」という自信満々な態度を示したということです。次に「肉食動物」「哺乳類」「動物」が 0.986 、続いて「灰白色」が 0.905 という score でした。

 

このテストで Notes データベースの文書に添付していた画像はこちらでした。すごいですね!

 

 

画像を Box にアップロードしたら自動でタグ付けする

 

次は Box と Watson の連携です。

 

Node-RED で画像へのタグ付けを自動化するには、「Box にアップロードした」ことを Node-RED に伝える必要があります。これには Box 側の Webhook 機能を利用します。Webhook は、ファイルの「アップロード」や「ダウンロード」「コピー」「削除」といったイベントが発生した時に、指定した「エンドポイント」へ通知します。エンドポイントを Node-RED にする訳ですね。

 

Node-RED が通知を受けたら、ファイルがアップロードされたフォルダを通知のパラメータから判定します。特定のフォルダだった場合、Box からファイルをダウンロードして Visual Recognition で分析・認識し、その結果をNode-REDが受け、score が 0.7 以上のワードをタグとして Box へ反映します。

 

ざっくりと言えば Box  ->  Node-RED  ->  Watson  ->  Node-RED  ->  Box というフローをたどります。

 

 

ハンズオンでは時短のため、予め用意されているフロー群を Node-RED へ読み込み、いくつかのノードへ設定するべき情報(Box の認証やフォルダ等)を設定しなおし、デプロイしました。

 

 

結果ですが、筆者のNodeは動きませんでした...認証まわりの設定にミスがあったのかもしれません。ここで時間切れになりました。

幸いにも隣席の参加者(クラウド の IBM Champion 若林氏)が成功していましたので、画面ショットを撮らせていただきました。

 

 

見づらいので白で矢印を加えていますが(汗)、Box へアップロードした「女性の写真」に対して「人」「身体の色」「薄茶色」といったタグが追加されているのがわかります。

 

 

まとめ

 

筆者は今回初めて Node-RED を触りました。シンプルな画面が見やすく、操作もドラッグ&ドロップなどわかりやすいので、プログラミング言語に触れたことのないエンドユーザーにも優しいツールという印象です。

 

これまで、今回利用した Box と Watson 以外にも、気象予報や地図といった特定の分野に特化したサービスであったり、センサーやIoTなどの機器とも Node-RED を通じて Domino とつなぐことができそうな雰囲気は感じていました。このハンズオンで連携できることを検証したことで、参加者の意識は「できそう」から「できる」の方へ近づいたのではないかと思います。