Media > AI活用ユースケース > 物流 > 倉庫の棚を撮った写真から、置き場所の乱れ・ロケーション表示との違い・欠品と過剰を見分けて、在庫データとの食い違いを棚卸の前に拾う

倉庫の棚を撮った写真から、置き場所の乱れ・ロケーション表示との違い・欠品と過剰を見分けて、在庫データとの食い違いを棚卸の前に拾う

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

倉庫の棚をタブレットで撮った写真を、倉庫管理システムの在庫データと比べます。置き場所の違い、在庫があるはずの棚が空、空のはずの棚に物がある、といった食い違いの候補を、棚卸の前に一覧にします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate
対象業界
EC/商社/小売/物流/製造
対象部門
物流
対象業務
内容確認・チェック/比較検討
主な課題
人手が足りない/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
画像認識
主な効果
入力漏れ削減/工数削減/機会損失防止
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
75h/月
AI導入後
30h/月
想定削減
60%
年間削減
540h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 在庫管理課が、その月に見回るゾーンのロケーションごとの在庫を、倉庫管理システムから書き出して印刷する
  2. ゾーンのリーダーが一覧表を持って棚の前に立ち、ロケーションのラベルを確かめる
  3. 一覧表の品目名と、棚の箱に印刷された品名や品番を見比べる
  4. 在庫数に比べて棚が空に見える、あふれている、別の品目が混ざっている、といったものに印を付ける
  5. 印を付けた一覧表を在庫管理課に戻す
  6. 在庫管理課が印の付いたロケーションを倉庫管理システムで調べ、移動の記録の漏れか、置き間違いかを確かめる
  7. 置き間違いなら現場に移動を頼み、数の違いが疑われるものはハンディ端末で数え直す
導入後(After)
  1. 人ゾーンのリーダーが、決められた区画の前でタブレットから撮影用のフォームを開き、区画の番号を選んで写真を撮って送る
  2. 自動フォームの送信をきっかけにスクリプトが動き、写真の形式・大きさを確かめる
  3. 自動AIが写真を見て、写り具合(ぶれ・暗さ・区画の全体が入っているか)を確かめる。撮り直しが要るものは止める
  4. 自動AIが写真から各ロケーションのラベルの文字を読み、選んだ区画と合っているかを確かめる
  5. 自動その区画の在庫データ(品目・品番・在庫数・品目の見本の写真)を一覧から取り出す
  6. 自動AIがロケーションごとに、品目の見え方と埋まり具合を在庫データと比べ、食い違いの種類を付ける
  7. 自動食い違いの種類と規則から、区画を「見に行く」「撮り直し」「問題なし」に分ける
  8. 人在庫管理課が「見に行く」の区画の写真と候補を確かめ、現場での確認を頼む
  9. 人現場で確かめ、置き間違いは移動し、数の違いはハンディ端末で数え直す
各工程の詳しい説明を読む
  1. 在庫管理課が、その月に見回るゾーンのロケーションごとの在庫を、倉庫管理システムから書き出して印刷する
  2. ゾーンのリーダーが一覧表を持って棚の前に立ち、ロケーションのラベルを確かめる
  3. 一覧表の品目名と、棚の箱に印刷された品名や品番を見比べる
  4. 在庫数に比べて棚が空に見える、あふれている、別の品目が混ざっている、といったものに印を付ける
  5. 印を付けた一覧表を在庫管理課に戻す
  6. 在庫管理課が印の付いたロケーションを倉庫管理システムで調べ、移動の記録の漏れか、置き間違いかを確かめる
  7. 置き間違いなら現場に移動を頼み、数の違いが疑われるものはハンディ端末で数え直す

(a)見回りが追いつかない。 1区画5分で900区画を見るには、月75時間かかります。入出荷の繁忙日にはリーダーが現場に入るので、見回りが後回しになります。 予定のゾーンを見終わらないまま、次の月になることがあります。

(b)見る人で拾う食い違いが違う。 あるリーダーは品番まで見比べ、あるリーダーは品名の頭だけを見ます。似た品目が隣り合う棚では、品番まで見ないと置き間違いに気づけません。

(c)印の理由が残らない。 一覧表に付くのは丸印だけで、「空に見えた」のか「別の品目があった」のかが書かれていないことがあります。在庫管理課は、印の理由を聞き直すか、自分で棚まで見に行きます。

(d)見回った記録が残らない。 一覧表は確かめ終わると捨てられ、どの棚をいつ見て、何も無かったのかが残りません。 棚卸で差異が出たとき、その棚を前回いつ見たかが分かりません。

  1. 【人】 ゾーンのリーダーが、決められた区画の前でタブレットから撮影用のフォームを開き、区画の番号を選んで写真を撮って送る
  2. 【自動】 フォームの送信をきっかけにスクリプトが動き、写真の形式・大きさを確かめる
  3. 【自動】 AIが写真を見て、写り具合(ぶれ・暗さ・区画の全体が入っているか)を確かめる。撮り直しが要るものは止める
  4. 【自動】 AIが写真から各ロケーションのラベルの文字を読み、選んだ区画と合っているかを確かめる
  5. 【自動】 その区画の在庫データ(品目・品番・在庫数・品目の見本の写真)を一覧から取り出す
  6. 【自動】 AIがロケーションごとに、品目の見え方と埋まり具合を在庫データと比べ、食い違いの種類を付ける
  7. 【自動】 食い違いの種類と規則から、区画を「見に行く」「撮り直し」「問題なし」に分ける
  8. 【人】 在庫管理課が「見に行く」の区画の写真と候補を確かめ、現場での確認を頼む
  9. 【人】 現場で確かめ、置き間違いは移動し、数の違いはハンディ端末で数え直す

8番目が、この設計の分かれ目です。人が見るのは全部の区画ではありません。 「問題なし」の区画は件数だけを見て、「見に行く」の区画にだけ時間を使います。 全部の写真を人が見直す運用にすると、棚の前で見比べていた時間が、画面の前に移るだけです。

7番目を規則で決めているのも、意図してのことです。 AIは食い違いの種類を書くだけで、それを見に行く理由とするかは規則の側に置きます。 動きの速い品目の棚は多少の埋まり具合の違いを許す、といった取り決めが後から変わるからです。

02今回想定するシステム構成

構成図
ゾーンのリーダーのタブレット(会社支給・Google アカウントでログイン)
   │  区画の番号を選び、区画の全体を1〜2枚で撮って送信
   ▼【トリガー】Google フォームの送信
Google Apps Script
   ├──▶ 写真の形式・大きさの確認(Google ドライブの保存先から取得)
   ▼
Gemini API ── ①写り具合の確認(ぶれ/暗さ/区画の全体)
   │
   ├── 撮り直し ──▶ 判定一覧に「撮り直し」と書いて止める
   ▼
Gemini API ── ②ロケーションのラベルの読み取りと位置(box_2d)
   │
   ├── 選んだ区画と違う ──▶ 「撮影の取り違え」で止める
   ▼
Google Apps Script ── 在庫データから、その区画のロケーションの行と見本の写真を取り出す
   ▼
Gemini API ── ③ロケーションごとの比較
   │   ok / empty / other_item / overflow / not_visible + 根拠と位置
   ▼
Google Apps Script ── 区画の区分を規則で決める(visit / retake / pass)
   ▼
判定一覧(Google スプレッドシート)
   ▼
【在庫管理課が visit の区画だけ確かめ、現場へ確認を頼む】
役割想定する製品代替候補
処理Gemini API(写り具合の確認、ラベルの読み取り、在庫データとの比較)Claude API、OpenAI API
連携Google フォーム(区画の番号の選択と写真の受け取り)Microsoft Forms、自社で用意する撮影用の画面
連携Google Apps Script(写真の取得、呼び出し、一覧への書き込み)Make、Power Automate
連携Google スプレッドシート(在庫データの書き出しと判定一覧)Microsoft Lists
保管Google ドライブ(写真と品目の見本の写真)Microsoft OneDrive、SharePoint

倉庫管理システムには書き込みません。 在庫データは毎朝の書き出しをスプレッドシートに取り込んで使い、移動や数の修正は、確かめた後に人がハンディ端末から行います。

Google フォームを使うのは、区画の番号を選ばせてから撮らせられるからです。 「ファイルのアップロード」の質問で写真を受け取ると、ファイルはフォームのオーナーの Google ドライブの新しいフォルダに保存され、回答者は Google アカウントへのログインが必要です。 ファイルの形式・数・最大サイズを決められます。なお、フォームが共有ドライブに保存されている場合や、管理者がデータ損失防止を有効にしている場合には、この質問の形式は使えないとされています。

判定の土台は Gemini API の画像理解です。 対応形式は PNG、JPEG、WEBP、HEIC、HEIF で、タブレットの写真を変換せずに渡せます。 物体の検出では、位置を [ymin, xmin, ymax, xmax] の形で、0から1000に正規化した座標で返します。ラベルの位置と候補の箇所に枠を付けて、一覧で写真に重ねて見られます。

気を付けるのは大きさです。 画像を直接入れる場合、指示や他の内容と合わせたリクエスト全体が20MBに制限されます。区画の写真に見本の写真を何枚も添えると、上限に近づきます。 繰り返し使う画像には Files API が案内されており、ファイルは48時間で自動的に消えるため、見本の写真は毎朝の処理の初めにアップロードし直して使います。

細かい文字を読むには、media_resolution を見ます。 1枚の画像に割り当てるトークンの上限を決める設定で、ラベルの小さな品番を読むときは高めにします。 その分、処理の時間とトークンが増えます。

03どうやって実装するのか

Step1

処理の起点を決める

フォームの送信を起点にします。 Google Apps Script のインストール型トリガーの、フォームの送信のトリガーを使います。トリガーは作った人のアカウントで動くため、在庫管理課の共用のアカウントで作り、担当者が異動しても止まらないようにします。

1区画ずつ送らせます。 ゾーンをまとめて撮ってから送ると、どの写真がどの区画かを後から合わせることになります。区画の番号を選んでから撮る順にするのは、写真と区画の対応を最初に確定させるためです。

在庫データの取り込みは、毎朝の時間主導型トリガーで行います。 倉庫管理システムの書き出しのファイルをドライブの決まったフォルダに置き、7時台に読み込んでスプレッドシートを更新します。時間主導型トリガーは、指定した時刻から1時間の幅のなかで動く時刻が決まるので、見回りの開始より余裕をもって設定します。

見回りは、入出荷の少ない時間に行います。 在庫データは朝の時点のものなので、撮影までに動いた在庫は食い違いとして出ます。 これは第7章の例外処理で扱います。

Step2

入力データを集める

データ中身取得元
区画の写真区画の全体を写した1〜2枚、区画の番号、撮った人、日時Google フォームと Google ドライブ
在庫データロケーション、品目コード、品名、品番、在庫数、ケースの入り数、最後に動いた日時倉庫管理システムの毎朝の書き出し
品目の見本の写真品目ごとの箱やケースの外観の写真自社で用意する見本の写真のフォルダ
区画の定義区画の番号と、その中のロケーションの並び(上段左から、など)自社で用意する区画の一覧

質を決めるのは、下の2つです。 見本の写真が無い品目は、箱に印刷された品名や品番を読めなければ見分けられません。区画の定義が無いと、写真のどの位置がどのロケーションかを決められません。

見本の写真は、動きの多い品目から用意します。 全品目の見本を一度にそろえる必要はありません。見本の無い品目は、ラベルや箱の文字だけで見分け、読めなければ not_visible にします。

最後に動いた日時は、比較の材料ではなく、規則の側で使います。 撮影の直前に動いた品目の食い違いは、在庫データが古いだけかもしれません。

Step3

データの取得方法を決める

写真は、フォームの回答からドライブのファイルの ID を取り、スクリプトで読み込んで Gemini API に渡します。 回答のシートの行には、区画の番号と写真のファイルの場所が並びます。

取るものどこから何に使うか
写真フォームの回答のファイル3段階の判定の入力
区画の番号フォームの選択肢在庫データの絞り込み
その区画の在庫在庫データのシート(区画の定義で絞る)比較の相手
見本の写真Files API にアップロードしたもの品目の見分け

撮り方は、フォームの説明欄に書いて毎回見せます。 「区画の正面、床の印の位置から」「最上段のラベルまで入れる」「1枚に入らなければ上下で2枚」の3つです。2枚に分けたときは、上の写真と下の写真のどちらにどの段が入っているかを、区画の定義の側で決めておきます。 撮る人が毎回判断すると、段の割り当てがぶれます。

在庫データは、区画のロケーションの行だけを渡します。 倉庫全体の在庫を渡すと、写真に写った箱に似た品目をほかのロケーションから探してきて、「この箱は別の棚の品目です」と、頼んでいない推定を書くことがあります。 置き場所の違いの候補は、区画の中の比較で出せば足ります。

Step4

AIへ渡す前に整形する

  1. 形式とサイズの確認 … PNG、JPEG、WEBP、HEIC、HEIF のいずれかで、リクエスト全体が20MBに収まるかを確かめます。超えるものは縮小します
  2. 向きの確認 … 公式の案内でも、画像が正しく回転しているかを確かめるよう挙げられています。タブレットの縦横の情報で向きをそろえます
  3. 写り具合の確認(AI) … ぶれ、暗さ、区画の全体が入っているかを先に見ます
  4. ラベルの読み取り(AI) … 写真に写ったロケーションのラベルの文字と位置を読み、区画の定義と照らします
  5. 在庫データの絞り込み … 区画の定義から、その区画のロケーションの行だけを取り出します
  6. 見本の写真の用意 … 区画に含まれる品目の見本だけを、比較の依頼に添えます

3番目と4番目を、比較の前に別の依頼として行います。 1回の依頼にまとめると、暗くて見えない写真でも比較の結果が返り、ラベルを取り違えた写真でも食い違いが返ります。 先に止める依頼を分けておくと、比較の結果が出たものは、写真とロケーションの対応が確かなものだけになります。

Step5

AIに処理させる

させるのは、ロケーションごとに「在庫データと比べてどう見えるか」に種類を付け、根拠と位置を書き出すことだけです。

種類中身判断できないときの扱い
ok在庫データの品目に見え、埋まり具合も在庫数と矛盾しない-
empty在庫データでは在庫があるが、棚が空に見える。奥まで見えている奥が見えなければ not_visible
unexpected在庫データでは空だが、物が置かれている何か分からなくてもよい
other_item在庫データと別の品目に見える品番が読めず見本とも見分けられなければ not_visible
mixed在庫データの品目と別の品目が混ざって見える同上
overflow棚からはみ出している、通路側に積まれている-
not_visible手前の物で隠れている、暗い、文字が読めない-

empty の条件に「奥まで見えている」を入れているのが、この構成の要です。 棚の手前が空いていても、奥に箱が押し込まれていることがあります。奥の壁や棚の背板が見えていなければ、空とは言えません。 そのときは not_visible にし、見に行くかどうかを規則の側で決めます。

埋まり具合は、在庫数との矛盾だけを見ます。 「在庫数40ケースなのに、棚に2〜3ケースしか見えない」ような大きな食い違いを empty の手前の段階として evidence に書かせ、個数は数えさせません。

させないこと理由
個数を数える奥や箱の中は写らない。数は棚卸で人が確定する
別の棚の品目かを推定する区画の外の在庫は渡していない。推定は空振りを増やす
在庫データを直す案直すのは確かめた後の人
見えない部分を補う手前と同じ品目が奥にもある、とは書かない
区画の区分を決めるvisit か pass かは規則で決める

4行目がいちばん起きやすい失敗です。 手前に同じ箱が並んでいると、奥も同じだろうと考えて ok にします。見えている範囲だけで判断させ、それ以外は not_visible に寄せます。

overflow は、在庫データとの食い違いではなく、安全と通路の問題として扱います。 棚からはみ出した箱や通路に置かれたパレットは、在庫の数が合っていても、ピッキングの動線をふさぎ、落下の危険があります。区分では visit にせず、ゾーンのリーダーへの通知だけを出します。

Step6

指示内容を固定する

あなたは物流センターの在庫管理の担当として、棚の写真と在庫データを比べます。
写真に写っているものだけを根拠にしてください。推測で補わないでください。

【区画の番号】{bay_id}
【区画の中のロケーションの並び】{location_layout}
(例:上段 左から A-12-1-1、A-12-1-2 / 中段 左から A-12-2-1 …)
【ロケーションごとの在庫データ】{stock_rows}
(ロケーション、品目コード、品名、品番、在庫数、ケースの入り数)
【品目の見本の写真】{sample_images}
【区画の写真】{bay_photo}

【ロケーションごとに付ける種類(status)】
ok / empty / unexpected / other_item / mixed / overflow / not_visible

【厳守事項】
- empty は、棚の奥(背板や奥の壁)まで見えていて、物が無いときだけです。
  奥が見えなければ not_visible にしてください。
- 手前に見える品目が奥にもあるとは考えないでください。
- 品目は、箱の品番・品名の文字か、見本の写真との見た目の一致で見分けてください。
  どちらでも見分けられなければ not_visible にしてください。
- 個数を数えないでください。在庫数と大きく矛盾する見え方のときだけ、
  evidence にその様子を書いてください。
- この区画の外の在庫について、推定を書かないでください。
- 迷ったときに ok を選ばないでください。
- 各ロケーションについて、根拠にした箇所を box_2d([ymin, xmin, ymax, xmax]、
  0〜1000に正規化)で示してください。
- 見に行くべきかどうかは書かないでください。

「迷ったときに ok を選ばない」を入れないと、問題なしに寄ります。 比較を頼まれると、在庫データの品目名に引っ張られて、似た箱を同じ品目と読みます。見落としは ok の側にだけ起きるので、迷いは not_visible に逃がします。

ロケーションの並びを文章で渡すのも意図してのことです。 写真のどの位置がどのロケーションかを推定させると、段を1つずらしただけで、全部のロケーションの比較がずれます。 並びを先に渡し、ラベルの読み取りの結果と合っているものだけを比較に進めます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Gemini API の構造化出力で、status を列挙型にしたスキーマを渡します。公式の案内では、出力はJSONとして正しくても、値はアプリケーションの側で必ず検証するようにとされているので、スクリプトの側で検証します。

{
  "bay_id": "",
  "photo_quality": "good | retake",
  "label_check": "match | mismatch | unreadable",
  "locations": [
    { "location": "", "expected_item": "", "status": "ok | empty | unexpected | other_item | mixed | overflow | not_visible",
      "evidence": "", "box_2d": [0, 0, 0, 0] }
  ]
}

1つ目の理由は、status と区画の区分を別の層に置けることです。 locations はAIが埋め、区分はスクリプトが規則で決めます。

区分条件
retakephoto_quality が retake、または label_check が mismatch か unreadable
visitempty、unexpected、other_item、mixed が1つでもある(最後に動いた日時が撮影の前2時間以内のものは除く)
visitnot_visible が区画のロケーションの半分以上
pass上のどれにも当たらない。overflow は通知だけ

2つ目は、スクリプトで検証できることです。 返ってきた location が区画の定義にあるか、box_2d が0から1000の範囲か、ロケーションの数が区画の定義と同じかを確かめます。数が合わなければ、その区画は retake にします。 AIが1つのロケーションを読み飛ばしたまま pass になるのを防ぎます。

3つ目は、box_2d で確認が速くなることです。 一覧で写真に枠を重ね、在庫管理課は枠の付いた箇所だけを見ます。

Step8

システムへ連携する

つなぎ先方式内容
Google フォームフォームの送信のトリガー区画の番号と写真を受け取る
Google ドライブスクリプトから読み込む写真と見本の写真
Gemini APIスクリプトから呼び出す写り具合、ラベル、比較の3つの依頼
在庫データのシート毎朝の取り込み倉庫管理システムの書き出しを読む
判定一覧スクリプトが書き込む区画ごとの区分と、ロケーションごとの結果
倉庫管理システム書き込まない移動と数の修正は人がハンディ端末で行う

倉庫管理システムへの書き込みは、最後まで作りません。 写真から在庫を直すと、奥が見えなかった棚の在庫を0にするような誤りが、そのまま出荷の引当てに効きます。

Step9

人が確認する

  1. retake を撮り直す … 判定一覧の「撮り直し」を見回りの最後にまとめて撮ります
  2. visit の写真を見る … 在庫管理課が枠の付いた箇所を見て、明らかに写真の誤読なら pass に直します
  3. 現場で確かめる … 残ったものを現場に頼みます。置き間違いなら移動し、数の違いが疑われるものはハンディ端末で数え直します
  4. 結果を記録する … 現場で確かめた結果(置き間違い/移動の記録漏れ/誤読)を一覧に残します

2番目で、visit を pass に直すのは、写真で明らかなときだけにします。 迷うものは現場で見ます。画面で判断を重ねると、写真が見落としたものを人も見落とします。

4番目の記録が、規則を育てる材料になります。 「誤読」が特定の品目に偏っていれば見本の写真を足し、「移動の記録漏れ」が特定の時間帯に偏っていれば、入荷の手順の側を直します。写真の判定の精度を上げるより、食い違いの出どころを減らすほうが効きます。

目標は、900区画をならして1区画2分です。 撮影に1分ほど、残りが visit の確認と現場への依頼です。visit が多すぎる月は、見本の写真が足りないか、在庫データが古いかです。

Step10

例外に対処する

起きること対応
写真がぶれている・暗いretake。見回りの最後にまとめて撮り直す
ラベルが選んだ区画と違うretake。比較に進めない
ラベルが汚れて読めないretake とし、ラベルの貼り替えを頼む
撮影の直前に入出庫があった最後に動いた日時で除く。翌日の見回りで撮り直す
見本の写真が無い品目文字だけで見分ける。読めなければ not_visible
区画のロケーションの数と結果の数が違うretake。読み飛ばしを pass にしない
リクエストが20MBを超える写真を縮小し、見本を区画の品目に絞る
AIの応答が止まる判定一覧に「未処理」と書き、次の送信のときに拾い直す
在庫データの取り込みが失敗した前日のデータで比較せず、その日の判定を止める

最後の行を省かないでください。 前日の在庫データで比べると、その日に入荷した棚がすべて unexpected になります。 取り込みに失敗した日は、写真だけを受け取って判定を翌朝に回します。

Step11

記録を残す

  • 区画の写真、区画の番号、撮った人、日時
  • 比較に使った在庫データの行(そのときの在庫数と最後に動いた日時)
  • Gemini API が返したJSONの全文(写り具合、ラベル、比較)
  • スクリプトが決めた区分と、その理由になった status
  • 人が区分を直した記録 … どの区画を、どちらに直したか
  • 現場で確かめた結果(置き間違い/移動の記録漏れ/誤読)
  • 区画ごとの、前回見回った日

判定一覧は、区画を行、月を列にした表でも見られるようにします。 同じ区画が毎月 visit になるなら、その棚の使い方(似た品目の隣り合わせ、入荷の仮置き)に理由があります。

最後の行が、第3章の(d)への答えです。 棚卸で差異が出たとき、その棚を前回いつ見て、何が写っていたかを写真で遡れます。

04実装レベルの3段階

最小構成:写真と在庫データを手でAIの画面に貼り、ロケーションごとに比べさせる / 1区画ごとの比較
半自動化:上記+フォームで写真を受け取り、スクリプトで比較を呼んで一覧に書き出す / 撮影から比較の一覧化まで
本格構成:上記+写り具合とラベルの確認を前段に入れ、区画の区分を規則で決め、枠を重ねた一覧を出す / 撮影から見に行く区画の絞り込みまで

半自動化で、1区画5分が3分程度になります。 比較は自動になりますが、撮影の取り違えや暗い写真の結果まで人が見るので、確認に時間がかかります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、写真とロケーションの対応を確かめる作業が、前段で自動になるからです。 段階を飛ばさないでください。 半自動化を1か月回すと、見本の写真が足りない品目と、ラベルの読みにくい棚が先に分かります。そこを直してから区分の規則を足すほうが、visit の空振りが減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
5 名
月間件数
900 件
1件あたり現在時間
5 分
1件あたり導入後時間
2 分
現在  900件 × 5分 ÷ 60 = 75 時間/月
導入後 900件 × 2分 ÷ 60 = 30 時間/月
月間削減時間
45h
削減率
60%
年間削減時間
540h
年間金額換算(時間単価2,600円)
140万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 品目の数が多く、ケースや箱の外から品目を見分けられる商品を棚で保管している物流センター・EC・卸の倉庫。年に数回の一斉の棚卸のほかに、毎月ゾーンを決めて棚を見回っており、その見回りを在庫の一覧表と目で突き合わせている場合。棚のロケーションのラベルが写真に写る位置に貼られている場合。倉庫管理システムからロケーションごとの在庫を一覧で書き出せる場合。
向いていない
  1. 商品が無地の段ボールに入っていて、外から品目を見分けられない場合。ばら積みや平置きが中心で、棚とロケーションの区切りが写真で分からない場合。数量を1個単位で数える必要があり、その数が棚卸の結果になる場合。なお、在庫の数を確定する棚卸そのものは、この構成では代替できません。

07最小構成で試す方法

  1. 先月の見回りで印を付けた区画から10区画、印の無かった区画から20区画を選ぶ
  2. その30区画をタブレットで撮り、同じ日の朝の在庫データを書き出す
  3. 写真と、その区画の在庫データの行を、手元のAIサービスの画面に1区画ずつ貼る
  4. 「ロケーションごとに、在庫データと比べてどう見えるかを ok/empty/other_item/not_visible で答えてください。奥まで見えていないものは not_visible にしてください。個数は数えないでください」と指示する
  5. 結果を、その日に現場で目視した結果と突き合わせる

30区画は必ずやってください。 スクリプトを組む前に、「写真で品目を見分けられる倉庫か」を確かめます。

出てきた内容判断
目視と同じ食い違いが出たスクリプトの連携に進む
奥が見えないのに empty にした指示の書き方で直る。構成は有効
品目をほとんど見分けられない見本の写真か、撮り方が先。 無地の箱が多い倉庫では構成を見直す

3行目が出ることは珍しくありません。 品番が小さく印刷されているだけの箱は、写真の解像度では読めないことがあります。その場合は、撮る距離と media_resolution を変えて同じ30区画で試してください。

08実装時につまずきやすいポイント

問題対策
奥が見えないのに empty になる奥まで見えているときだけ empty と指示し、それ以外は not_visible
手前と同じ品目が奥にもあると考えて ok にする見えている範囲だけで判断させる
隣の区画の写真で比較してしまうラベルの読み取りを前段に置き、違えば止める
段を1つずらして全部の比較がずれるロケーションの並びを文章で渡す
ロケーションを読み飛ばして pass になる結果の数を区画の定義と比べ、違えば retake
撮影の直前の入出庫が食い違いになる最後に動いた日時で除く
前日の在庫データで比べる取り込みに失敗した日は判定を止める
似た品目を同じ品目と読む迷ったら ok にしないと指示する。見本の写真を足す
写真から在庫を直したくなる倉庫管理システムへは書き込まない
撮る人ごとに距離と角度が違う撮り方を決め、床に立ち位置の印を付ける

上の3行が、この構成の失敗のほとんどです。 どれも「写真に写っていないものを、写っていることにする」という同じ形をしています。見えないものを見えないまま人に渡す設計にしてあるかで、運用に乗るかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 倉庫の棚の写真、荷主ごとの品目と在庫数、撮影した従業員の名前と日時です。

  1. 荷主の情報を外部へ渡す範囲を決める … 受託の倉庫では、在庫データは荷主の情報です。生成AIの API に渡してよいかを、荷主との契約で確かめてから始めます
  2. 写真に人を写さない … 棚の前で作業している人が写り込むことがあります。撮り方の決まりに「人のいない状態で撮る」を入れます
  3. この構成は棚卸を代替しません … 出すのは見に行くべき棚の候補までで、在庫の数を確定するのは人が行う棚卸です。 写真の結果を棚卸の結果として扱わないでください
  4. 写真から在庫を直さない … 倉庫管理システムへの書き込みは作りません。奥が見えなかった棚を空とする誤りが、出荷の引当てに効きます
  5. 写真の保管の期間を決める … 区画の写真は、次の一斉の棚卸が終わるまで残し、その後は消す運用にします

誤りが起きた場合のリスクは、食い違いを見落として棚卸まで持ち越すことと、空振りの見回りで現場の時間を使うことの2つです。 前者は迷ったときに ok に寄せると起き、後者は not_visible を empty に混ぜると起きます。どちらも「見えない」の扱いから出ているので、そこだけは設計で守ります。

10まず何から始めるか

1週目:区画の定義と撮り方を決める

見回るゾーンについて、区画の番号と、その中のロケーションの並びを一覧にします。あわせて、撮る距離、高さ、1区画あたりの枚数を決め、床に立ち位置の印を付けます。

2週目:30区画で試す

30区画を撮り、手元のAIサービスで在庫データと比べさせます。奥が見えない棚を empty にしていないか、品目を見分けられているかを最優先で見ます。

3週目:見本の写真をそろえる

動きの多い品目と、品番の似た品目が隣り合う棚の品目から、見本の写真を撮ります。 あわせて、見に行く区画の規則(何があれば visit か)を在庫管理課と決めます。

4週目:フォームから比較の一覧までをつなぐ

Google フォームとスクリプトで、写真を受け取って比較を呼び、一覧に書き出すところまで作ります。この時点では区分を出さず、ロケーションごとの結果だけを見ます。

2か月目: 写り具合とラベルの確認を前段に足し、区分の規則と枠の表示を足します。visit と retake の数を毎週数えます。3か月目以降: 1区画5分が何分になったかを実測し、見回りが予定どおり一巡して、棚卸の日の差異の調べ直しが減ったかを見た時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-06/最終更新:2026-10-06
確認した内容情報源確認日
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。画像を直接入れる場合、リクエスト全体が20MBに制限されること。物体の検出で位置を [ymin, xmin, ymax, xmax] の形で0〜1000に正規化して返すこと。media_resolution が1枚の画像に割り当てるトークンの上限を決めること。画像が正しく回転しているかを確かめるよう案内されていることGemini API: Image understanding2026-10-06
構造化出力で列挙型や必須の項目を指定でき、出力がJSONとして正しくても値はアプリケーションの側で検証するよう案内されていることGemini API: Structured output2026-10-06
Files API のファイルが48時間で自動的に消えることGemini API: Files API2026-10-06
インストール型トリガーにフォームの送信と時間主導型があり、時間主導型は指定した時刻から1時間の幅のなかで動く時刻が決まること。トリガーは作った人のアカウントで動くことGoogle Apps Script: Installable triggers2026-10-06
ファイルのアップロードの質問で、ファイルがフォームのオーナーの Google ドライブの新しいフォルダに保存され、回答者は Google アカウントへのログインが必要なこと。形式・数・最大サイズを設定できること。共有ドライブのフォームやデータ損失防止が有効な場合は使えないことGoogle ドキュメント エディタ ヘルプ: フォームでファイルをアップロードする2026-10-06

受託の倉庫では、在庫データと写真を外部のサービスに渡してよいかを荷主との契約で確かめてください。 本記事は上の公開情報で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0568)についてのご相談はこちらから。

AI活用について相談する
目次