トラックの荷台の積み込み後の写真から床と高さの空きを見分け、便ごとの推定積載率と、同じ方面の便の積み合わせの候補を出す
積み込みを終えたトラックの荷台の写真から、床の枠ごとの埋まり方と積み上げの高さを見分けます。出荷データの重量と合わせて便ごとの推定積載率を出し、同じ方面で空きの大きい便の積み合わせの候補を示します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Power Automate/Python
- 対象業界
- 商社/小売/物流/製造
- 対象部門
- 物流
- 対象業務
- データ入力・転記/集計・分析
- 主な課題
- データ分析に時間がかかる/入力作業が多い/属人化している
- AIで行う処理
- 画像認識
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- ドライバーが積み込み後の荷台を撮り、アプリから便の番号のフォルダに送る
- 配車の担当が写真を1便ずつ開き、床と高さの空きを目で見て「7割」「半分」のように運行台帳に書く
- 荷主の出荷データから便ごとの重量を拾い、車両の最大積載量と比べる
- 月末に、方面ごと・荷主ごとに運行台帳を集計し、空きの多い便を書き出す
- ベテランの担当が、書き出した便から積み合わせや配車の組み替えの候補を考える
- 荷主への報告と、社内の配車の見直しの資料を作る
- 人ドライバーが、決めた撮り方で荷台を撮る(ウイング車は左右の側面、箱車は後ろの扉から目印が写るように)
- 自動Python のプログラムが15分ごとに便のフォルダを見回り、写真がそろった便を拾う
- 自動車両台帳から、その車両の荷台の床の枠の数と、積み上げの段の上限を引く
- 自動Gemini API が、床の枠ごとの埋まり方と積み上げの段、見えない枠を返す
- 自動プログラムが、容積の推定積載率を計算し、出荷データの重量から重量の積載率を計算する
- 自動翌朝、同じ日・同じ方面で、容積と重量の両方に余裕のある便の組を、積み合わせの候補として一覧にする
- 人配車の担当が、「見えない枠が多い便」と「候補の組」だけを写真で確かめ、配車の見直しに使う
各工程の詳しい説明を読む
- ドライバーが積み込み後の荷台を撮り、アプリから便の番号のフォルダに送る
- 配車の担当が写真を1便ずつ開き、床と高さの空きを目で見て「7割」「半分」のように運行台帳に書く
- 荷主の出荷データから便ごとの重量を拾い、車両の最大積載量と比べる
- 月末に、方面ごと・荷主ごとに運行台帳を集計し、空きの多い便を書き出す
- ベテランの担当が、書き出した便から積み合わせや配車の組み替えの候補を考える
- 荷主への報告と、社内の配車の見直しの資料を作る
(a)目測の基準が人で違う。 同じ写真を見て、ある担当は「7割」、別の担当は「8割」と書きます。奥が見えない写真では、手前の列が埋まっていれば「満載」と書く担当もいます。 月ごとの数字の上下が、積み方の変化なのか担当の違いなのか分かりません。
(b)写真を開いて書き写す作業が重い。 1日90便の写真を、配車の担当が翌日の配車を組む合間に開きます。忙しい日は書き込みが溜まり、月末にまとめて目測することになります。
(c)容積と重量が別々に見られている。 写真の空きと出荷データの重量は、別の列に書かれるだけです。床が半分空いていても重量が上限に近い便を、積み合わせの候補に挙げてしまうことがあります。
(d)候補の検討が月末に偏る。 集計が月末なので、同じ方面の空きの多い便が1か月続いてから気づきます。 気づいても、その月の配車は終わっています。
- 【人】 ドライバーが、決めた撮り方で荷台を撮る(ウイング車は左右の側面、箱車は後ろの扉から目印が写るように)
- 【自動】 Python のプログラムが15分ごとに便のフォルダを見回り、写真がそろった便を拾う
- 【自動】 車両台帳から、その車両の荷台の床の枠の数と、積み上げの段の上限を引く
- 【自動】 Gemini API が、床の枠ごとの埋まり方と積み上げの段、見えない枠を返す
- 【自動】 プログラムが、容積の推定積載率を計算し、出荷データの重量から重量の積載率を計算する
- 【自動】 翌朝、同じ日・同じ方面で、容積と重量の両方に余裕のある便の組を、積み合わせの候補として一覧にする
- 【人】 配車の担当が、「見えない枠が多い便」と「候補の組」だけを写真で確かめ、配車の見直しに使う
4番目と5番目を分けているのが、この設計の分かれ目です。 AIは枠ごとの状態を答え、積載率はプログラムが同じ式で計算します。 担当によって基準が違う、という(a)の問題は、AIの目測に置き換えても残ります。数字にする部分を式に移して、はじめて基準がそろいます。
6番目は毎日の一覧にします。 月末の集計を待たずに、前日の便の組から候補が出ます。 同じ組が何日も続けば、配車の組み替えを考える材料になります。
02今回想定するシステム構成
ドライバー(スマートフォンのアプリ) │ 積み込み後の荷台の写真(車種ごとに決めた撮り方) ▼ 便の番号のフォルダ(社内のファイルサーバー) 【トリガー】Python のプログラム(15分ごとに起動) ├── 車両台帳 ── 床の枠の数・段の上限・最大積載量 ├──▶ Gemini API ── 枠ごとの埋まり方・積み上げの段・見えない枠 ├── 出荷データ ── 便ごとの重量・届け先の方面・時間帯 ▼ Python ── 容積と重量の推定積載率/積み合わせの候補の組 ▼ 運行台帳(下書きの列)/ 翌朝の候補の一覧 ▼ 【配車の担当が「見えない枠が多い便」と「候補の組」を確かめる】 └──▶ 配車の見直し・荷主への報告
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(荷台の写真から床の枠ごとの埋まり方と積み上げの段を判定) | Claude API、OpenAI API |
| 集計 | Python(写真の収集、呼び出し、積載率の計算、積み合わせの候補の抽出) | Google Apps Script、Power Automate |
| 連携 | 運行台帳・車両台帳(スプレッドシート) | 配車システム |
| 保管 | 社内のファイルサーバー(便ごとの写真のフォルダ) | クラウドのストレージ |
| 撮影 | ドライバーのスマートフォン | 車載のカメラ |
写真は、ドライバーがすでに撮っているものを使います。 新しく足すのは撮り方の決まりと、車両ごとの床の枠の数を書いた車両台帳の列です。
写真を見る土台は、Gemini API の画像理解です。 対応する形式は PNG、JPEG、WEBP、HEIC、HEIF で、1回のリクエストに複数の画像を入れられます。 画像を直接入れる場合は、指示などと合わせたリクエスト全体が20MBまでです。荷台の目印や枠の位置は box_2d として [ymin, xmin, ymax, xmax] の形で、0から1000に正規化した座標で返せます。
荷物の縁や目印の数字を見分けるための設定もあります。 Gemini 3 のモデルでは画像ごとに解像度を指定でき、1枚の画像に割り当てるトークンの上限を low(280)から ultra_high(2240)まで選べます。多くの画像の分析には high(1120)が勧められています。
03どうやって実装するのか
処理の起点を決める
Python のプログラムを15分ごとに起動し、便のフォルダを見回ります。 積み込みは早朝と昼に集中します。その日のうちに便ごとの数字がそろえば、翌朝の候補の一覧に間に合います。 写真1枚ごとに動かす仕組みにはしません。
1つの便の写真がそろってから処理します。 ウイング車は左右の側面の2枚、箱車は後ろの扉からの1枚と、扉の内側から荷台の壁を写した1枚です。決めた枚数がそろい、最後の写真から15分たった便を「そろった」とみなします。そろわないまま出発時刻を過ぎた便は、「写真の不足」として一覧に出します。
翌朝の一覧は、前日の全部の便がそろってから作ります。 夜の便の写真が遅れて届くことがあるので、朝の決まった時刻に一覧を作り、その時点で未処理の便を数として出します。 未処理の便を除いて候補を作り、除いたことを一覧の上に書きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 荷台の写真 | 車種ごとに決めた枚数。便の番号、撮影の時刻 | 便の番号のフォルダ |
| 車両台帳 | 車両番号、車種(ウイング・箱)、床の枠の数(前後の列 × 左右)、積み上げの段の上限、最大積載量、壁の目印の間隔 | 車両台帳 |
| 出荷データ | 便ごとの荷主、届け先、方面、届ける時間帯、重量、ケースやパレットの数 | 荷主から届くCSV |
| 配車表 | 便の番号と車両番号、出発の時刻 | 配車表 |
質を決めるのは、車両台帳の「床の枠」です。 荷台の床を、パレットを置く単位で前後の列と左右に分けた枠として持たせます。たとえば「前後8列 × 左右2」の荷台なら16枠です。枠の数が台帳にあって、はじめて「何枠中何枠」と数えられます。 荷物がパレットに載らない荷主の便でも、同じ枠を床の区切りとして使います。
積み上げの段は、荷台の高さに対して何段まで積めるかの上限です。 荷物の高さは荷主ごとに違うため、段の上限は荷主ごとの目安として台帳の別の表に持ちます。 同じ車両でも、背の高い荷物なら2段、低い荷物なら3段、と変わります。
出荷データの重量は、AIに渡しません。 AIに重量を渡すと、重い便の写真を「埋まっている」と答えやすくなります。 写真の判定と重量の計算を分け、合わせるのはプログラムです。
データの取得方法を決める
Python のプログラムが、次の順に集めます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 写真 | 便の番号のフォルダ | AIに渡す |
| 便と車両の対応 | 配車表 | 車両台帳を引く |
| 床の枠の数・車種・目印の間隔 | 車両台帳 | AIに渡す枠組みと、積載率の分母 |
| 段の上限 | 荷主ごとの目安の表 | 容積の積載率の分母 |
| 重量・方面・時間帯 | 出荷データ | 重量の積載率と、候補の組の条件 |
AIには、「この荷台は前後8列 × 左右2の枠」という枠組みを渡します。 写真だけを見せて「何%か」を聞くと、写真の構図で答えが変わります。枠の数を先に渡し、枠ごとに答えさせると、同じ荷台なら同じ基準で数えられます。
箱車の奥行きは、荷台の壁の目印で読みます。 荷台の左右の壁に、前から1列ごとに番号を書いたシールを貼っておきます。 後ろの扉から撮った写真で、荷物の最後尾がどの番号の目印の位置にあるかを答えさせれば、その手前の列は空いていると分かります。最後尾より奥の列は、埋まっていると見なさず「見えない」として扱います。
写真は base64 にしてリクエストに直接入れます。1便2枚なので、20MBの上限には通常届きません。大きすぎる写真は前処理で縮めます。呼び出しは /v1beta/interactions に、API キーを x-goog-api-key のヘッダーに入れて送ります。 画像ごとに resolution を指定でき、壁の目印を読む箱車の写真は high、側面を開けたウイング車の写真も同じく high から始め、目印が読めない車種だけ写真の撮り方を見直します。
AIへ渡す前に整形する
- 枚数と名前の確認 … 車種ごとに決めた枚数がそろい、便の番号が配車表にあるかを見ます
- 向きの補正 … 写真の向きの情報で、横倒しの写真を正しくします
- 写りの確認 … 暗い荷台の中でぶれた写真、扉が半分しか開いていない写真は「撮り直し」とします
- 大きさの調整 … 長辺が大きすぎる写真は縮めます。壁の目印の番号が潰れない大きさは残します
- 人の写り込みの確認 … 荷台の中に人が大きく写っている写真は、AIに送りません
- 枠組みの作成 … 車両台帳から「車種、前後の列の数、左右の数、目印の間隔」を指示に入れる形にします
- 重複の確認 … 同じ便に同じ写真が二度送られていないかを、撮影の時刻とファイルの中身で確かめます
3番目の「暗い荷台」は、箱車でよく起きます。 奥が暗く写ると、空いている奥を「見えない」ではなく「空き」と答えやすくなります。 ドライバーには、荷台の照明をつけて撮る決まりを伝えます。
撮り直しは、出発の前でなければ頼めません。 前処理で撮り直しになった便は、すぐにドライバーのアプリに知らせ、出発後なら「撮り直しできず」として記録だけ残します。
AIに処理させる
させるのは、渡した枠組みに沿って、床の枠ごとに次の3つを答えることだけです。
| 見るもの | 答え方 | 判断できないときの扱い |
|---|---|---|
| 枠の埋まり方 | full / partial / empty | 写真から見えなければ not_visible |
| 積み上げの段 | 枠ごとに見える段の数(整数) | 数えられなければ空にする |
| 箱車の最後尾 | 荷物の最後尾にあたる壁の目印の番号 | 目印が読めなければ空にする |
荷台の単位でも2つ答えさせます。 荷物が枠をまたいで斜めに置かれているか(irregular_loading)と、荷崩れや倒れた荷物が見えるか(shifted_cargo)です。後者は積載率とは別に、配車の担当に知らせます。
| させないこと | 理由 |
|---|---|
| 積載率の数字 | 枠と段から式で計算する |
| 見えない枠の推測 | 奥を「埋まっている」とも「空き」とも決めない |
| 重量の判断・過積載かどうか | 写真では分からない。出荷データと最大積載量で見る |
| 積み付けが安全かどうか | 判断は運行管理と安全の担当 |
| 荷物のラベルや商品名の読み取り | 荷主の情報を外へ送らない |
2行目がいちばん大事な区別です。 奥の見えない枠を「埋まっている」と答えれば積載率は高く出て、本当は空いている便が候補から消えます。 「空き」と答えれば、満載の便を積み合わせの候補に挙げてしまいます。 どちらでもない not_visible を用意し、迷ったらそれを選ばせます。
指示内容を固定する
あなたは、積み込みを終えたトラックの荷台の写真を見て、床の枠ごとの状態を書き出す立場です。
同じ便の写真を複数枚渡します。写真に見えるものだけを答えてください。
【この荷台の枠組み】
車種:{body_type}(wing または van)
床の枠:前後 {rows} 列 × 左右 {cols}。列の番号は前(運転席側)から 1, 2, 3 … とする
壁の目印:前から1列ごとに番号のシールを貼ってある
【枠ごとに答えること】
- row, col:枠の位置
- fill:full(床が埋まっている)/ partial(一部だけ)/ empty(空いている)/ not_visible(見えない)
- stack:見える積み上げの段の数。数えられなければ空
- photo_no と box_2d:その枠が写っている写真の番号と位置
【荷台の単位で答えること】
- last_marker:箱車のとき、荷物の最後尾にあたる壁の目印の番号。読めなければ空
- irregular_loading:荷物が枠をまたいで斜めに置かれているか(true / false)
- shifted_cargo:荷崩れや倒れた荷物が見えるか(true / false)と、その位置
【厳守事項】
- 積載率や「何割積んでいるか」を書かないでください。
- 手前の荷物に隠れて奥が見えない枠は not_visible にしてください。
奥を埋まっているとも、空いているとも推測しないでください。
- 暗くて見えない枠も not_visible です。暗いことを空いていることとして扱わないでください。
- 重さ、過積載かどうか、積み付けが安全かどうかを書かないでください。
- 荷物のラベル、伝票、商品名の文字を読み取って答えないでください。
- 写真に写っている人について、何も書かないでください。
「暗いことを空いていることとして扱わない」は、箱車のために入れています。 入れないと、照明の届かない奥を empty と答えます。暗い荷台の奥は、多くの場合、積み込みの最初に置いた荷物で埋まっています。
「何割積んでいるか」を禁じるのは、言わないと書き添えるからです。 枠ごとの答えに加えて「全体で約7割」と書けば、その数字が式で計算した数字と並び、どちらを使うかで担当が迷います。
出力形式を固定する
構造化出力で、便ごとに次の形のJSONを受け取ります。
{
"trip_id": "20261008-K031",
"last_marker": 6,
"irregular_loading": false,
"shifted_cargo": { "found": false, "photo_no": null, "box_2d": null },
"cells": [
{ "row": 1, "col": 1,
"fill": "full | partial | empty | not_visible",
"stack": 2,
"photo_no": 1,
"box_2d": [0, 0, 0, 0] }
]
}
fill を enum にして、決めた値以外を返させません。 Gemini API の構造化出力は、/v1beta/interactions の response_format に mime_type: "application/json" とスキーマを入れて指定し、enum、required、整数の minimum と maximum が使えます。ただし、JSONとして正しくても値が正しいとは限らないため、アプリケーションの側で値を確かめるよう案内されています。 プログラムで、cells の数が枠の数と合うか、stack が段の上限を超えていないかを確かめ、合わない便は「確認が要る」にします。
積載率は、プログラムが次の式で計算します。
| 値 | 計算 |
|---|---|
| 容積の推定積載率 | 枠ごとの「埋まり(full=1、partial=0.5、empty=0)× 段 ÷ 段の上限」の合計 ÷ 見えた枠の数 |
| 見えない枠の割合 | not_visible の枠の数 ÷ 枠の数 |
| 重量の積載率 | 出荷データの重量 ÷ 最大積載量 |
partial を0.5と置くのは、半分埋まっているという意味ではなく、「埋まっても空いてもいない」を1つの値にまとめるための約束です。 値は配車課で決め、変えたら変えた日を記録します。途中で値を変えると、前後の月の数字が比べられなくなるからです。
見えない枠は、分母からも分子からも外します。 そのうえで見えない枠の割合を必ず並べて出します。 割合が大きい便の容積の積載率は、当てにならない数字です。3割を超える便は、候補の組から外します。
積み合わせの候補は、次の条件をすべて満たす便の組です。 同じ日、届け先の方面が同じ、届ける時間帯が重ならない、2便の容積の積載率の合計と重量の積載率の合計がどちらも1を下回る、見えない枠の割合がどちらも3割以下。条件は配車課が決め、プログラムの設定として持ちます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| ファイルサーバー | Python のファイルの読み書き | 写真の検知・読み取り・処理済みへの移動 |
| 車両台帳・配車表 | スプレッドシートの読み取り | 枠組みと分母 |
| 出荷データ | CSVの読み取り | 重量・方面・時間帯 |
| Gemini API | HTTP の呼び出し | 枠ごとの判定 |
| 運行台帳 | スプレッドシートへの書き込み | 下書きの列だけに書く |
| ドライバーのアプリ | 通知 | 撮り直しの依頼 |
配車表は読み取りだけです。 積み合わせの候補が出ても、配車を自動で組み替えません。 荷主との約束の時間、ドライバーの拘束時間、車両の点検の予定は、配車の担当が見て決めます。
運行台帳には、これまでの目測の列の隣に「推定」の列を足して書きます。 最初の数か月は両方を並べ、目測と推定の差の大きい便から、撮り方か枠組みを見直します。
人が確認する
配車の担当が見るのは、次の3つだけです。
- 「確認が要る」と「写真の不足」の便 … 見えない枠が多い便、枠の数が合わない便、写真が来ていない便。撮り方の問題か、車両台帳の誤りかを見分けます
- 積み合わせの候補の組 … 写真で両方の便の積み方を確かめ、荷主の条件と時間帯を見て、配車の見直しに使うかを決めます
- 荷崩れが見えた便 …
shifted_cargoの便は、運行管理の担当にすぐ回します
そのほかの便は、推定積載率の一覧で流し見て確定します。 全部の写真を開く設計にすると、①の時間は減りません。
最初の1か月は、これまでの目測と並べて動かします。 担当が付けた「7割」「半分」と、推定積載率を便ごとに並べます。差の大きい便を10便ほど写真で見直すと、撮り方、枠組み、段の上限のどれがずれているかが分かります。 差の原因が担当の目測の側にあることも少なくありません。
目標は、1,800件をならして1便0.8分です。 一覧で流す便は数秒、候補の組や確認が要る便は写真を開いて数分かかります。候補の組が多すぎる日は、条件の設定が緩すぎます。 配車課で条件を締めます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 写真がそろわないまま出発した | 「写真の不足」。積載率は出さず、未処理の数に入れる |
| 暗くて奥が見えない | not_visible が増えて「確認が要る」。照明をつけて撮る決まりを伝え直す |
| 枠の数が台帳と合わない | 車両の入れ替えや台帳の誤りを確かめる |
| 荷物が枠をまたいで斜めに置かれる | irregular_loading。容積の積載率は参考値として扱う |
| パレットに載らない荷物が多い荷主 | 枠を床の区切りとして使い、段の上限を荷主ごとに決め直す |
| 途中で荷を下ろし、また積む便 | 最初の積み込みの写真だけを使う。途中の積み込みは別の便として撮る決まりにする |
| 出荷データが届いていない | 重量の積載率を空にし、候補の組から外す |
| 車両台帳に無い車両(借りた車両・代車) | 枠組みが無いので処理せず「確認が要る」。台帳に仮の枠を足してから再処理する |
| Gemini API が応答しない | その便は「未処理」。次の起動で再試行し、翌朝に残れば数として出す |
「未処理」と「写真の不足」を推定積載率の平均に混ぜないでください。 混ぜると、写真の撮り方がそろっていない方面ほど積載率が高く見えることがあります。一覧には件数として別に出します。
記録を残す
- 便ごとの写真と、撮影の時刻、撮ったドライバー
- AIの答え(枠ごとの
fill・stack・box_2d、last_marker、荷台の単位の答え) - 計算した推定積載率と、そのとき使った車両台帳の枠の数と段の上限
- 出荷データの重量と、重量の積載率
- 出した積み合わせの候補の組と、配車の担当が使ったか・使わなかったか
- 方面ごと・荷主ごとの見えない枠の割合
候補の一覧は、たとえば次の形にします。
【積み合わせの候補】2026-10-07 分(未処理 3便を除く)
方面:県北 K031(容積 0.42/重量 0.35/見えない 0.06)+ K044(容積 0.38/重量 0.30/見えない 0.13)
時間帯 午前/午後 → 候補
方面:県南 K052(容積 0.51/重量 0.72)+ K058(容積 0.36/重量 0.41) → 重量で不可
荷崩れ K067(写真2 右奥)→ 運行管理へ
「使わなかった理由」を残すと、条件の見直しの材料になります。 時間帯、荷主の指定、荷物の混載の不可など、同じ理由で使われない候補が続くなら、その条件を設定に足します。
04実装レベルの3段階
最小構成では1日90便をさばけません。 確かめるための段階です。 半自動化で、1便3分が1.5分程度になります。 ①の目測と書き写しは無くなりますが、重量の突き合わせと月末の候補の検討が手で残ります。 本格構成で0.8分になり、この段階が本記事の想定です。 差が大きいのは、②と③が毎日の一覧に置き換わるためです。 段階を飛ばさないでください。 半自動化の数字を1か月見ると、見えない枠の多い車種と、枠組みの合わない車両が分かります。そこを直してから候補を出すほうが、配車の担当が一覧を信用します。
05工数削減シミュレーション
導入後 1,800件 × 0.8分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 中型・大型のトラックで毎日数十便を出す運送会社や、自社便を持つメーカー・卸・小売の物流部門。積み込み後の荷台の写真をドライバーがすでに撮っているが、配車の担当が目で見て空きを記録するだけで、便ごとの積載率を数字で追えていない場合。荷主や社内から積載効率の向上を求められ、積み合わせや帰り荷の候補を探す材料が要る場合。出荷データに便ごとの重量があり、車両ごとの荷台の大きさを台帳で持てる場合。
- 便の数が少なく、配車の担当が全便の積み方を覚えていられる場合。荷物の形がばらばらで、床の枠や積み上げの段で空きを表せない場合(引越し・家具など)。積載率を重量だけで管理すれば足りる貨物の場合。なお、積み付けの安全性や過積載の判断、運行の計画そのものは、この構成では代替できません。
07最小構成で試す方法
- 同じ車種のトラックで、積み方の違う便を20便選ぶ(満載、半分、奥だけ空き、の便を混ぜる)
- その車両の床を、前後の列 × 左右の枠として紙に書き出す
- 手元の Gemini の画面に、1便分の写真と「前後8列 × 左右2の枠」の説明を貼り付ける
- 「枠ごとに、埋まっている・一部・空き・見えない のどれかと、見える段の数を答えてください。積載率は書かないでください。奥が見えない枠は見えないと答えてください」と指示する
- 配車の担当が、同じ写真を見て枠ごとに付けた答えと突き合わせる
写真に荷物のラベルや人が写っていないものを選んでください。 試すときも、会社が使ってよいと決めた有料の枠で行います。
| 出てきた内容 | 判断 |
|---|---|
| 枠ごとの答えが担当の答えとおおむね合う | 車両台帳の枠の整備に進む |
| 奥の見えない枠を埋まっている・空きと答える | 指示の書き方で直る。構成は有効 |
| 見えない枠ばかりで答えにならない | 撮り方が先。 箱車の壁の目印か、ウイング車の側面の写真を用意する |
3行目は、箱車ではまず出ます。 後ろの扉からの写真だけでは、奥行きは誰にも分かりません。AIが「見えない」と答えたのは、正しい答えです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIに積載率を聞いて、数字の根拠が分からない | 枠ごとの状態だけを答えさせ、積載率は式で計算する |
| 奥の見えない枠を「埋まっている」「空き」と答える | not_visible を用意し、分母から外して割合を並べて出す |
| 暗い荷台の奥を空きと答える | 照明をつけて撮る。暗さを空きと扱わないよう指示する |
| 容積だけで候補を出し、重量で積めない | 重量の積載率を出荷データから計算し、両方を条件にする |
| 枠の数が車両ごとに違う | 車両台帳に前後の列と左右の数を持たせる |
| 荷物の高さで段の上限が変わる | 段の上限を荷主ごとの目安として持つ |
| 荷物のラベルを読んで外へ送る | 読み取りを禁じ、写真の撮り方でも写さないよう伝える |
| 未処理の便が平均に混ざる | 件数として別に出し、平均から外す |
| 候補を自動で配車に反映する | 候補の一覧までにする。組み替えは配車の担当が決める |
上の2行が、この構成の失敗のほとんどです。 どちらも「写真から分からないこと」を答えさせることから起きます。AIには見える枠だけを答えさせ、見えない枠は見えないまま数字に残すと分けておけば、車種が増えても枠組みを足すだけで済みます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷台の写真(荷物の外装、ラベル、ドライバーが写り込むこともある)、出荷データ(荷主、届け先、重量)、配車表、車両台帳です。荷主の出荷の量と届け先は、荷主にとって取引の情報です。
- 外へ送るものを絞る … Gemini API に送るのは、写真と荷台の枠組みだけです。荷主の名前、届け先、重量は送りません。 ラベルや伝票の文字も読ませません
- 荷主との契約を確かめる … 荷主によっては、荷物の写真を外部のサービスに送ることを契約で制限していることがあります。対象にする荷主を、確かめた荷主から始めます
- 有料の枠で使う … Gemini API の規約では、無料の枠では送った内容が製品の改善に使われ、人が読むことがあるとされています。有料の枠では、プロンプトや応答を製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録するとされています
- 保存される場所を確かめる … 有料の枠でも、内容はどの国でも一時的に保存・キャッシュされうるとされています
- 積み付けの安全や過積載の判断をAIに寄せない … 荷崩れの印は運行管理の担当への知らせであり、安全の判断と重量の管理は、これまでどおりの手順で行います
- ドライバーの評価に使わない … 推定積載率は便の数字で、ドライバーの数字ではありません。積み方は荷主の出荷の量と配車で決まり、ドライバーが選べることは少ないからです
誤りが起きた場合のリスクは、空いている便を満載と見て効率化の機会を逃すことと、満載の便を候補に挙げて配車を混乱させることの2つです。 どちらも見えない枠を推測で埋めると起きます。見えない枠を見えないまま扱い、候補から外すことで守ります。
10まず何から始めるか
1週目:1つの方面と1つの車種を選び、枠組みを決める
便の数が多い方面と、その方面でいちばん多い車種を選びます。その車種の床を前後の列 × 左右の枠に分け、荷主ごとの段の上限を決めます。
2週目:撮り方を決めて20便で試す
ウイング車は左右の側面、箱車は壁の目印が写るように撮る決まりを決め、20便で撮ってもらいます。手元の Gemini の画面で枠ごとに答えさせ、担当の答えと突き合わせます。 見えない枠の扱いを最優先で見ます。
3週目:式と候補の条件を決める
容積と重量の積載率の式、見えない枠の割合の上限、積み合わせの候補の条件を配車課で決めます。荷主に写真の扱いを確かめるのもこの週です。
4週目:便のフォルダから運行台帳までをつなぐ
Python で、フォルダの見回り、Gemini API の呼び出し、容積の推定積載率の計算と運行台帳への書き込みまで作ります。候補はまだ出さず、目測の列と並べて差を見ます。
2か月目: 出荷データの重量と合わせ、毎朝の候補の一覧を出します。3か月目以降: 1便3分が何分になったかを実測し、方面と車種を広げます。配車の担当が、ベテランの目利きを待たずに毎朝の一覧から積み合わせを検討できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 改正物流法で、荷主・物流事業者に物流効率化のための措置の努力義務を課し、国が判断基準を策定すること。一定規模以上の特定事業者に中長期計画の作成や定期報告等を義務付けること。令和10年度までに「5割の車両で積載効率50%を実現(全体の車両で積載効率44%に増加)」を目標とすること。積載効率の向上の取組として、共同輸配送や帰り荷の確保、適切なリードタイムの確保、発送量・納入量の適正化等が示されていること。特定貨物自動車運送事業者等の基準が保有車両台数150台以上であること | 国土交通省: 改正物流効率化法を踏まえた取組状況について(令和6年11月5日) | 2026-10-08 |
| 令和7年度の取組状況の調査で、トラック事業者の積載効率の向上等の取組として、複数の荷主の貨物の積合せ等による輸送網の集約、配送の共同化、復荷(帰り荷)の確保、配車システムの導入等による配車計画・運行経路の最適化などが調査項目になっていること | 国土交通省・経済産業省・農林水産省: 物流効率化に向けた荷主・物流事業者の取組状況の調査結果について | 2026-10-08 |
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。画像を直接入れる場合、指示などと合わせたリクエスト全体が20MBまでであること。1回のリクエストに複数の画像を入れられること。位置を box_2d として [ymin, xmin, ymax, xmax] の0〜1000の座標で返すこと。例が /v1beta/interactions を使っていること | Gemini API: Image understanding | 2026-10-08 |
画像1枚に割り当てるトークンの上限を low(280)・medium(560)・high(1120)・ultra_high(2240)から選べること。Gemini 3 のモデルで使えること。多くの画像の分析に high が勧められていること | Gemini API: Media resolution | 2026-10-08 |
構造化出力を /v1beta/interactions の response_format に mime_type: "application/json" とスキーマを入れて指定すること。enum、required、minimum・maximum が使えること。JSONとして正しくても値はアプリケーションの側で検証するよう案内されていること | Gemini API: Structured output | 2026-10-08 |
| 無料の枠では送った内容が製品の改善に使われ、人が読むことがあること。有料の枠では製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録すること。どの国でも一時的に保存・キャッシュされうること | Gemini API Additional Terms of Service | 2026-10-08 |
積載効率の定義や、荷主への報告の様式は、荷主との取り決めと国の判断基準・解説書で確かめてください。 本記事の推定積載率は、写真から見た容積の目安であり、法令や報告で使う積載効率の定義と同じとは限りません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1142)についてのご相談はこちらから。
