
【初心者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で新しいレコードを発見するために必要です。
AirtableのAPI Keyを取得する
Airtableのアカウントページに移動し、API Keyを取得します。(Integromatから接続するときに必要)
Airtableはこれでいったん終了です。
IntegromatでAirtable→Computer Visionのフローを作成する
Integromatにログインし、新しいシナリオを作成します。
どんなサービスを使うかを聞いてきますのでAirtableを指定します。
今回はAirtableに新しいレコードが追加されたらComputer Visionに画像のURLを送る、というフローを作りたいので、[Watch records]を指定します。
設定はこんな感じにします。Trigger fieldではAirtableで作成したCreated Time列を指定します。
デフォルトでは追加されたレコード1個だけ処理するようになっています。これを増やしたい場合はMax Recordsを増やしてください。
[OK]をクリックすると、どこからスタートするか聞いてきますが、デフォルトのままでいいと思います。
続いてComputer Visionに接続するフローを作成します。先ほど作成したAirtableのフローの右側にマウスを持っていくと+マークが現れるのでクリックします。
HTTPモジュールを追加します。
[Make a request]を選択。
Computer Visionに接続する設定をする
たぶん初心者はここが一番難しいと思います(自分も度々引っかかりました)。HTTPモジュールの設定画面が現れますが、いくらノーコードとはいえREST APIを多少理解していないと、この設定画面は難しいかと思います。
ここで前回で使ったComputer VisionのAPIコンソールの[HTTP request]の項目を開きます。実は上記の設定画面は、下記のコードを転記するようなイメージなのです。
コードとHTTPモジュールの設定画面を見比べながら入力していきます。
HTTP requestの1行目に
POST https://japaneast.api.cognitive.microsoft.com/vision/v3.0/detect
とあるので、この内容をURLとMethodに入力します。(HTTP/1.1の部分はなくてもいいようです)
続いてHeaderを入力します。
Host: japaneast.api.cognitive.microsoft.com
Content-Type: application/json
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
上記のコードを参考にしながら入力します。
残りの部分を設定します。解説省略しますが、この設定で行けると思います。
[Request content]のところで水色の”1.ImageURL”になっているところは、欄をクリックすると出てくる変数一覧から選択して入力します。
Airtable→Computer Visionのフローを試す
では早速試してみましょう。今回作ったフローはAirtableに新規のレコードがないと動きませんので、Airtableにレコードを追加します。
Integromatで[Run once]をクリック。
エラーなく終了したら、HTTPモジュールの右上の「1」をクリックして実行結果を確認してみます。
OUTPUTで"object":"airplane"と返ってきていれば成功です。
JSONモジュールでComputer Visionから出力された情報を整理する
以上のフローでComputer Visionをノーコードで動かすことができたわけですが、得られたOUTPUTをAirtableに書き込むようにするにはもう一工夫いります。
上記のOUTPUTを見ると、Dataという変数に様々な情報が書き込まれてしまっています。この中からobjectとconfienceだけ取り出すため情報を整理します。この処理にはJSONモジュールを使用します。HTTPモジュールの後ろにJSONモジュールを追加します。
いくつか候補がありますが、ここではParse JSONを選択。
実はJSONモジュールはあまり理解できていないのですが、以下のような設定で行けたのでたぶん大丈夫かと。
[Data structure]を指定してAddをクリック。
現れた画面でGeneratorをクリック。
Computer VisionのAPIコンソールで得られたResponse contentの{ から }の部分までをコピーします。
Sampe dataに貼り付けます。
すると、このような感じになります。Computer Visionから返ってくるデータはJSON形式になっているので、そのデータ構造を読み取ってくれていることがわかります。
最後にJSON stringにHTTPモジュールのDataを選択して終了。
JSONモジュールで整理した情報をAirtableに書き込む
整理した情報をAirtableに書き込みます。JSONモジュールの後ろにAirtableモジュールを追加します。今回は既存のレコードを更新するので[Updae a record]を選択します。
Connection、Base、Tableの設定内容は一番最初のAirtableモジュールと同じです。それ以外の情報の対応は以下の通り。
一連の流れを動かしてみる
では一連の流れを動かしてみましょう。前述の通りAirtableに新しいレコードがないと動きませんので、新しいレコードを追加するか既存のレコードをDuplicate(複製)しておきます。
Integromatで[Run once]をクリックします。AirtableのDetectedとConfidenceの列に値が入ってくれば成功です! 上手くいったら、他の画像でも試してみてください。
複数の物体が検出されたときの対処
写真に物体が1個しか映っていない場合は問題なく動くのですが、複数の物体が検出されると厄介です。たとえばこちらのバスの画像で試すとpersonというデータが入力されてしまいます。
Computer VisionのAPIコンソールで同じ画像を入力すると、personとshuttle busという2つの物体を認識していることがわかります。
ここでpersonしか書き込まれないのは、Integromatの最後のAirtableに書き込む処理のところではobjects[1]、つまり認識した物体の最初のものを書き込むようになっているのが原因です。
対処方法としてはAirtableに2番目、3番目の物体の認識結果を格納する列を作るか、Detected列・Confidence列に複数のデータを書き込むようにするか、といったところかと思います。ここは行いたい処理に合わせて決めていただければと思います。
(参考)Detected列・Confidence列に複数の認識結果を書き込む場合の設定例。この場合Confidence列はSingle Line Text型にする必要があります。
ノーコードで広がるAIの民主化
今回ご紹介したのはあくまで一例です。Computer Visionは物体認識以外にも様々な用途で活用できます。しかもノーコードでフローを構築できるので、プログラミング経験がない方でも簡単にクラウドを利用したAIサービスを開発できます。
現在はAIは「凄い人が凄いことをやる」ものではなく、「普通の人が凄いことをやれる」段階に到達しています。しかも無料で試せます。すぐ手に届くところまでやってきているAI。どう使うかは皆様のアイディア次第です。
(補足)IntegromatかZapierか?
今回Integromatでフローを構築しましたが、似たようなノーコードツールでZapierというのもあります。実は使いやすさでいえばZapierのほうが良いのですが、以下の理由によりIntegromatを利用しています。
・Zapierは無料プランでは100タスクまでしか実行出来ない。(お試しレベルでもちょっと不足気味)
・Zapierは複雑な処理が苦手。
(補足)Airtable参考記事
Airtableが初めてな人は、こちらもご参照いただくと理解が深まると思います。今回ご紹介した例ではExcelっぽい使い方をしていますが、本当はもっといろいろなことができます。