9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SORACOM Fluxで「カゴの中身」をAI判定するための工夫

Posted at

こちらはSORACOM Advent Calendar 2025 13日目の記事です。

はじめに

今年、大変光栄なことに7月に開催されたソラコムの年イチイベント、SORACOM Discovery 2025で登壇させていただきました。

このイベントでは、ソラカメSORACOM Fluxを使って目視点検の自動化する方法を紹介しました。
そこで、デモとして「カゴの中のビーズの充填量(率)を通知」する方法を紹介しました。

このデモでは、100均で買ったミニチュアの買い物かごに、これまた100均で買ったプラスチックビーズを入れて、そのカゴの埋まり具合(充填率)を画像から判定させました。
そこで本記事ではこのデモで紹介したシステムの実装方法や工夫についてご紹介します。

100均グッズで「現場」を再現

この件はごみピット(コンテナ)のごみの溜まり具合の確認、判定を自動化できないかという案件の実証のために作りました。
机上でシミュレーションするため、前述のミニチュア買い物かごとプラスチックビーズをごみコンテナ、ごみに見立ててデモ環境としました。
image.png

アプリ作成

テンプレートからベース作成

7月に発表されたアプリテンプレート機能の「ソラカメで人数検知して可視化と通知」を使うと簡単にベースが作成できます。
image.png

生成AIアクション修正

今回の目的に合わせて、生成AIアクションを変更します。
image.png

CONFIG - AIモデル(認証情報)

こちらは必須ではありませんが、私はOpenAI (GPT-4o)の自分のAIライセンスを使う方式でやりました。
image.png

CONFIG - プロンプト

目的に合わせて書き換えます。

買い物かごの中に玉が入っています。この画像を見て、買い物かごの容量に対して何%程度の量が入っているかを推定してください。

回答は簡潔に構造化し、以下のJSON形式で提供してください:
{
 "state": 買い物かごの玉の充填率を表現する文章,
 "reason": 判定の根拠,
 "ball_level": 買い物かごの中の玉の充填率(0-100)
}

OUTPUT - 高度な設定 - Content

後続の処理に合わせて変更します。

{
    "input": {
        "image_path": "${payload.harvestFilesPath}",
        "image_url": "${payload.imageUrl}"
    },
    "output":{
        "state": "${result.output.state}",
        "reason": "${result.output.reason}",
        "ball_level": ${result.output.ball_level}
    }
}

メール通知アクションの削除

ひとまずメール通知はいらないので削除します。
image.png

Slack通知機能追加

以下のソラコム公式ドキュメントを参考にSlack通知アクションを追加します。

image.png

CONFIG - Payload

かご中身の容量をお伝えします。

${payload.output.state}

画像から取得した容量は ${payload.output.ball_level} %です。

${payload.output.reason}

<${payload.input.image_url}|カメラ静止画>

以上で基本の設定は完了です。

最初の壁

ここまでの実装でFluxを動かしてみましたが、精度が安定しません。
同じ画角でも違うタイミングで出すと「50%」「70%」と全く違う状況でした。
スクリーンショット 2025-12-09 214435.png
スクリーンショット 2025-12-09 214446.png

工夫

改善フェーズ1:物理的な工夫(アナログハック)

AIの画像認識能力に頼り切るのではなく、物理的な補助線を引くことにしました。
カゴの内側に、25%、50%、75%のラインを引いた紙を貼り付けました。
これにより、AIが画像を解析する際の明確な「基準」を与えてみます。
image.png

改善フェーズ2:プロンプトエンジニアリング

物理的な目盛りに合わせて、Fluxに入力するプロンプトも大幅に改修しました。
ソラコムのSA(ソリューションアーキテクト)、takaoさんのアドバイスで以下のように変更しました。

灰色の買い物かごの中にカラフルな玉が入っています。この画像を見て、買い物かごの容量に対して何%程度の量が入っているかを推定してください。

推定ルール:
かごの容量100%は、「かごの内側の側面がすべて隠れ、上縁の高さまで玉が詰まっている状態」とします。

かごの内側に立てられた白いカードには「25」「50」「75」の目盛りがあり、これが高さに対するパーセンテージの目安となります。

例:50の目盛りまで玉があれば50%とみなせます。

目盛りの見え方を基準に、「25%以上50%未満」などの範囲で推定してください。

さらに、かごの側面の見え方や玉の密度も考慮して、可能な限り正確なパーセンテージを答えてください。

回答は簡潔に構造化し、以下のJSON形式で提供してください:
{
 "state": 買い物かごの玉の充填率を表現する文章,
 "reason": 判定の根拠,
 "ball_level": 買い物かごの中の玉の充填率(0-100)
}

ポイントは以下だと思います。

  • 前提条件を教える
    • 「灰色の買い物かごの中にカラフルな玉が入っています。この画像を見て、買い物かごの容量に対して何%程度の量が入っているかを推定してください。」
  • 満杯(100%)の定義を教える
    • 「かごの容量100%は、『かごの内側の側面がすべて隠れ、上縁の高さまで玉が詰まっている状態』とします。」
  • 目盛りの見方を教える(ここが重要!)
    • 「かごの内側に立てられた白いカードには『25』『50』『75』の目盛りがあり、これが高さに対するパーセンテージの目安となります。」
      「例: 50の目盛りまで玉があれば50%とみなせます。」
  • 推定のルールと考慮事項
    • 「目盛りの見え方を基準に、『25%以上50%未満』などの範囲で推定してください。」
    • 「さらに、かごの側面の見え方や玉の密度も考慮して、可能な限り正確なパーセンテージを答えてください。」

これにより、概ね精度が±10%程度まで改善しました。
今回の目的(ごみコンテナの監視)としては十分な精度と言えます。
スクリーンショット 2025-12-09 214020.png
スクリーンショット 2025-12-09 214038.png

まとめ

今回の検証で分かったことは以下の3点です。

  • ソラカメ × SORACOM Fluxで、目視作業の無人化・自動化が実現できる可能性が高い
  • 生成AIへの指示は「自然言語でのプログラミング」であり、プロンプトの詳細化が精度の肝となる
  • 「物理的な目盛り」 のような少しのアナログな工夫が、AIの精度を劇的に向上させる

どなたかの参考になりますと幸いです。

さて、今年も無事アドベントカレンダーに投稿することができました。
これもひとえにプロンプト改善にご協力いただいたtakaoさん、登壇の機会をいただいたソラコムさん、そしていつも支えてくれるSORACOM UGの方々のおかげさまです。
2025年ももうすぐ終わりますが、2026年も引き続きよろしくお願いします!!

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?