投稿日

在庫の減りも、設備の異変も見逃さない! SORACOM Flux が複数画像入力に対応

こんにちは!クラウド型カメラサービス「ソラカメ」と、SORACOM Fluxの事業責任者を担当しております高見(ニックネーム:yuu)です。

この度、生成AIにてデータや画像の解析を行えるSORACOM FluxのAIアクションにて、1度に複数枚の画像データを生成AIに渡して解析することが可能になりました。これにより、例えば小売業であれば10分毎にアプリ起動すれば、現在と10分前の商品棚の画像を一度に生成AIに渡して、画像の比較を基に在庫数量の変化を検知し、通知することができますし、インフラ等の設備点検業務であれば、1日に1回、定時で画像比較し前日の画像データとの違いを生成AIに解析させメールなどで報告させると行ったことが可能になります。

今回は、ソラカメとSORACOM Fluxを用いて、「現在と10分前の商品棚の画像を一度に生成AIに渡して、在庫数量の変化を検知し通知する」を実現する具体的な設定内容や手順についてブログ記事として皆さんにご紹介させて頂きます。

はじめに

実現するために事前に準備する必要がある機材やライセンス等をご紹介致します。

  • ATOM Cam 2 または ATOM Cam Swing(固定画角で差分検出する場合は固定画角のATOM Cam 2を推奨致します)
  • ソラカメ クラウド常時録画ライセンス(保存期間はいずれでも問題有りません)
  • SORACOM Flux Standard plan(Developerプランですとメッセージ集約アクションがご利用頂けません)
  • カメラを設置する場所にWi-Fi (2.4GHz帯)が利用できること(詳細なNW条件はこちら)※通信帯域は1台につき上り1.5Mbps必要

まずは完成形のイメージからご説明致します。

「現在と10分前の商品棚の画像を一度に生成AIに渡して、在庫数量の変化を検知し通知する」を実現するために、作成するFluxアプリは以下のとおりです。


それぞれのアクションが何をしているかは、①〜⑥のとおりとなります。

① インターバルタイマーで10分間隔でFluxアプリを起動する
② チャネルを分岐させ、2つのRepublishアクションを作成し、「現在」と「5分前」の時刻をそれぞれ指定する
③ ソラカメ画像取得アクションにて、「現在」の画像を取得、「5分前」の画像取得がそれぞれ作動する。(分岐させたので2つ作動します)
④ AIアクションに渡す際には2つの静止画を同時に渡したいので、メッセージ収集アクションで、ソラカメ画像取得アクションから出力された結果(payloadと呼ばれます)を1つにまとめるために集約する。(ここで分岐させたアクションが1つに集約されます。具体的には、ソラカメから切り出した画像が一時的に格納された画像URL2つが、1つのJSON配列にまとめられます。)
⑤ AIアクションにて、生成AIに2つの画像URLを引き渡し、指定したプロンプトに基づいて解析させる
⑥ AIアクションでの解析結果を受取り、指定条件(在庫が減った場合等)にマッチする場合のみ、指定したメールアドレスにメールが送付される

では、それぞれのアクションの設定方法を順を追って解説させて頂きます。

①インターバルタイマーを設定する

まずInternal Consoleのホーム画面左上の「メニュー」から「SORACOM Flux」>「Fluxアプリ」を押してください。

「新しいFluxアプリを作成する」を押して下さい。

「最初から作成」を押して下さい。

名前の入力欄に任意の名前をつけて下さい。なんでも構いません。概要は空欄で問題ありません。

入力したら、「作成」ボタンを押して下さい。

「チャネルを作成する」を押して下さい。

「インターバルタイマー」を押して下さい。

名前はデフォルトの「Timer Channel」のままで問題有りません。

スケジュール定義はどのくらいの頻度で設定して下さい。この例では10分に設定しています。設定したら、必ず「チャネルを作成」ボタンを押して下さい。
また、試す段階ではスケジュール定義上のボタンは「無効」にしておいてください。「有効」になっているとFluxアプリ作成中も作動してしまいます。

Fluxアプリの作成が完了したら、最後に「無効」から「有効」に変更することをおすすめします。

次に、「アクション」タブをおして、「アクションを追加」ボタンを押して下さい。

「Republish」を選択し、「OK」を押して下さい。

② Republishアクションを設定する

まず1つ目のRepublishアクションを設定します。Fluxアプリが起動した「現在」(画像取得タイミング)を指定するためのアクションです。

名前は、任意の名前をつけてください。デフォルトはRepublishになっていますが、今回2つRepublishアクションを設定するので、名前が重複するとエラーになるので、何かしら識別できる名前をつけて下さい。

それ以外の設定項目は以下を設定して下さい。

1つ目のRepublishアクションでは「アクションのアウトプットを別のチャネルに送信する」を「有効」にし、チャネル名を「Output Channel」としてください。

高度な設定トグルをおして、遅延を5秒に設定します。(5分前の画像と、現在の画像の取得が並行して作動するので、現在の画像が後に出力されるように遅延させています。)

${now()}というのはFlux上で現在時刻を指定する関数になります。詳細な記法については、SORACOMユーザーガイドをご参照下さい。

入力し終わったら、「作成する」ボタンを押して下さい。

次に2つ目のRepublishアクションを設定します。Fluxアプリが起動した「5分前」(画像取得タイミング)を指定するためのアクションです。

上図の円筒形のアイコン(チャネル)をクリックし、「アクション」タブをおして、「アクションを追加」ボタンを押して下さい。

「Republishアクション」を選択して「OK」ボタンを押します。

名前は、任意の名前をつけてください。それ以外の設定項目は以下画像の通り設定して下さい。

2つ目のRepublishアクションでは「アクションのアウトプットを別のチャネルに送信する」を「有効」にし、「既存のチャネルを選択する」をクリックし、プルダウンから先程作成した既存のチャネル「Output Channel」を選択してください。(これで出力先が同じチャネルになります)

${addMinutes(now(), -5)}というのはFluxアプリが稼働した5分前を指定する関数になります。10分前なら-10となります。
その他に数時間前を指定するなど様々な時間関数が使えますので、詳細はユーザーガイドをご確認ください。

入力し終わったら、「作成する」ボタンを押して下さい。

③ ソラカメ画像取得アクションを設定する

ここまでうまく進んでいれば、以下のようなワークフローが設定されていると思います。

ピンクで囲っているRepublishアクションの後ろのチャネル(円筒形のアイコン)をクリックしてください。

ソラカメ画像取得アクションを選択して下さい。

ソラカメ画像取得アクションの設定画面が表示されますので、以下の通り設定して下さい。

デバイスIDは、お手持ちのソラカメ(クラウド録画ライセンスが割り当てられているもの)のMACアドレスになります。

MACアドレスは、ATOM Camの底面のシールでも確認できますし、SORACOMユーザーコンソールのデバイス一覧からもご確認頂けますので、そちらでご確認されてください。広角補正のチェックボックスはONにしていますが、つけなくても問題は有りません。ONにすることで広角レンズ撮影による歪みを補正してくれます。

チャネル名は「Soracam Image Output」とします。(任意の名前で問題有りません。設定したら、「作成」ボタンを押して下さい。

④ メッセージ収集アクションを設定する

ソラカメ画像取得アクションの後ろにあるチャネル(円筒形のアイコン)をクリックします。

アクションタブを押し、「アクションを追加」ボタンをクリックします。

メッセージ収集アクションを選択し、「OK」ボタンをクリックしてください。

以下の通り、設定して「作成する」ボタンを押して下さい。

以下の様なワークフローになっていれば、正しく設定されています。

アンカーとは集約したい対象が分岐した地点を指します。今回はインターバルタイマーの後ろにあるTimer Channelを分岐させ、現在と5分前の2つのタイミングを分岐してアクションを生成し、それぞれの画像取得を行っています。(システム上は5分前画像取得が先に実行され、遅延させたので5秒遅れて現在の画像取得が実行されます)それをAIアクションで生成AIに渡すときに同時に引き渡す必要があるため、メッセージ集約アクションで同期させて(現在の画像取得実行が終わるのを待ってから)後ろのチャネルに画像URL情報を引き渡すということを実施しています。

⑤ AIアクションを設定する

メッセージ収集アクションの後ろのチャネル(円筒形のアイコン)をクリックします。

「アクション」タブをクリックし、「アクションを追加」ボタンをクリックします。

以下画面が表示されるので、AIアクションを選択し、「OK」ボタンを押して下さい。

AIアクションの設定画面が開くので、以下画像の通り設定して下さい。

AIモデルは「Gemini 2.5 Flash」を選択していますが、任意のモデルを選択頂いて構いません。今回のケースですとGemini 2.5 Flash-Liteでも十分かと思いますが、解析されたい内容に応じて、お試し頂き最適なモデルをご選定下さい。

選択する生成AIのモデルによって消費クレジットが変わりますのでご注意下さい。1枚あたりの消費クレジットはこちらのページを参照して下さい。複数枚の画像を消費した場合は 画像枚数 x 1枚あたりの消費クレジットとなります。

具体例をご紹介すると、Gemini 2.5 Flashは1枚あたりの消費クレジットは17です。今回は2枚を比較するので 2 x 17 = 34クレジットを1回のFluxアプリ起動で消費します。

<プロンプト> ※プロンプトはご利用用途に応じてご自由に変更下さい。

画像には陳列棚が映っています。上段にはりんごが、下段にはクラウドカメラの箱が陳列されています。
今回は上段にあるりんごの数をカウントし、以下JSONフォーマットで出力して下さい。

現在の画像の解析結果はcurrent_image, 過去の比較対象画像の解析結果はpast_imageとします。

JSON サンプル
{"current_image":10, "past_image":8 }

<画像URLとラベルの設定値>

画像URLの指定はそれぞれ以下のとおりです。コピーできるように文字表記も掲載致します
画像ラベルは生成AIにプロンプトで伝える場合に、どの値を指すか自然言語で指示できるようにするために名称をラベルとしてつけるものです。

  • ${payload.messages[0].imageUrl} : 過去の比較対象画像  ※今回だと5分前の画像
  • ${payload.messages[1].imageUrl} : 現在の画像

<補足> ※ご関心の無い方はスキップして下さい。

なぜ${payload.message[0].imageUrl}の様な表記になるか理解されたい方は、SORACOMユーザーガイドをご参照ください。

簡単にご紹介しますと、1つ前のアクションチャネルに出力したデータ(JSON形式)全体をpayloadといいます。
今回は2回の画像取得アクションをメッセージ収集アクションで1つの出力に集約しているため、以下のようなJSON配列として出力されています。
JSON配列 messagesの0番目にキー”imageUrl”に5分前の画像URLが格納されており、messages1番目にキー”imageUrl”に現在の画像URLが格納されているためこのような記法になります。

${payload.message[0].imageUrl}は、payloadの中のmessages配列の0番目、の中にあるimageUrlの値を意味しています。

<1つ前のメッセージ収集アクションから出力されるJSONデータ>

{
  "messages": [
    {
      "deviceId": "7CDDE9xxxxxx",
      "imageUrl": "https://flux-core-temporary-object-storage-jp-prod.s3.ap-northeast-1.amazonaws.com/xxxxxxxx",
      "exportId": "cad71b7a-8f27-416b-94da-xxxxxxx",
      "datetime": "2026-06-11T02:58:39.850Z"
    },

    {
      "deviceId": "7CDDE9xxxxxx",
      "imageUrl": "https://flux-core-temporary-object-storage-jp-prod.s3.ap-northeast-1.amazonaws.com/xxxxxxx",
      "exportId": "a68bccc9-9ca6-4eb8-a793-3fa5377c45dc",
      "datetime": "2026-06-11T03:58:39.848Z"
    }
  ]
}

⑥ Email通知アクションを設定する

AIアクションの後ろのチャネル(円筒形のアイコン)をクリックします。

「アクション」タブをクリックし、「アクションを追加」ボタンをクリックします。

以下画面が表示されるので、Email通知アクションを選択し、「OK」ボタンを押して下さい。

Email通知(高機能)アクションを利用すると、通知メールに画像を添付することも可能です。(Standard planのご契約が必要)

Email通知アクションの設定画面が開いたら、以下の画像の通り設定して下さい。

コピーする方は以下テキストをご活用下さい。

<アクションの実行条件>

payload.output.current_image < payload.output.past_image

<メール本文>

りんごの在庫数が${payload.output.past_image-payload.output.current_image}個、減りました。
ご確認下さい。

${payload.output.past_image-payload.output.current_image}は、(5分前のAIがカウントしたりんごの数) – (現在のAIがカウントしたりんごの数)という計算をして、もし現在のりんごの数のほうが低かったら(在庫が減っていたら)、メールで通知をするという実行条件を指定しています。

current_image, past_imageという名称はAIアクションのプロンプトでそのようなJSONのキーと値で出力するよう指示しているためです。
詳細を知りたい方は、AIアクションの後ろのチャネル(AI Output)をクリックし、メッセージ履歴タブを押して、AIからどのようなデータがJSON形式で出力されているかご確認下さい。記法などはSORACOMユーザーガイドをご確認下さい。

Fluxアプリ設定が完了!テスト実行してみましょう。

うまく設定が完了すると以下のようなワークフローが完成しているはずです。

では、テスト実行してみましょう。インターバルタイマーのアイコンをクリックしてください。

テスト実行タブを押し、Bodyの入力フォームはそのままでいいので、「実行」ボタンを押して下さい。テスト実行が開始されます。

※テスト実行を押すと1度だけ実行を試すことができます。イベントやクレジットはテスト実行であっても消費されます。予めご了承下さい。

テスト実行すると、以下のようなフローチャートが画面に動的に表示されると思います。エラーがでるとエラー箇所がひと目でわかるようになっています。

このサンプルキャプチャですと、Email通知アクションにチェックボックスがついていませんが、在庫の数が減っている場合はチェックボックスがつきます。(以下画像キャプチャでは、在庫数量が減っていないためメールが送付されなかった表示です。エラーがある場合バツ印が表示されます。)

Email通知実行条件が満たされた場合、以下の様なメールがEmail通知アクションで送付先に指定したメールアドレスに届きます。

最後に、今回作成したFluxアプリを正式に利用開始したい場合は、インターバルタイマーを「無効」から「有効」に変更し、「変更を保存」ボタンを押して下さい。これ以降はスケジュール定義した間隔でFluxアプリが起動します。

まとめ

いかがでしたでしょうか?

今回新しくリリースされた「一度に複数枚画像を生成AIに渡す」機能により、複数枚画像の比較を生成AIにさせることが簡単にできるようになりました。
ぜひ、人が目視で実施している点検や状況確認作業をカメラと生成AIで自動化し、業務自動化・効率化に役立てて頂ければと存じます。

また、今回ブログでSORACOM Fluxアプリの設定手順をご紹介させて頂きましたが、一人でやってみたけど途中で詰まってしまった、わからないといった方はぜひ「SORACOMはじめてサポート」の活用をご検討下さい。月額11,000円(税込)で月2回 x 1時間のオンラインミーティングにてソラコムのテクニカルアドバイザーが個別にご相談を伺い、問題解決をご支援致します。

さらに、自分で手元で試すのはブログ記事でうまくできたけど、実際に現場で使うにあたってはプロにお願いしたいという場合は、弊社のパートナー企業による導入支援サービスをご紹介することも可能です。ご希望の場合は、お気軽にソラコムまでお問い合わせ下さい。

最後に宣伝させてください!!

弊社最大のイベント「SORACOM Discovery2026」が2026年7月7日(火)に東京ミッドタウン六本木にて開催されます!!

ソラコムプラットフォームやソラカメの最新アップデート情報の発表に加えて、展示ブースで実物やデモをご覧頂けます。また、現地でしか見られないソラコムの社員や業界の専門家、IoTを活用する企業のゲストスピーカーがIoTのビジネス活用事例、最新動向、未来のビジョンについて語るセッションが多数ございます!

さらにソラコムの展示ブースに加えて、30社を超えるパートナー企業の皆様の展示ブースもあり、盛りだくさんの内容となっております。
年に1回の日本最大級のIoTイベントですのでまだ参加申し込み(無償)されていない方がいらっしゃいましたら、こちらのURLよりぜひお申し込みの上、お越しください。

それでは、当日会場で皆様にお会いできること楽しみにしております。

― ソラコム高見 (yuu)