こちらはSORACOM Advent Calendar 2025 13日目の記事です。
はじめに
今年、大変光栄なことに7月に開催されたソラコムの年イチイベント、SORACOM Discovery 2025で登壇させていただきました。
このイベントでは、ソラカメとSORACOM Fluxを使って目視点検の自動化する方法を紹介しました。
そこで、デモとして「カゴの中のビーズの充填量(率)を通知」する方法を紹介しました。
このデモでは、100均で買ったミニチュアの買い物かごに、これまた100均で買ったプラスチックビーズを入れて、そのカゴの埋まり具合(充填率)を画像から判定させました。
そこで本記事ではこのデモで紹介したシステムの実装方法や工夫についてご紹介します。
100均グッズで「現場」を再現
この件はごみピット(コンテナ)のごみの溜まり具合の確認、判定を自動化できないかという案件の実証のために作りました。
机上でシミュレーションするため、前述のミニチュア買い物かごとプラスチックビーズをごみコンテナ、ごみに見立ててデモ環境としました。

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

生成AIアクション修正
CONFIG - AIモデル(認証情報)
こちらは必須ではありませんが、私はOpenAI (GPT-4o)の自分のAIライセンスを使う方式でやりました。

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}
}
}
メール通知アクションの削除
Slack通知機能追加
以下のソラコム公式ドキュメントを参考にSlack通知アクションを追加します。
CONFIG - Payload
かご中身の容量をお伝えします。
${payload.output.state}
画像から取得した容量は ${payload.output.ball_level} %です。
${payload.output.reason}
<${payload.input.image_url}|カメラ静止画>
以上で基本の設定は完了です。
最初の壁
ここまでの実装でFluxを動かしてみましたが、精度が安定しません。
同じ画角でも違うタイミングで出すと「50%」「70%」と全く違う状況でした。


工夫
改善フェーズ1:物理的な工夫(アナログハック)
AIの画像認識能力に頼り切るのではなく、物理的な補助線を引くことにしました。
カゴの内側に、25%、50%、75%のラインを引いた紙を貼り付けました。
これにより、AIが画像を解析する際の明確な「基準」を与えてみます。

改善フェーズ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』『75』の目盛りがあり、これが高さに対するパーセンテージの目安となります。」
- 推定のルールと考慮事項
- 「目盛りの見え方を基準に、『25%以上50%未満』などの範囲で推定してください。」
- 「さらに、かごの側面の見え方や玉の密度も考慮して、可能な限り正確なパーセンテージを答えてください。」
これにより、概ね精度が±10%程度まで改善しました。
今回の目的(ごみコンテナの監視)としては十分な精度と言えます。


まとめ
今回の検証で分かったことは以下の3点です。
- ソラカメ × SORACOM Fluxで、目視作業の無人化・自動化が実現できる可能性が高い
- 生成AIへの指示は「自然言語でのプログラミング」であり、プロンプトの詳細化が精度の肝となる
- 「物理的な目盛り」 のような少しのアナログな工夫が、AIの精度を劇的に向上させる
どなたかの参考になりますと幸いです。
さて、今年も無事アドベントカレンダーに投稿することができました。
これもひとえにプロンプト改善にご協力いただいたtakaoさん、登壇の機会をいただいたソラコムさん、そしていつも支えてくれるSORACOM UGの方々のおかげさまです。
2025年ももうすぐ終わりますが、2026年も引き続きよろしくお願いします!!


