bigquery
VisionAPI
MAGGELAN

MAGELLAN BLOCKS VisionAPIの結果をBQ 複数ファイルが有る場合 後編

More than 1 year has passed since last update.

前編では、最終的に単品ファイルの画像解析を行った。

後編では、複数ファイルがある場合のサンプルを紹介する。


MAGGELAN BLOCKS

MBの各ブロックは、原則としてハードコードされたURLに対してアクセスするように設計されている。単品で実行する場合には条件分岐や、ワイルドカードが使えない。(2016/04/06現在)

動的に挙動を変えたい場合には、外部からボードのAPIを叩くことで任意の変数を渡すことで、特定ブロック内のフィールドに任意の文字列を渡すことができる。

${hoge} という記述が、ブロック内で利用可能となっており。

APIでPOSTする際に、 hogeに対して値を渡すと、ブロック内で展開される。

今回のフローでは、1フローにつき1画像の解析とBQへの1インサートとなっている。100枚の画像解析を行いたい場合には、100リクエストする必要がある。


ボードのAPIの叩き方

各ボードはユニークなURLが割り当てられている。このURLに対して、トークン付きのPOSTを行うことでAPIを叩くことができる。


トークンの作成方法

ボード設定内の下部にトークン生成ボタンが有ります。

API_token.png

API_token2.png

トークンコピーしておいてください。


ブロックに変数を埋め込んでおく

今回、GCSのフルパスを外部から指定したいので、VisionAPIのブロック内の設定に変数を埋め込みます。

VisionAPI_option.png

2)の項目に

${gcs_url}

の文字列を書いておきます。

忘れずにボードを保存します。


単発叩いてみましょう。


bash

wget --post-data="" https://<YOUR-BORAD-URL>/admin/schedules/2.json?api_token="<YOUR-API-TOKEN>"&gcs_url=gs://<YOUR-BUCKET>/<SOMEWHERE>/<FILE-NAME>


横で、ボードのWebUI開いておくと勝手にフローがキックされるのがワカリマス。


画像一杯叩くには?

地味にめんどくさいです。


手順

1) GCSに複数ファイルをアップ

2) ファイルリストを用意する

3) ひたすらキックする。


ファイルをアップロードする

今回は、善意の提供者より頂いた3枚の画像をアップロードしてみる


bash

➜  sample ls

saisyu1.jpg saisyu2.jpg saisyu3.jpg
➜ sample gsutil cp ./*.jpg gs://<YOUR-BUCKET>/mb_img_src/
Copying file://./saisyu1.jpg [Content-Type=image/jpeg]...
Uploading gs://<YOUR-BUCKET>/mb_img_src/saisyu1.jpg: 53.88 KiB/53.88 KiB
Copying file://./saisyu2.jpg [Content-Type=image/jpeg]...
Uploading gs://<YOUR-BUCKET>/mb_img_src/saisyu2.jpg: 57.71 KiB/57.71 KiB
Copying file://./saisyu3.jpg [Content-Type=image/jpeg]...
Uploading gs://<YOUR-BUCKET>/mb_img_src/saisyu3.jpg: 70.21 KiB/70.21 KiB


ファイル名を列挙したファイルを作る


bash

$ ls -1 > filelist.txt

$ cat filelist.txt
saisyu1.jpg
saisyu2.jpg
saisyu3.jpg


リストに従ってキックshell

ファイルリストからファイル名抜いてきて、適当にwgetしちゃいましょう。


sh

#!/bin/sh

MYTOKEN="<YOUR-TOKEN>"
SRCFILE=./filelist.txt
BASEURL="https://<YOUR-BOARD-URL>/admin/schedules/2.json?"
QUERY="api_token="$MYTOKEN"&gcs_url=gs://<YOUR-BUCKET>/<SOMEWHERE-PATH>/"

echo $BASEURL

while read line; do
wget --post-data="" $BASEURL$QUERY$line
done < $SRCFILE



shell

➜  sample ./go_visionAPI.sh


result.png

こんな感じで、WebUI操作せずにフローが勝手に走っていきます。ちょいちょい失敗しますね。


結果発表

ラベル抜いてみました。


その1

eyewear

sunglasses
hair
vision care
glasses

上記ラベルが付いた画像は↓

saisyu2.jpg


その2

lingerie

clothing
photo shoot
dress

上記ラベルが付いた画像は↓

saisyu3.jpg


まとめ

ランジェリーだそうです。www