見出し画像

【初心者OK】MicrosoftのAI”Computer Vision”をノーコード&無料で使う(2)

Microsoftの画像やビデオのコンテンツを分析するAIサービス「Computer Vision」を利用する方法を解説します。前回はComputer Visionを動かせるところまでやりました。今回はAirtableとIntegromatを使って、ノーコードでComputer Visionとつなげてみます。

Airtable:ノーコードで構築できるクラウドデータベースです。
https://airtable.com/

Integromat:様々なサービスやツールをノーコードで繋げることができます。
https://www.integromat.com/

どちらも、お試しレベルであれば無料で使うことができます。

今回作成するもの

Airtableに画像のURLを記入すると、IntegromatでComputer Visionに画像のURLを送り、識別した結果と信頼度をAirtableに格納することを目指します。

Airtableでデータベースを用意する

Airtableは見た目はExcelみたいなツールです。(今回利用する範囲に限定すると)Excelと違うところは列ごとに型を設定できることと、1つ1つの行(レコード)に内部的にIDが振られていて、どのレコードが増えた/消えたが管理されているという点です。

Airtableで新規にBase(今回はCognitiveServiceという名前にしました)を作成し、以下の5つの列を用意します。

Name(Single Line Text型) 画像の名前を任意につけます。
ImageURL(URL型) 画像のURLです。
Detected(Single Line Text型) Computer Visionで識別した物体名を格納します。
Confidence(Number型、小数点3桁) Computer Visionから出力された信頼度を格納します。
Created Time(Created Time型) レコードを作成した日時を格納します。これはIntegromatで新しいレコードを発見するために必要です。

画像2

AirtableのAPI Keyを取得する

Airtableのアカウントページに移動し、API Keyを取得します。(Integromatから接続するときに必要)

画像2

Airtableはこれでいったん終了です。

IntegromatでAirtable→Computer Visionのフローを作成する

Integromatにログインし、新しいシナリオを作成します。

画像3

どんなサービスを使うかを聞いてきますのでAirtableを指定します。

画像4

今回はAirtableに新しいレコードが追加されたらComputer Visionに画像のURLを送る、というフローを作りたいので、[Watch records]を指定します。

画像5

設定はこんな感じにします。Trigger fieldではAirtableで作成したCreated Time列を指定します。

画像6

デフォルトでは追加されたレコード1個だけ処理するようになっています。これを増やしたい場合はMax Recordsを増やしてください。

画像31

[OK]をクリックすると、どこからスタートするか聞いてきますが、デフォルトのままでいいと思います。

画像7

続いてComputer Visionに接続するフローを作成します。先ほど作成したAirtableのフローの右側にマウスを持っていくと+マークが現れるのでクリックします。

画像8

HTTPモジュールを追加します。

画像9

[Make a request]を選択。

画像10

Computer Visionに接続する設定をする

たぶん初心者はここが一番難しいと思います(自分も度々引っかかりました)。HTTPモジュールの設定画面が現れますが、いくらノーコードとはいえREST APIを多少理解していないと、この設定画面は難しいかと思います。

画像11

ここで前回で使ったComputer VisionのAPIコンソールの[HTTP request]の項目を開きます。実は上記の設定画面は、下記のコードを転記するようなイメージなのです。

画像12

コードとHTTPモジュールの設定画面を見比べながら入力していきます。
HTTP requestの1行目に

POST https://japaneast.api.cognitive.microsoft.com/vision/v3.0/detect

とあるので、この内容をURLとMethodに入力します。(HTTP/1.1の部分はなくてもいいようです)

画像13

続いてHeaderを入力します。

Host: japaneast.api.cognitive.microsoft.com
Content-Type: application/json
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••

上記のコードを参考にしながら入力します。

画像14

残りの部分を設定します。解説省略しますが、この設定で行けると思います。

画像15

[Request content]のところで水色の”1.ImageURL”になっているところは、欄をクリックすると出てくる変数一覧から選択して入力します。

画像16

Airtable→Computer Visionのフローを試す

では早速試してみましょう。今回作ったフローはAirtableに新規のレコードがないと動きませんので、Airtableにレコードを追加します。

画像17

Integromatで[Run once]をクリック。

画像18

エラーなく終了したら、HTTPモジュールの右上の「1」をクリックして実行結果を確認してみます。

画像19

OUTPUTで"object":"airplane"と返ってきていれば成功です。

画像20

JSONモジュールでComputer Visionから出力された情報を整理する

以上のフローでComputer Visionをノーコードで動かすことができたわけですが、得られたOUTPUTをAirtableに書き込むようにするにはもう一工夫いります。

上記のOUTPUTを見ると、Dataという変数に様々な情報が書き込まれてしまっています。この中からobjectとconfienceだけ取り出すため情報を整理します。この処理にはJSONモジュールを使用します。HTTPモジュールの後ろにJSONモジュールを追加します。

画像23

いくつか候補がありますが、ここではParse JSONを選択。

画像21

実はJSONモジュールはあまり理解できていないのですが、以下のような設定で行けたのでたぶん大丈夫かと。

[Data structure]を指定してAddをクリック。

画像23

現れた画面でGeneratorをクリック。

画像24


Computer VisionのAPIコンソールで得られたResponse contentの{ から }の部分までをコピーします。

画像25

Sampe dataに貼り付けます。

画像27

すると、このような感じになります。Computer Visionから返ってくるデータはJSON形式になっているので、そのデータ構造を読み取ってくれていることがわかります。

画像28

最後にJSON stringにHTTPモジュールのDataを選択して終了。

画像29

JSONモジュールで整理した情報をAirtableに書き込む

整理した情報をAirtableに書き込みます。JSONモジュールの後ろにAirtableモジュールを追加します。今回は既存のレコードを更新するので[Updae a record]を選択します。

画像30

Connection、Base、Tableの設定内容は一番最初のAirtableモジュールと同じです。それ以外の情報の対応は以下の通り。

画像32

一連の流れを動かしてみる

では一連の流れを動かしてみましょう。前述の通りAirtableに新しいレコードがないと動きませんので、新しいレコードを追加するか既存のレコードをDuplicate(複製)しておきます。

画像33

Integromatで[Run once]をクリックします。AirtableのDetectedとConfidenceの列に値が入ってくれば成功です! 上手くいったら、他の画像でも試してみてください。

画像34

複数の物体が検出されたときの対処

写真に物体が1個しか映っていない場合は問題なく動くのですが、複数の物体が検出されると厄介です。たとえばこちらのバスの画像で試すとpersonというデータが入力されてしまいます。

画像35

Computer VisionのAPIコンソールで同じ画像を入力すると、personとshuttle busという2つの物体を認識していることがわかります。

画像37

ここでpersonしか書き込まれないのは、Integromatの最後のAirtableに書き込む処理のところではobjects[1]、つまり認識した物体の最初のものを書き込むようになっているのが原因です。

画像36

対処方法としてはAirtableに2番目、3番目の物体の認識結果を格納する列を作るか、Detected列・Confidence列に複数のデータを書き込むようにするか、といったところかと思います。ここは行いたい処理に合わせて決めていただければと思います。

(参考)Detected列・Confidence列に複数の認識結果を書き込む場合の設定例。この場合Confidence列はSingle Line Text型にする必要があります。

画像39

画像38


ノーコードで広がるAIの民主化

今回ご紹介したのはあくまで一例です。Computer Visionは物体認識以外にも様々な用途で活用できます。しかもノーコードでフローを構築できるので、プログラミング経験がない方でも簡単にクラウドを利用したAIサービスを開発できます。

現在はAIは「凄い人が凄いことをやる」ものではなく、「普通の人が凄いことをやれる」段階に到達しています。しかも無料で試せます。すぐ手に届くところまでやってきているAI。どう使うかは皆様のアイディア次第です。


(補足)IntegromatかZapierか?

今回Integromatでフローを構築しましたが、似たようなノーコードツールでZapierというのもあります。実は使いやすさでいえばZapierのほうが良いのですが、以下の理由によりIntegromatを利用しています。

・Zapierは無料プランでは100タスクまでしか実行出来ない。(お試しレベルでもちょっと不足気味)
・Zapierは複雑な処理が苦手。

(補足)Airtable参考記事

Airtableが初めてな人は、こちらもご参照いただくと理解が深まると思います。今回ご紹介した例ではExcelっぽい使い方をしていますが、本当はもっといろいろなことができます。