輸出入のコンテナの封印と扉の写真からシール番号を読み取り、船荷証券・パッキングリストと照らして番号の食い違いと封印の異常を拾う
倉庫やドレージの担当が撮ったコンテナの封印と扉の写真から、シール番号とコンテナ番号を読み取り、封印の状態を見分けます。 読んだ番号を船荷証券とパッキングリストの番号と照らし、食い違いと異常のあるものだけを担当者に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 商社/小売/物流/製造
- 対象部門
- 物流
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 画像認識
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 倉庫やドレージの業者から、メールやチャットで封印と扉の写真が届く
- 担当者が写真を保存し、どのコンテナの写真かをファイル名やメールの件名から探す
- 写真を拡大し、シール番号とコンテナ番号を目で読む
- 輸出入台帳を開き、該当する行の番号と1文字ずつ比べる
- 輸入では、船荷証券とパッキングリストのPDFも開き、台帳の番号が書類と同じかを見る
- 封印が切れていないか、曲がっていないか、扉の取っ手やロックの棒に異常がないかを見る
- 食い違いや異常があれば、業者に撮り直しを頼むか、輸出なら船会社への訂正、輸入なら荷主と保険の担当への連絡を始める
- 点検した日と結果を、台帳の備考に書く
- 人倉庫やドレージの業者が、写真を業者ごとの受け取り用フォルダに入れる(メールで届いたものは担当者が移す)
- 自動Google Apps Script が10分ごとに起動し、新しい写真を取り出す
- 自動ファイル名と撮影日時から、輸出入台帳の候補の行を引く
- 自動写真だけを Gemini API に渡し、シール番号・コンテナ番号・封印と扉の状態を返させる(書類の番号は渡さない)
- 自動返ってきた番号を正規化し、台帳の番号と1文字ずつ照らす
- 自動番号の照合結果と封印の状態から、`ok` / `mismatch` / `unreadable` / `anomaly` を決める
- 自動`unreadable` は、業者に撮り直しを頼む文面の下書きを作る
- 自動`mismatch` と `anomaly` は、物流の担当者のチャットに写真付きで知らせる
- 人担当者が `mismatch` と `anomaly` の写真を開き、読み取りと状態を確かめる
- 人書類の訂正、荷主や保険の担当への連絡、撮り直しの依頼を行う
- 自動`ok` のものは台帳の点検結果の列に書き込み、写真をコンテナ番号の名前で保管する
各工程の詳しい説明を読む
- 倉庫やドレージの業者から、メールやチャットで封印と扉の写真が届く
- 担当者が写真を保存し、どのコンテナの写真かをファイル名やメールの件名から探す
- 写真を拡大し、シール番号とコンテナ番号を目で読む
- 輸出入台帳を開き、該当する行の番号と1文字ずつ比べる
- 輸入では、船荷証券とパッキングリストのPDFも開き、台帳の番号が書類と同じかを見る
- 封印が切れていないか、曲がっていないか、扉の取っ手やロックの棒に異常がないかを見る
- 食い違いや異常があれば、業者に撮り直しを頼むか、輸出なら船会社への訂正、輸入なら荷主と保険の担当への連絡を始める
- 点検した日と結果を、台帳の備考に書く
(a)番号の1文字違いを見落とす。 シール番号は英字と数字の組み合わせで、「0」と「O」、「1」と「I」、「8」と「B」が並びます。 600本を目で見比べると、数字の並びが似ている番号ほど「合っている」と読んでしまいます。
(b)写真がどのコンテナのものか分からない。 業者は件名にブッキング番号を書く人もいれば、コンテナ番号を書く人もいて、何も書かない人もいます。写真を探して台帳の行に結びつけるまでに、点検そのものより時間がかかります。
(c)点検が後回しになり、間に合わない。 輸出では、船積みの指示を訂正できる期限があります。輸入では、封印を切ってから異常に気づいても、切る前の状態が写真にしか残っていません。 写真の点検が数日遅れると、どちらも打てる手が狭まります。
(d)見る人によって異常の基準が違う。 封印の札が少し曲がっているのを、連絡する人としない人がいます。
- 【人】 倉庫やドレージの業者が、写真を業者ごとの受け取り用フォルダに入れる(メールで届いたものは担当者が移す)
- 【自動】 Google Apps Script が10分ごとに起動し、新しい写真を取り出す
- 【自動】 ファイル名と撮影日時から、輸出入台帳の候補の行を引く
- 【自動】 写真だけを Gemini API に渡し、シール番号・コンテナ番号・封印と扉の状態を返させる(書類の番号は渡さない)
- 【自動】 返ってきた番号を正規化し、台帳の番号と1文字ずつ照らす
- 【自動】 番号の照合結果と封印の状態から、
ok/mismatch/unreadable/anomalyを決める - 【自動】
unreadableは、業者に撮り直しを頼む文面の下書きを作る - 【自動】
mismatchとanomalyは、物流の担当者のチャットに写真付きで知らせる - 【人】 担当者が
mismatchとanomalyの写真を開き、読み取りと状態を確かめる - 【人】 書類の訂正、荷主や保険の担当への連絡、撮り直しの依頼を行う
- 【自動】
okのものは台帳の点検結果の列に書き込み、写真をコンテナ番号の名前で保管する
4番目で書類の番号を渡さないのが、この設計の分かれ目です。 照合はプログラムの文字の比較に任せ、AIには写真に写っているものだけを答えさせます。
6番目を規則で決めているのも意図してのことです。 封印の状態をAIが「切れている」「曲がっている」と記録しても、それを異常とするかは自社の基準の側に置きます。 何を異常として扱うかは、荷主や保険会社との取り決めで変わるからです。
02今回想定するシステム構成
倉庫・ドレージ業者(封印の拡大/扉の全体/コンテナ番号の写真) │ 業者ごとの受け取り用フォルダ(Google ドライブ) ▼【トリガー】Google Apps Script の時間主導型トリガー(10分ごと) Google Apps Script ├── 輸出入台帳から候補の行を引く(ブッキング番号・撮影日時) ▼ Gemini API ── 写真だけを見て答える(書類の番号は渡さない) │ シール番号/コンテナ番号/封印の状態/扉の状態 │ 1文字ごとの読みの確かさ、読めなかった理由 ▼ Google Apps Script ── 正規化と1文字ずつの照合(台帳=B/LとP/Lから写した番号) ▼ 判定(ok / mismatch / unreadable / anomaly) ├──▶ Google Chat(物流の担当者)── mismatch と anomaly を写真付きで ├──▶ 撮り直しの依頼の下書き(unreadable) └──▶ 輸出入台帳の点検結果の列/写真の保管
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(封印と扉の写真からの番号の読み取りと、状態の見分け) | Claude API、OpenAI API |
| 連携 | Google Apps Script(写真の取り出し、台帳の行の特定、照合、知らせ、記録) | Make、Power Automate |
| 連携 | Google Chat(物流の担当者のスペースへの知らせ) | Microsoft Teams |
| 台帳 | 輸出入台帳(Google スプレッドシート) | 基幹システムの船積みの画面 |
新しく足すのは、Gemini API の利用と、Apps Script のプログラムだけです。最初の準備作業は、業者ごとの受け取り用フォルダを作り、ファイル名の付け方を業者と取り決めることです。
写真の読み取りには、Gemini API の画像の理解の機能を使います。 公式のページでは、対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF とされています。スマートフォンで撮った写真がそのまま入る形式です。画像をリクエストに直接入れる場合は、指示などと合わせたリクエスト全体が20MBまでで、それより大きいものや、何度も使う画像は File API で上げてから参照します。1本につき3枚の写真を1回のリクエストにまとめて渡せます。
呼び出し方は、公式の例では /v1beta/interactions です。 input に指示と画像を並べ、結果を output_text から受け取ります。構造化出力も同じ呼び出しの response_format で指定します(第7章「出力形式」)。
写真の大きさは、そのまま費用と待ち時間に効きます。 縦横とも384ピクセル以下の画像は258トークン、それより大きい画像は768×768の区画に分けられ、区画ごとに258トークンと数えられます。封印の拡大写真は細部が要るので縮めすぎず、扉の全体の写真は状態が分かる程度に縮める、と写真の種類ごとに大きさを変えます。
03どうやって実装するのか
処理の起点を決める
Google Apps Script の時間主導型トリガーで、10分ごとに受け取り用フォルダを見ます。 写真が届いたらすぐ処理するのが理想ですが、業者は3枚を数分かけて1枚ずつ入れてきます。1枚目が届いた瞬間に動かすと、2枚目と3枚目がそろう前に判定してしまいます。
そこで、同じコンテナの写真が最後に届いてから10分たったものを「そろった」とみなします。 10分ごとに起動したとき、最後の写真の保存時刻から10分以上たっていれば処理し、たっていなければ次の起動に回します。
輸出では、もう1つのトリガーを足します。 船積みの指示の訂正の期限の前日の朝に、その期限を迎えるコンテナで写真がまだ届いていないものを一覧にして担当者に知らせます。写真が届かないこと自体を拾わないと、点検は「届いたものだけ」になります。
処理が終わった写真は、処理済みのフォルダに移します。移すのは判定まで終わったときだけにします。 受け取り用フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 封印の拡大写真 | シールの札、番号の刻印、ボルトやケーブルの留め具 | 業者の受け取り用フォルダ |
| 扉の全体の写真 | 両開きの扉、取っ手、ロックの棒、封印の位置 | 同上 |
| コンテナ番号の写真 | 扉に表示された4文字の英字と7桁の数字 | 同上 |
| 撮影の情報 | 撮影日時、業者名、ファイル名 | ファイルの属性と保存先のフォルダ |
| 台帳の行 | ブッキング番号、B/L番号、コンテナ番号、B/Lのシール番号、P/Lのシール番号、輸出か輸入か、訂正の期限 | 輸出入台帳 |
| 異常の基準 | 何を anomaly とするかの一覧 | 自社で用意する基準表 |
AIに渡すのは、上の3行の写真だけです。 台帳の行と異常の基準は、Apps Script の側で照合と判定に使います。台帳の番号をAIに見せないことが、入力の設計でいちばん大事な点です(第5章の4番目)。
台帳にB/LとP/Lのシール番号を別の列で持たせるのは、両者が食い違うことがあるからです。 1つの列にまとめると、どちらの書類が間違っているのかが分からなくなります。写真の番号が片方とだけ一致したら、もう片方の書類が誤りの候補です。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 写真 | 業者ごとの受け取り用フォルダ | Apps Script でフォルダ内の新しいファイルを列挙する |
| 撮影日時 | 写真のファイルの属性 | 取れなければ保存時刻で代える |
| 台帳の行 | 輸出入台帳 | ファイル名のブッキング番号かコンテナ番号で引く |
| 引けなかったときの候補 | 輸出入台帳 | 業者名と撮影日の前後2日で、該当しそうな行を最大5件 |
ファイル名の付け方を、業者と最初に取り決めます。 「ブッキング番号_写真の種類_連番.jpg」のように、台帳の行を引ける番号を先頭に置いてもらいます。 写真の種類は seal、door、cntr の3つにします。業者ごとにフォルダを分けておけば、業者名はフォルダから分かります。
ファイル名で引けなかった写真は、AIが読んだコンテナ番号で引き直します。 ここだけは読み取りの結果を使って行を探しますが、行が見つかったあとの照合は、改めて1文字ずつ行います。 引けた行が複数あれば、自動では決めずに担当者に回します。
メールで届いた写真は、担当者が受け取り用フォルダに移すところだけ手で行います。 業者にフォルダへの置き方を案内し、メールで届く割合を減らしていきます。
AIへ渡す前に整形する
- 形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF のいずれかであることを確かめます。それ以外は JPEG に変換します
- 向きの補正 … スマートフォンの写真は向きの情報だけを持っていることがあるので、回転してから渡します。横倒しの番号は読み違いのもとです
- 大きさの調整 … 封印の拡大写真は細部を残し、扉の全体の写真は長い辺を縮めます。リクエスト全体で20MBを超えないようにします
- そろっているかの確認 …
seal、door、cntrの3枚がそろっているかを見ます。sealが無ければAIに渡さず、撮り直しの依頼に回します - 重複の検知 … 同じコンテナで同じ日に二度届いたものは、新しいほうだけを使い、古いほうに印を付けます
- 輸出か輸入かの確認 … 台帳の行から、点検の向きを決めます。輸入は封印を切る前の写真であることが前提なので、撮影日時がデバンニングの開始より後なら印を付けます
4番目で封印の拡大写真が無いものを止めるのは、扉の全体の写真から番号を読ませないためです。 遠くから写った札の番号は、ほぼ読めないか、読めたように見えて違います。読めないと分かっている写真を読ませる必要はありません。
AIに処理させる
させるのは、写真に写っている番号を1文字ずつ読み、封印と扉の状態を決まった区分で答えることだけです。
| 見るもの | 答え方 | 判断できないときの扱い |
|---|---|---|
| シール番号 | 札に刻まれた英字と数字を、写っているとおりに | 1文字でも確かでなければ、その文字を ? にする |
| シールの数 | 写っている封印の数 | 札が重なって数えられなければ uncertain |
| コンテナ番号 | 4文字の英字と7桁の数字 | 読めない文字は ? |
| 封印の状態 | intact / cut / bent / tampered_suspected / not_visible | 写っていなければ not_visible |
| 扉の状態 | 取っ手とロックの棒が閉じた位置にあるか、扉に目立つ傷や隙間があるか | 写っていなければ not_visible |
| 写真の質 | ピンぼけ、反射、暗さ、遠すぎ | 当てはまるものをすべて挙げる |
右端の列で ? を使わせるのが、この表の要です。 確かでない文字を「たぶんこれ」で埋めると、照合で一致してしまうことがあります。? が1つでもあれば、照合の結果は unreadable になり、撮り直しに回ります。
| させないこと | 理由 |
|---|---|
| 書類の番号との一致の判断 | 照合はプログラムで行う。AIには書類の番号を見せない |
| 確かでない文字の推測 | ? で返す。似た文字に寄せない |
| 異常かどうかの結論 | 自社の基準で決める。AIは見えた状態を区分で答えるだけ |
| 荷を開けるかどうかの判断 | 荷主・保険・税関との関係で人が決める |
| 写っていない部分の推定 | 扉の裏側や、写真の外の状態を書かない |
1行目がいちばん大事です。 書類の番号を一緒に渡して「一致しているか」を聞くと、AIはほぼ必ず「一致」と答えます。一致を確かめる仕事を、一致を前提にした読み取りにすり替えてしまいます。
指示内容を固定する
あなたは物流部門で、海上コンテナの封印の写真を点検する立場です。
渡された写真に写っているものだけを答えてください。推測で埋めないでください。
【写真】
1枚目:封印の拡大(seal)
2枚目:扉の全体(door)
3枚目:コンテナ番号の表示(cntr)
写真がそろっていない場合は、ある写真だけで答えてください。
【答えること】
1. シール番号:札に刻まれた英字と数字を、写っているとおりに書く
2. シールの数:写っている封印の数
3. コンテナ番号:英字4文字と数字7桁
4. 封印の状態:intact/cut/bent/tampered_suspected/not_visible
5. 扉の状態:取っ手とロックの棒が閉じた位置にあるか。目立つ傷や隙間があるか
6. 写真の質:blur/glare/dark/too_far のうち当てはまるもの
【厳守事項】
- 確かでない文字は「?」にしてください。似た文字に寄せないでください。
特に 0 と O、1 と I、8 と B、5 と S、2 と Z は、形がはっきりしない限り「?」です。
- 番号の桁を補ったり、数え直して桁数を合わせたりしないでください。
- 封印が写っていない場合は、扉の全体の写真から番号を読もうとしないでください。
seal_number は空にし、seal_state を not_visible にしてください。
- 封印の状態は、見えたものだけで区分を選んでください。
迷ったときに intact を選ばないでください。
- 異常かどうか、荷を開けるべきかは書かないでください。
- evidence には、その区分を選んだ理由を、写真の中のどこに何が見えるかで書いてください。
- 写真がコンテナの封印や扉でないと判断した場合は、photo_type に種類を書き、
他の項目を空にしてください。
書類の番号を指示の中に1つも書いていないことが、この例の要点です。 指示の文面を後から直す人が「参考に台帳の番号も渡そう」と足しがちなので、指示の冒頭のコメントにも、渡さない理由を残しておきます。
「迷ったときに intact を選ばない」を明記しないと、ほとんどが intact になります。 写真の多くは異常が無いので、迷ったときに多いほうを選ぶのが自然な振る舞いです。禁じるのは、迷いを正常の側に倒すことです。
出力形式を固定する
Gemini API の構造化出力で、次の形のJSONを受け取ります。 response_format に mime_type: "application/json" とスキーマを入れて指定し、区分は enum で決めておきます。
{
"photo_type": "container_seal",
"seals": [
{ "seal_number": "", "char_uncertain": [0],
"seal_state": "intact | cut | bent | tampered_suspected | not_visible",
"evidence": "" }
],
"seal_count": 1,
"container_number": "",
"door_state": { "handles_closed": "yes | no | not_visible",
"visible_damage": "yes | no | not_visible", "evidence": "" },
"photo_quality": ["blur", "glare"]
}
char_uncertain には、? にした文字の位置を0から数えて入れます。どの文字が読めなかったかが分かれば、撮り直しの依頼に「左から3文字目が反射で読めない」と書けます。
1つ目の理由は、読み取りと照合を別の層に置けることです。 このJSONにはAIが埋めた読み取りだけが入り、照合の結果は Apps Script が別に持ちます。
| 判定 | 条件(Apps Script の規則) |
|---|---|
unreadable | シール番号かコンテナ番号に ? がある。または封印の写真が無い |
mismatch | 読み取った番号が台帳のB/L・P/Lのシール番号のどちらとも一致しない。または片方とだけ一致する |
anomaly | seal_state が cut、bent、tampered_suspected。または取っ手が閉じていない |
ok | 上のどれにも当たらない |
照合の前に、番号を正規化します。 空白、ハイフン、全角の英数字をそろえ、英字は大文字にします。 正規化で 0 と O を同じものとみなすことはしません。それをすると、1文字違いを見落とした目視と同じことになります。
2つ目の理由は、構造化出力でも値の正しさは保証されないことです。 公式のページでも、JSONとして正しくても値はアプリケーションの側で検証するよう案内されています。コンテナ番号が英字4文字と数字7桁の形になっているかは、Apps Script の側でも確かめます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受け取り用フォルダ | Apps Script の Drive の操作 | 新しい写真の列挙と、処理済みへの移動 |
| Gemini API | HTTP の呼び出し | 写真の読み取りと状態の区分 |
| 輸出入台帳 | Apps Script のスプレッドシートの操作 | 行を引く。点検結果の列にだけ書き込む |
| Google Chat | 物流の担当者のスペースへの知らせ | mismatch と anomaly を写真の場所付きで |
| 撮り直しの依頼 | 下書きとして一覧に置く | unreadable の業者あての文面 |
台帳に書き込むのは、点検結果の列だけです。 シール番号の列は書き換えません。AIの読み取りで台帳の番号を上書きすると、書類の誤りを写真の読み違いで「直して」しまうことがあります。 台帳の番号を直すのは、書類を確かめた担当者です。
撮り直しの依頼も、送るのは人です。 下書きには業者名、コンテナ番号、どの写真のどの部分が読めないかを入れます。同じ業者から同じ日に何件も出ていれば、1通にまとめます。
人が確認する
人が開くのは mismatch と anomaly のものだけです。 ok は台帳の点検結果の列で件数を見て終わりにし、unreadable は下書きを確かめて業者に送ります。
anomalyを先に見る … 輸入では封印を切る前に止められるかどうかが時間で決まります。倉庫に連絡し、封印を切らずに待ってもらうかを決めますmismatchの写真を自分で読む … AIの読み取りが正しいかを、拡大写真で1文字ずつ確かめます- どの書類が違うかを見る … 写真の番号がB/Lとだけ一致すればP/Lの誤り、P/Lとだけ一致すればB/Lの誤りの候補です。どちらとも違えば、現物の確認が要ります
- 対応を決めて記録する … 書類の訂正、荷主への連絡、撮り直し。AIの読み取りが誤っていた場合は、どの文字をどう読み違えたかを残します
2番目を省かないでください。 mismatch の原因が、書類の誤りではなくAIの読み違いであることは珍しくありません。船会社に訂正を頼んでから読み違いだと分かると、訂正の訂正が要ります。
目標は、600本をならして1本2分です。 担当者が詳しく見るのは mismatch と anomaly と unreadable の合計で全体の2割前後という想定で、それより多い月は、写真の撮り方か、台帳の番号の入れ方に原因があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 封印の拡大写真が無い | AIに渡さず unreadable。業者に撮り直しの依頼の下書きを作る |
| 写真がどのコンテナか特定できない | AIが読んだコンテナ番号で引き直す。引けなければ担当者へ |
| 台帳にシール番号がまだ入っていない | 照合を保留し、読み取りの結果だけを残す。番号が入った時点で照合し直す |
| シールが2つ付いている | seals に2つ並べ、台帳の番号と組み合わせで照合する |
| 輸入で、撮影日時がデバンニングの開始より後 | 封印を切る前の写真でない可能性がある。判定に印を付けて担当者へ |
| 写真が20MBを超える | 大きさを調整して投入し直す。封印の拡大写真は細部を残す |
| 写真が封印や扉でない | photo_type を見て、照合せず担当者へ戻す |
| Gemini API が応答しない | 受け取り用フォルダに残す。処理済みへ移すのは判定まで終わったときだけ |
| 同じコンテナの写真が二度届く | 新しいほうを使い、古い判定には印を付ける |
上から3行目は、輸入でよく起きます。 写真がB/Lより先に届くことがあるからです。照合を保留したものを毎朝一覧にし、番号が入ったものから照合し直します。 保留のまま忘れられると、点検が届いていないのと同じになります。
記録を残す
- 元の写真と、撮影日時・業者名・届いた経路
- AIに渡した指示の版と、返ってきたJSONの全文
- 照合に使った台帳の行の内容(そのときのB/LとP/Lのシール番号)
- 判定(
ok/mismatch/unreadable/anomaly)と、その規則の版 - 人が判定を覆した記録 … どの文字を、どう読み違えていたか
- 撮り直しの依頼と、撮り直された写真の対応
- 業者ごとの
unreadableの発生率
写真はコンテナ番号の名前で保管し、少なくとも荷の引き渡しが終わるまで消しません。 輸入で封印の異常があった場合、切る前の状態を示すのはこの写真だけになることがあります。保険の請求や荷主との話し合いで出すことを考えて、元の写真を加工しないまま残します。
3つ目で台帳の内容を残すのは、番号が後から直されるためです。 書類の訂正が入ると台帳の番号が変わり、当時なぜ mismatch になったのかが分からなくなります。
最後の行は、業者との話し合いの材料になります。 特定の業者だけ unreadable が多いなら、撮る位置や光の当て方を一緒に決め直します。
04実装レベルの3段階
最小構成では本数がさばけません。 1本ずつ貼り付けるので、600本には使えません。確かめるための段階です。 半自動化で、1本6分が4分程度になります。 読み取りは自動になりますが、どのコンテナの写真かを台帳と結びつける作業と、照合が手で残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、写真と台帳の行を結びつける作業が、1本ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、? の多い業者と、ファイル名の付け方が守られていない業者が分かります。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海上コンテナで輸出と輸入の両方を扱い、月に数百本のコンテナについて、倉庫やドレージの業者から封印と扉の写真を受け取っている商社・メーカー・量販店の物流部門。写真がメールやチャットでばらばらに届き、船荷証券やパッキングリストのシール番号との突き合わせが、手の空いた担当者の目視に任されている場合。シール番号の書き間違いで船荷証券の訂正や到着地での確認の手間が出たことがある場合。
- 扱うコンテナが月に数本で、担当者が1本ずつ現物を見に行ける場合。封印の写真を撮る運用が倉庫やドレージの業者と取り決められておらず、写真そのものが届かない場合。電子シールなど、番号を機械で読み取る仕組みをすでに入れている場合。なお、封印に異常があったときに荷を開けるか、税関や保険会社、荷主にどう連絡するかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月のコンテナから30本を選ぶ(うち数本は、番号の食い違いや封印の異常があったと分かっているものを入れる)
- その30本の写真を、手元の生成AIのサービスの画面に1本ずつ貼り付ける
- 「この写真のシール番号とコンテナ番号を、写っているとおりに書いてください。確かでない文字は ? にしてください。封印が切れていないか、曲がっていないかを書いてください」と指示する。台帳の番号は書かない
- 返ってきた番号を、台帳の番号と表計算で1文字ずつ比べる
- 当時の目視の結果と突き合わせる
30本は必ずやってください。 プログラムを組む前に、「この業者のこの撮り方で、番号が読めるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
当時見つけた食い違いが、? か違う文字として出た | Apps Script との連携に進む |
| 確かでない文字を、似た文字で埋めた | 指示の書き方で直る。構成は有効 |
反射やピンぼけで、? だらけになった | 撮り方の取り決めが先。 AIの問題ではない |
3行目が出ることは珍しくありません。 封印の札は光を返し、真正面から撮ると番号が反射で消えます。 斜めから撮るなどの撮り方を業者と決めて、撮り直したもので試してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 台帳の番号を渡して「一致しているか」を聞いてしまう | AIには写真だけを渡す。 照合はプログラムで行う |
| 確かでない文字が似た文字で埋まる | ? を使わせ、0 と O などの組を指示に明記する |
正規化で 0 と O を同じものとみなす | それをすると1文字違いを見落とす。 空白と全角・半角だけをそろえる |
迷った封印が intact になる | 迷ったときに intact を選ばないと明記する |
| 封印の札が反射して番号が消える | 斜めから撮る、影を作るなど、撮り方を業者と決める |
| 写真が横倒しで届く | 前処理で向きを補正してから渡す |
| 3枚がそろう前に判定してしまう | 最後の写真から10分たってから処理する |
| どのコンテナの写真か分からない | ファイル名の先頭にブッキング番号を置いてもらう |
| B/LとP/Lで番号が違う | 台帳に別の列で持たせる。 1つにまとめない |
| 写真がB/Lより先に届く | 照合を保留し、番号が入った時点で照合し直す |
| AIの読み取りで台帳の番号を上書きする | 点検結果の列にだけ書く |
| 構造化出力のJSONを信じきる | 値はアプリケーションの側で検証する。 コンテナ番号の形も確かめる |
上の3行が、この構成の失敗のほとんどです。 どれも「合っている」の側に倒れる失敗で、見つけたかった食い違いが静かに消えます。 誤りを見つける仕組みが、誤りを消す方向に働いていないかを、最初の1か月は人が確かめてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: コンテナの写真、シール番号、コンテナ番号、ブッキング番号とB/L番号、取引先の名前です。写真には倉庫の内部、ドレージの車両のナンバー、作業者の顔が写り込むことがあります。
- 有料の枠で使う … Gemini API の規約では、無料の枠では送った内容が製品の改善に使われ、人が読むことがあるとされ、機密や個人の情報を送らないよう求めています。 有料の枠ではプロンプトや応答を製品の改善に使わず、禁止事項の違反を見つけるためなどに限った期間だけ記録するとされています。業務では課金を有効にした有料の枠で使います
- AIに渡すのは写真だけにする … 台帳の行、取引先の名前、B/L番号は渡しません。照合のためにも、情報を絞るためにも、渡さないほうがよい構成です
- 写り込みを減らす … 封印の拡大写真には人の顔はほぼ写りませんが、扉の全体の写真には写ることがあります。撮り方の取り決めで、人を画面に入れないよう業者に頼みます
- 異常の判断を自動で確定させない …
anomalyは知らせるところまでです。荷を開けるか、税関や保険会社、荷主にどう連絡するかは担当者が決めます - 業者への連絡を自動で送らない … 撮り直しの依頼も下書きまでです。業者との関係に関わるので、送るのは人です
- 写真を加工しないまま保管する … 封印の異常があったときの記録になります。前処理で縮めた写真とは別に、元の写真を残します
誤りが起きた場合のリスクは、食い違いや異常を見落とすことと、無いものをあるとして騒ぎにすることの2つです。 前者はAIに書類の番号を見せたり、迷いを intact に倒したりすると起き、後者は読み違いを人が確かめずに書類の訂正を頼むと起きます。どちらも、読み取りと照合を分け、人が写真を見直すことで防ぎます。
10まず何から始めるか
1週目:台帳の列と、業者との取り決めを用意する
輸出入台帳に、B/LとP/Lのシール番号の列と点検結果の列を足し、上位5社の業者に撮り方とファイル名の付け方を案内します。
2週目:30本で試す
先月の写真から30本を選び、手元の生成AIのサービスに貼り付けて、番号と封印の状態を答えさせます。台帳の番号を書かずに読ませ、? が出るか、似た文字で埋めていないかを最優先で見ます。
3週目:異常の基準を決める
何を anomaly として担当者に回すかを、輸出チームと輸入チームで決めます。 封印の曲がりをどこまで許すか、取っ手が写っていない写真をどう扱うか。荷主や保険の担当との取り決めがあれば、それに合わせます。
4週目:受け取り用フォルダから読み取りまでをつなぐ
Apps Script で受け取り用フォルダを見て、Gemini API で読み、結果を一覧に書き出すところまで作ります。この時点では照合と判定をせず、読み取りの一覧だけを人が台帳と見比べます。
2か月目: 台帳の行の特定、正規化と照合、判定と知らせを足します。mismatch と anomaly と unreadable の件数を毎週数えます。3か月目以降: 撮り直しの依頼の下書きを足し、1本6分が何分になったかを実測します。業者ごとの unreadable の発生率を見て、撮り方の取り決めを見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。画像を直接入れる場合、指示などと合わせたリクエスト全体が20MBまでで、大きいものや繰り返し使うものは File API を使うこと。縦横とも384ピクセル以下の画像が258トークン、それより大きい画像は768×768の区画ごとに258トークンであること。例が /v1beta/interactions を使い、結果を output_text から受け取ること | Gemini API: Image understanding | 2026-10-08 |
構造化出力を /v1beta/interactions の response_format に mime_type: "application/json" とスキーマを入れて指定すること。enum と required が使えること。JSONとして正しくても値はアプリケーションの側で検証するよう案内されていること | Gemini API: Structured output | 2026-10-08 |
| 18歳以上であることが必要なこと。無料の枠では送った内容が製品の改善に使われ、人が読むことがあり、機密や個人の情報を送らないよう求めていること。有料の枠ではプロンプトや応答を製品の改善に使わず、禁止事項の違反を見つけるためなどに限った期間だけ記録すること | Gemini API Additional Terms of Service | 2026-10-08 |
| 国際輸送のコンテナは少なくとも1つのシールで閉じてから船に積まれること。シールは切らないと外せない番号付きの札であること。到着地で買い手がシール番号を船荷証券の番号と同じか確かめるべきこと。正しいシール番号を船積みの指示に入れる責任が売り手にあること | Maersk: What are container seal numbers and how do I use them? | 2026-10-08 |
封印に異常があったときの対応(荷を開けるか、誰に連絡するか)は、荷主・保険会社・通関業者との取り決めに従ってください。 本記事は公開されている製品の仕様と船会社の案内で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0993)についてのご相談はこちらから。
