海上コンテナの搬出入でターミナルが発行する機器受渡証(EIR)の損傷記録を読み取って台帳にそろえ、返却時に増えた損傷を拾って修理費の請求に備える
ターミナルやバンプールのゲートで受け取る機器受渡証(EIR)を読み取り、コンテナ番号と損傷の記録を台帳にそろえます。搬出時と返却時の2枚を突き合わせ、返却時に増えた損傷を担当者に知らせます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 対象業界
- 商社/物流/製造
- 対象部門
- 物流
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/情報が見つからない/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 運転手がゲートでEIRの控えを受け取り、車両に置いて帰る
- 運転手が1日の終わりに業務課へEIRを提出する。忘れたものは翌日以降に出てくる
- 業務課の担当がEIRを1枚ずつ見て、コンテナ番号・日付・ゲートの場所・搬出か搬入かを台帳に打ち込む
- 損傷の欄に記入があれば、台帳の備考に「損傷あり」とだけ書く
- EIRを日付順に綴りに入れる
- 船会社から修理費の請求が届くと、請求書のコンテナ番号で台帳を引き、日付から綴りをめくって搬出時と返却時のEIRを探す
- 2枚の損傷の欄と展開図を見比べ、搬出時に既にあった損傷かを判断する
- 人運転手がゲートでEIRを受け取ったら、その場でスマートフォンで撮影して送る。紙の控えは従来どおり持ち帰る
- 自動画像が保管場所に届いたことをきっかけに処理が動き、画像の大きさと枚数を確かめる
- 自動OCRがEIRの文字・表・選択の印と、展開図の切り出し画像を返す
- 自動コンテナ番号のチェックデジットを計算し、読み取りが正しいかを確かめる
- 自動生成AIが、読み取り結果を台帳の項目と損傷の記録にそろえる
- 自動配車の記録と照らして、どの案件のどちら向きの受け渡しかを決める
- 自動同じコンテナの搬出時と返却時のEIRがそろったら、損傷の記録を面と記号で突き合わせる
- 自動返却時に増えた損傷、読めない欄、相手のEIRが無いものに印を付けて担当者に知らせる
- 人担当者が印の付いたものだけを開き、元の画像と見比べて確かめる
- 人増えた損傷が確かなら、当日のうちに運転手に事情を聞いて記録する
各工程の詳しい説明を読む
- 運転手がゲートでEIRの控えを受け取り、車両に置いて帰る
- 運転手が1日の終わりに業務課へEIRを提出する。忘れたものは翌日以降に出てくる
- 業務課の担当がEIRを1枚ずつ見て、コンテナ番号・日付・ゲートの場所・搬出か搬入かを台帳に打ち込む
- 損傷の欄に記入があれば、台帳の備考に「損傷あり」とだけ書く
- EIRを日付順に綴りに入れる
- 船会社から修理費の請求が届くと、請求書のコンテナ番号で台帳を引き、日付から綴りをめくって搬出時と返却時のEIRを探す
- 2枚の損傷の欄と展開図を見比べ、搬出時に既にあった損傷かを判断する
(a)損傷の中身が台帳に残らない。 4番で「損傷あり」としか書かないので、どの面に何の損傷があったかは、紙を見ないと分かりません。 請求が来るまで誰も2枚を見比べないため、返却時に損傷が増えていても、その場で運転手に事情を聞けません。
(b)コンテナ番号の写し間違いが、後から効いてくる。 11桁の英数字を手で打つので、1文字違いが混ざります。台帳で引けないEIRは、綴りの中で事実上行方不明になります。 写し間違いに気づくのは、請求が来て探したときです。
(c)空欄の意味が決まっていない。 損傷の欄が空のEIRを「損傷なし」と読むかどうかが、担当者によって違います。記入が省かれただけの空欄を「損傷なし」と扱うと、搬出時に既にあった損傷を自社の責任として受け入れることになります。
(d)全件を丁寧に写すのは続かない。 1,200枚を3名で写すと、1枚4分でも月80時間です。月末の繁忙期から順に、損傷の欄が後回しになります。
- 【人】 運転手がゲートでEIRを受け取ったら、その場でスマートフォンで撮影して送る。紙の控えは従来どおり持ち帰る
- 【自動】 画像が保管場所に届いたことをきっかけに処理が動き、画像の大きさと枚数を確かめる
- 【自動】 OCRがEIRの文字・表・選択の印と、展開図の切り出し画像を返す
- 【自動】 コンテナ番号のチェックデジットを計算し、読み取りが正しいかを確かめる
- 【自動】 生成AIが、読み取り結果を台帳の項目と損傷の記録にそろえる
- 【自動】 配車の記録と照らして、どの案件のどちら向きの受け渡しかを決める
- 【自動】 同じコンテナの搬出時と返却時のEIRがそろったら、損傷の記録を面と記号で突き合わせる
- 【自動】 返却時に増えた損傷、読めない欄、相手のEIRが無いものに印を付けて担当者に知らせる
- 【人】 担当者が印の付いたものだけを開き、元の画像と見比べて確かめる
- 【人】 増えた損傷が確かなら、当日のうちに運転手に事情を聞いて記録する
9番目が、この設計の分かれ目です。人が見るのは全件ではありません。 損傷の記録が搬出時と同じもの、両方とも「損傷なし」と書かれたものは一覧で流し見て終わりにします。全件を人が見比べる設計にすると、80.0時間はほとんど減りません。
10番目を当日に置いているのも、意図してのことです。 請求が届くのは数週間から数か月後で、その時点では運転手も覚えていません。 増えた損傷を見つける価値は、記憶が残っているうちに事情を聞けることにあります。
02今回想定するシステム構成
EIRの控え(紙) │ 運転手がスマートフォンで撮影して送信 ▼【トリガー】保管場所への画像の保存 Azure Functions ├──▶ 画像の大きさ・枚数の確認 ▼ Azure AI Document Intelligence(レイアウトモデル) │ 文字・表・選択の印・単語ごとの信頼度・展開図の切り出し画像 ▼ Azure Functions ── コンテナ番号のチェックデジット計算 ▼ Azure OpenAI ── 台帳の項目と損傷の記録にそろえる(JSONで返す) ▼ Azure Functions ── 配車の記録との照合(案件・向き) │ 搬出時と返却時の損傷の突き合わせ ▼ コンテナの台帳(受け渡しごとの行)+業務課への通知 ▼ 【人が印の付いたものだけ確認】→ 運転手への聞き取り
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI(Form Parser) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(読み取り結果を台帳の項目と損傷の記録にそろえる) | Claude API、Gemini API |
| 連携 | Azure Functions(チェックデジットの計算、配車の記録との照合、損傷の突き合わせ、台帳への書き込み) | Azure Logic Apps |
| 保管 | Azure Blob Storage(EIRの画像、読み取り結果、展開図の切り出し画像) | SharePoint のドキュメントライブラリ |
配車システムには書き込みません。 この構成が作るのは台帳の行と突き合わせの結果までで、配車システムからは案件番号・コンテナ番号・運転手・日付を読むだけです。
土台になるのは、Azure AI Document Intelligence のレイアウトモデルです。 テキスト、テーブル、選択マーク、ドキュメントの構造を抽出するモデルで、手書きのテキストの対応言語に日本語(ja)が含まれています(v4.0 のレイアウトモデル)。EIRは印刷された様式に作業員が手で書き込むものが多く、印刷と手書きが同じ紙に混ざります。
この構成で効くのは、4つの返り値です。 1つ目は単語ごとの confidence で、手書きの記号を読めたかどうかの根拠になります。2つ目は styles で、各テキスト行が手書きのスタイルかどうかが信頼度とともに返ります。様式に印刷された凡例の文字と、作業員が書き込んだ記号を分けられます。 3つ目は選択マークで、「搬出/搬入」「実入り/空」のような丸やチェックの欄が selected / unselected で返ります。4つ目は図(figures)で、分析時に output=figures を指定すると、検出された図のトリミングされた画像が作られます。 展開図をこの画像のまま台帳に添えます。
OCRと生成AIを同じ Azure のサブスクリプションにそろえているのは、処理の地域と権限を1か所で管理するためです。 代替候補の製品に替える場合は、その製品がどの地域で処理するかを導入前に確かめてください。
03どうやって実装するのか
処理の起点を決める
保管場所にEIRの画像が置かれたことを起点にします。 運転手はゲートを出たところで、業務用のスマートフォンから撮影して送ります。送り先は運転手ごとのフォルダではなく1つの受信用の場所にし、ファイル名に運転手のコードと撮影の日時を入れます。
1日の終わりのまとめ処理にはしません。 返却時に損傷が増えていたとき、その日のうちに運転手に聞けるかどうかで、残る記録の質が変わります。 届くたびに1枚ずつ処理し、処理が終わった画像は処理済みの場所へ移します。移すのは成功したときだけにし、受信用の場所に残っている数を、そのまま未処理の数として扱います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| EIRの画像 | ゲートで受け取った控えの写真またはスキャン。運転手のコードと撮影日時 | 受信用の保管場所 |
| 読み取り結果 | 文字、表のセル、単語ごとの信頼度、手書きかどうか、選択の印、展開図の切り出し画像 | Azure AI Document Intelligence |
| 配車の記録 | 案件番号、コンテナ番号、受け渡しの場所、予定日、運転手、輸入か輸出か | 配車システム(読み取りのみ) |
| ゲートの一覧 | ターミナルとバンプールの名称、EIRの様式の種類、損傷の記号の凡例 | 業務課で用意する一覧 |
| 損傷の記号の凡例 | ゲートごとに、記号と意味(凹み・穴・曲がり・裂け目など)の対応 | 各ゲートの様式から業務課が写したもの |
質を決めるのは、下の2つです。 損傷の記号はゲートや船会社によって書き方が違うことがあり、凡例が無ければ、生成AIは記号を「それらしい意味」に読み替えます。 凡例はゲートごとに分けて持ち、読み取り結果と一緒に、そのゲートの凡例だけを渡します。
データの取得方法を決める
読み取りは、レイアウトモデル(prebuilt-layout)を呼ぶだけです。出力の形式は Markdown を指定し(outputContentFormat=markdown)、図の切り出しも指定します(output=figures)。v4.0 では表が HTML のテーブルとして出力され、結合されたセルや複数行の見出しも表現できます。 EIRの損傷の欄は「面」「位置」「記号」が横に並ぶ表になっていることが多く、この形のほうが生成AIに渡したときに列を取り違えにくくなります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 全文(Markdown) | content | 生成AIに渡して、台帳の項目と損傷の記録にそろえる |
| 表とセル | tables(rowIndex/columnIndex/kind) | 損傷の欄の行と列の位置を決める |
| 単語ごとの信頼度 | pages の words(confidence) | コンテナ番号と記号を読めたかどうかの判定 |
| 手書きかどうか | styles(isHandwritten) | 印刷された凡例と、書き込まれた記号を分ける |
| 選択の印 | selectionMarks(selected/unselected) | 搬出/搬入、実入り/空の欄 |
| 展開図 | figures と切り出し画像 | 台帳に画像として添える |
記号の信頼度は、セルではなく単語で見ます。 表のセルの文字列は返りますが、信頼度は単語ごとに返ります。セルの範囲に入る単語の信頼度のうち、いちばん低いものをそのセルの信頼度として扱います。
手書きかどうかの判定が、空欄の見分けに効きます。 様式に「損傷記録」「DAMAGE」と印刷された欄があり、その下に何も書かれていなければ、手書きの行は見つかりません。印刷された文字だけがある欄は、書き込みが無い欄として扱います。
AIへ渡す前に整形する
- 大きさの確認 … 画像の大きさは50×50ピクセルから10,000×10,000ピクセルの間である必要があります。スマートフォンの写真はこの範囲に収まりますが、縮小して送る設定になっていないかを確かめます
- 文字の大きさの確認 … 抽出するテキストの最小の高さは、1024×768ピクセルの画像で12ピクセルとされ、150dpiで約8ポイントの文字に当たります。EIRの記号は小さく書かれることが多く、遠くから撮るとこの下限を割ります
- 1枚に1枚の確認 … 2枚のEIRを並べて1枚の写真に撮ったものは、ページが分かれず読み取り結果が混ざります。表が2つ以上あり、コンテナ番号が2つ読めたものは、撮り直しを頼みます
- 運転手と日時の特定 … ファイル名から運転手のコードと撮影日時を取ります。撮影日時は、EIRの日付を確かめる手がかりにします
- 配車の候補の絞り込み … その運転手の、撮影日の前後1日の案件だけを候補にします。全部を渡すと、番号の似た別のコンテナに紐づけます
- 重複の検知 … 同じ運転手から、同じコンテナ番号・同じ日付のEIRが2回届いたら、撮り直しとして新しいほうを使います
2番目を軽く見ないでください。 ぶれた写真や影のかかった写真で記号が読めないものは、「損傷なし」と区別がつきません。
AIに処理させる
させるのは、ゲートごとにばらばらな様式の読み取り結果を、台帳の決まった項目と損傷の記録にそろえることだけです。
| させること | 中身 |
|---|---|
| 基本項目の対応づけ | コンテナ番号、サイズとタイプ、受け渡しの日時、ゲートの名称、搬出か搬入か、実入りか空か、シール番号、車両番号を台帳の項目に入れる |
| 損傷の欄の状態の判定 | 欄の状態を recorded(記号が書かれている)/stated_none(「損傷なし」「NIL」などと書かれている)/blank(何も書かれていない)/unreadable(書かれているが読めない)のどれかにする |
| 損傷の記録の書き出し | 記号が書かれている行ごとに、面・位置・記号・寸法を、書かれたとおりに写す |
| 記号の意味の対応づけ | 渡された凡例にある記号だけ、意味を付ける。凡例に無い記号は意味を空にする |
| 作業員の備考の写し | 「既存」「旧損」のような但し書きを、そのまま写す |
| させないこと | 理由 |
|---|---|
| 空欄を「損傷なし」とすること | 記入が省かれただけかもしれない。 blank のまま残す |
| 凡例に無い記号の意味の推測 | 似た記号の意味を当てると、損傷の種類が変わる |
| 展開図の印の位置の解釈 | 印の位置は画像で人が見る。文字に直すと位置がずれる |
| 搬出時との比較 | プログラムで行う。 生成AIに比べさせると、似た記号を同じものとして扱う |
| 損傷の責任の判断 | 誰の責任かは、業務課と荷主・船会社とのやり取りで決まる |
1行目がいちばん起きやすい失敗です。 何も書かれていない欄を渡すと、生成AIは「損傷は記録されていない」と読み、stated_none にします。その瞬間、記入が省かれたEIRと、損傷なしを確かめたEIRの区別が消えます。
指示内容を固定する
あなたは海上コンテナの陸送会社の業務課で、ゲートで受け取った
機器受渡証(EIR)を台帳の項目にそろえる担当です。
OCRの読み取り結果だけを見て作業してください。推測で埋めないでください。
【やること】
1. 基本項目(コンテナ番号、サイズとタイプ、受け渡しの日時、ゲートの名称、
搬出か搬入か、実入りか空か、シール番号、車両番号)を対応づける
2. 損傷の欄の状態を、次の4つから1つ選ぶ
- recorded ..... 損傷の記号が1つ以上書かれている
- stated_none .. 「損傷なし」「異常なし」「NIL」「NO DAMAGE」などと
書かれている、または「なし」に印が付いている
- blank ........ 手書きの書き込みが何も無い
- unreadable ... 書き込みはあるが、文字として確定できない
3. recorded のとき、記号が書かれた行ごとに、面・位置・記号・寸法を写す
4. 【凡例】にある記号には意味を付ける。凡例に無い記号は meaning を空にする
5. 但し書き・備考は、そのまま写す
【厳守事項】
- 何も書かれていない損傷の欄を stated_none にしないでください。
「損傷なし」と書かれていない限り、blank です。
- 様式に印刷された欄の名前(例:「損傷記録」「DAMAGE」「凡例」)は
書き込みではありません。印刷された文字だけを根拠に recorded や
stated_none にしないでください。
- 凡例に印刷された記号の一覧を、損傷の記録として写さないでください。
- コンテナ番号は読み取った文字列をそのまま写してください。
桁を補う、似た文字(0とO、1とI、8とB)を入れ替えることをしないでください。
- 凡例に無い記号の意味を推測しないでください。
- 展開図の印の位置を文字に直さないでください。図があることだけを
has_diagram に書いてください。
- 損傷の原因、責任の所在、修理の要否は書かないでください。
- EIRでない書類(送り状、搬入票、伝票)と判断したときは、
document_type に種類を書き、項目を作らないでください。
【ゲートの名称と様式】{gate_profile}
【凡例】{damage_legend}
【配車の候補】{candidate_jobs}
【読み取り結果(Markdown)】{ocr_markdown}
「印刷された欄の名前は書き込みではない」を明記しないと、blank が拾えません。 読み取り結果には「損傷記録」という文字が確かにあるので、何も言わなければ欄が埋まっているものとして扱います。styles の手書きの判定と組み合わせ、書き込まれた文字があるかで見ます。
出力形式を固定する
次の形のJSONで受け取ります。 Azure OpenAI の構造化出力で、response_format に json_schema を strict: true で渡し、形を固定します。すべての項目を必須にし、additionalProperties を false にする必要があるので、値が無い項目も空文字で返させます。
{
"document_type": "eir",
"container_no": "ABCU1234560",
"size_type": "40HC",
"direction": "gate_out",
"load_status": "full",
"gate_name": "○○コンテナターミナル",
"datetime": "2026-10-08 09:42",
"seal_no": "SL0458812",
"chassis_no": "",
"damage_field_status": "recorded",
"damages": [
{ "face": "左側面", "position": "後ろ寄り下段", "code": "D",
"meaning": "凹み", "size": "20cm", "evidence": "左側 D 20cm" },
{ "face": "扉", "position": "右扉", "code": "SC",
"meaning": "", "size": "", "evidence": "R/DOOR SC" }
],
"remarks": ["既存"],
"has_diagram": true,
"job_id": "J-2610-0318",
"job_match_reason": "コンテナ番号と日付が配車の記録と一致"
}
検算と突き合わせの結果は、プログラムが次の形で足します。
| 項目 | 中身 |
|---|---|
container_check | valid / invalid(チェックデジットが合わない) |
low_conf_fields | 信頼度がしきい値を下回った項目(コンテナ番号・記号など) |
pair_status | paired(搬出時と返却時がそろった)/waiting(相手のEIRがまだ無い) |
diff[].result | same(同じ面・同じ記号が両方にある)/new_at_return(返却時にだけある)/gone_at_return(搬出時にだけある)/not_comparable |
review_needed | 人が見るべきか(true/false) |
not_comparable の決め方が、この構成でいちばん大事な規則です。
| 搬出時の欄 | 返却時の欄 | 判定 |
|---|---|---|
recorded または stated_none | recorded または stated_none | 記号ごとに same / new_at_return / gone_at_return |
blank または unreadable | どれでも | not_comparable(搬出時の状態が分からない) |
| どれでも | blank または unreadable | not_comparable(返却時の状態が分からない) |
blank の側を「損傷なし」として比べると、返却時に書かれた損傷が全部 new_at_return になります。 実際には搬出時に記入が省かれただけのことが多く、それを自社の責任として受け入れる材料を、自分で作ることになります。
コンテナ番号のチェックデジットは、プログラムで計算します。 コンテナ番号は、所有者を示す英字3文字、機器の区分を示す英字1文字、6桁の数字と、記録と伝送の正確さを確かめるための1桁の数字でできています。最後の1桁が計算と合わなければ、どこかの文字を読み違えています。 invalid のものは台帳に載せる前に人に回します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受信用の保管場所 | 保存のイベント | EIRの画像の到着を検知する |
| Azure AI Document Intelligence | REST API | レイアウトの読み取り(Markdown、表、信頼度、手書きの判定、図の切り出し) |
| Azure OpenAI | Chat Completions API(構造化出力) | 台帳の項目と損傷の記録への対応づけ |
| 配車システム | 読み取りのみ | 運転手と日付から案件の候補を取り出す |
| コンテナの台帳 | 行の追加 | 受け渡しごとに1行。損傷の記録と展開図の画像へのリンクを付ける |
| 業務課への通知 | メールまたはチャット | new_at_return、not_comparable、invalid の件数と一覧 |
台帳へは「行の追加」だけにします。 撮り直しのEIRが届いたら新しい行として足し、古い行に「撮り直しあり」の印を付けます。 配車システムには書き込みません。
台帳は、コンテナ番号で引けば搬出時と返却時の2行が並ぶ形にします。 請求が届いたら、番号で引くだけで2枚の記録と展開図が出てきます。
人が確認する
人が見るのは、印の付いたものだけです。 一覧には、搬出時と返却時の損傷の記録と、2枚の展開図の画像を並べて出します。
invalidを先に直す … コンテナ番号の読み違いです。画像と見比べて直すと、配車の記録との照合と突き合わせをやり直しますnew_at_returnを確かめる … 2枚の展開図を見比べ、本当に搬出時には無かった損傷かを目で確かめます- 運転手に聞く … 増えた損傷が確かなら、当日のうちに事情を聞き、台帳の備考に残します
not_comparableの扱いを決める … 搬出時がblankなら、そのゲートでの受け取り方を見直す材料にします- 直した記録を残す … どの項目を何から何に直したかが自動で記録されます
2番目を省かないでください。 new_at_return は、記号の書き方の違いでも出ます。搬出時に「D」、返却時に「DT」と書かれた同じ凹みは、プログラムには別の記号に見えます。展開図の印の位置を見れば、同じ損傷かどうかが分かります。
目標は、1,200枚をならして1枚1分です。 印の付くものが2割を超える月は、撮り方か、凡例の整備に理由があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| チェックデジットが合わない | invalid で人へ。似た文字を機械的に入れ替えて合わせない |
| 配車の記録に該当するコンテナが無い | 業務課に回す。選ぶまで台帳に載せない |
| 相手のEIRが届かない | 搬出から一定の日数が過ぎても返却時のEIRが無ければ、waiting のまま運転手に確認する |
| 凡例に無い記号がある | meaning を空にして載せ、そのゲートの凡例を業務課が足す |
| 1枚の写真に2枚のEIRが写っている | 撮り直しを頼む。分けられないものは処理しない |
| 文字が小さすぎて読めない | 1024×768の画像で12ピクセルが下限。下回る箇所は unreadable で人へ |
| EIRでない書類が届く | document_type を見て、台帳に載せずに業務課へ回す |
| OCRや生成AIが応答しない | 画像を受信用の場所に残し、次の回にやり直す |
記録を残す
- EIRの画像と、運転手のコード・撮影日時
- Document Intelligence が返したJSONの全文と、展開図の切り出し画像
- 生成AIに渡した指示と凡例、返ってきたJSON
- チェックデジットの結果と、突き合わせの結果(
diff) - 人が直した記録(直す前の値、直した後の値、その項目の信頼度、直した人)
- 運転手への聞き取りの内容と日時
- ゲートごとの
blankとunreadableの件数
3つ目で「そのときの凡例」を残すのは、凡例が後から変わるためです。 ゲートが様式を改めると記号の意味が変わり、当時の凡例が残っていないと、過去の記録の読み方が決まりません。
04実装レベルの3段階
最小構成では枚数がさばけません。 1枚ずつ貼り付けるので、1,200枚には使えません。確かめるための段階です。 半自動化で、1枚4分が2分程度になります。 転記は自動になりますが、配車の記録との紐づけと、2枚の見比べが残ります。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、同じコンテナの相手のEIRを探して並べる作業が、1枚ずつの手作業だからです。
05工数削減シミュレーション
導入後 1,200件 × 1分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海上コンテナのトレーラー輸送(ドレージ)を請け負い、ターミナルやバンプールのゲートで紙の機器受渡証(EIR)を受け取っている陸運会社・海貨業者。月に数百本のコンテナを運び、EIRを紙の綴りで保管しているため、船会社から修理費の請求が届いたときに搬出時のEIRを探すのに時間がかかっている場合。運転手がスマートフォンでEIRを撮影して送れる場合。
- 取り扱うコンテナが月に数十本で、EIRを目で見て台帳に写しても間に合う場合。すべてのターミナルからEIRの情報を電子データで受け取れており、紙を読む必要がない場合。なお、損傷が誰の責任で生じたかの判断と、船会社からの修理費の請求に応じるかどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去3か月のEIRの綴りから、同じコンテナの搬出時と返却時の2枚の組を20組選ぶ(うち数組は、修理費の請求が実際に来たものを入れる)
- 40枚をスキャンしてPDFにする
- 手元のAIサービスの画面に1枚ずつ貼り付け、「このEIRのコンテナ番号、日付、搬出か搬入か、損傷の欄の状態(記号あり/損傷なしと記載/空欄/読めない)、損傷の面と記号を書き出してください。空欄を損傷なしとしないでください」と指示する
- 同じコンテナの2枚の結果を並べ、損傷が増えているかを人が判断する
- 請求が来た組について、当時の判断と見比べる
20組は必ずやってください。 仕組みを組む前に、「EIRの手書きの記号が読めるのか」と「空欄がどれくらいあるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 記号とコンテナ番号がほぼ読めた | OCRと配車の記録の連携に進む |
| 空欄を「損傷なし」と書いた | 指示の書き方で直る。構成は有効 |
| 記号が読めない枚数が多い | 撮り方とスキャンの設定が先。 AIの問題ではない |
| 搬出時の欄が空欄の組が多い | ゲートでの受け取り方が先。 比べる材料が無い |
4行目が出ることは珍しくありません。 その場合は、運転手がゲートで損傷の記入を確かめてから受け取る運用を先に決めてください。比べる材料が無いまま仕組みを作っても、not_comparable が並ぶだけです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 空欄が「損傷なし」になる | blank と stated_none を分ける。 指示に明記し、手書きの判定と組み合わせる |
| 凡例の記号の並びが損傷として写される | 凡例を写さないよう指示し、手書きの行だけを損傷の候補にする |
| コンテナ番号の1文字違い | チェックデジットで検知する。似た文字を機械的に入れ替えない |
記号の書き方の違いで new_at_return が出る | 展開図の画像を人が見比べる。記号の言い換えの一覧をゲートごとに足す |
| 遠くから撮って記号が読めない | 1024×768の画像で12ピクセルが下限。撮り方の見本を運転席に貼る |
| 1枚の写真に2枚のEIR | 撮り直しを頼む。表とコンテナ番号が2つ読めたら止める |
| 同じコンテナが短期間に2回動く | 配車の記録の案件番号で紐づける。日付だけで紐づけない |
| 凡例に無い記号の意味を当てる | 意味を空にして人へ。凡例を足すのは業務課 |
| 突き合わせを生成AIにさせる | プログラムで行う。 似た記号を同じものとして扱われる |
| 運転手への聞き取りが後回しになる | 通知を当日中に出し、聞き取りの記入欄を台帳に設ける |
上の2行が、この構成の失敗のほとんどです。 どちらも「欄に何かある/無い」という見た目から出発しています。判定の根拠を、手書きかどうかと信頼度という返り値に置いてあるかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: コンテナ番号、シール番号、受け渡しの日時と場所、車両番号、運転手のコード、そして撮影した写真に写り込む運転手の手元や車内、他社のトレーラーのナンバーです。
- 写真に写り込むものを減らす … EIRだけを画面いっぱいに撮る手順にします。他社の車両や人が写った写真は、撮り直してもらいます
- 荷主の情報を外部へ出す範囲を絞る … EIRに荷主名や品名が書かれている様式もあります。台帳の項目に要らないものは、対応づけの結果に入れないようにします
- 修理費の請求に応じるかを自動で決めない … この構成が出すのは、搬出時と返却時の記録の違いだけです。誰の責任かは、業務課と荷主・船会社とのやり取りで決めることです
- 運転手を責める材料にしない …
new_at_returnは、記入の省略や記号の書き方の違いでも出ます。確かめる前に運転手の評価に結びつけないでください - 元の画像を原本として残す … 請求のやり取りで示すのは、読み取り結果ではなくEIRの画像と紙の控えです。台帳の記録は、それを探すための索引です
誤りが起きた場合のリスクは、増えていない損傷を増えたと扱うことと、増えた損傷を見落とすことの2つです。 前者は blank を「損傷なし」として比べると起き、後者は突き合わせで似た記号を同じものとして扱うと起きます。どちらも、空欄の扱いと比べ方を設計で守ります。
10まず何から始めるか
1週目:ゲートごとの凡例を一覧にする
よく通るターミナルとバンプールのEIRを1枚ずつ集め、損傷の記号と意味の凡例を写します。 すべてのゲートを一度に埋める必要はありません。本数の多い上位5か所から始めます。 この5か所で月のEIRの大半が埋まります。
2週目:20組で試す
過去の綴りから同じコンテナの2枚の組を20組選び、手元のAIサービスで読ませます。空欄を「損傷なし」としていないかと、記号が読めているかを最優先で見ます。
3週目:撮り方を決める
運転手数名に、ゲートを出たところでEIRを撮ってもらい、記号が読める写真の撮り方を決めます。 決まった撮り方を見本の1枚にして、運転席に貼ります。
4週目:撮影から台帳までをつなぐ
受信用の場所を見張り、OCRを呼び、項目を台帳に書き出すところまで作ります。この時点では突き合わせをせず、チェックデジットの結果と damage_field_status の内訳だけを見ます。
2か月目: 配車の記録との照合と、搬出時と返却時の突き合わせを足し、通知を出します。new_at_return と not_comparable の件数を毎週数えます。3か月目以降: 当日の聞き取りの記録を足し、1枚4分が何分になったかを実測します。ゲートごとの blank の割合を見て、受け取り方を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| ダメージチェックの現状として、現場の作業員が主に目視で確認した結果を紙媒体のEIR(Equipment Interchange Receipt:機器受渡証)に記録して管理しているターミナルがあること。ハンディ端末やカメラによるデジタル化の段階が整理されていること | 国土交通省: コンテナダメージチェックシステム導入参考資料(報道発表資料の別紙2) | 2026-10-09 |
レイアウトモデルがテキスト・テーブル・選択マーク・構造を抽出すること。入力がPDF・画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)など。画像が50×50〜10,000×10,000ピクセル、テキストの最小高さが1024×768で12ピクセル(150dpiで約8ポイント)。Free レベルではPDFの最初の2ページのみ。単語ごとの confidence、styles の isHandwritten、選択マークの selected/unselected、表のセルの rowIndex/columnIndex/kind、outputContentFormat=markdown と v4.0 で表が HTML のテーブルになること、output=figures で図のトリミング画像が作られること | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-09 |
v4.0 のレイアウトモデルで、手書きのテキストの対応言語に日本語(ja)が含まれること | Microsoft Learn: 読み取りとレイアウトの言語とロケールのサポート | 2026-10-09 |
| コンテナの識別が、所有者を示す英字3文字、機器の区分を示す英字1文字、6桁の数字、記録と伝送の正確さを確かめるための1桁のチェックデジットからなること | BIC: Check Digit Calculator | 2026-10-09 |
Chat Completions API で response_format に json_schema を strict: true で渡すこと。すべてのフィールドを必須にし、additionalProperties を false にする必要があること | Microsoft Learn: Azure OpenAI で構造化出力を使用する方法 | 2026-10-09 |
損傷が誰の責任で生じたか、修理費の請求に応じるかは、荷主・船会社との契約と自社の判断で決めてください。 本記事は公開資料と公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1197)についてのご相談はこちらから。
