外構工事の会社が営業の手書きの現地調査シート(寸法・既存の塀・高低差)を読み取り、区間ごとの拾い出しと見積の下書きの数量表を作る
営業が現地で手書きする外構の調査シートを読み取り、見取り図の区間ごとに寸法と既存の塀をそろえます。数量はプログラムが換算表から計算し、見積の下書きの数量表と、寸法の抜けた区間の一覧を営業に返します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 不動産/建設
- 対象部門
- 営業
- 対象業務
- データ入力・転記/書類作成
- 主な課題
- 属人化している/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 営業が現地で、敷地と既存の塀を測り、調査シートに見取り図と寸法を描く
- 事務所に戻り、調査シートを見ながら、区間ごとに長さと工事の内容を書き出す
- 自社の換算の決まりで、撤去の量・ブロックの個数・フェンスの枚数・土間の面積・残土の量を電卓で出す
- 数量を見積の作成のソフトに入れ、金額を出す
- 寸法の抜けや高低差の分からないところがあれば、もう一度現地に行くか、施主に聞く
- 見積を上司が確かめ、施主に出す
- 人営業が事務所に戻ったら、調査シートを複合機でスキャンする(現地からスマートフォンで撮った画像も受ける)
- 自動Azure Blob Storage への保存をきっかけに、Azure Functions が動く
- 自動Azure AI Document Intelligence のレイアウト モデルが、手書きの文字・チェック欄と、それぞれの位置と信頼度を返す
- 自動見取り図の範囲を画像として切り出し、その範囲にある寸法の文字の一覧と一緒に Azure OpenAI に渡す
- 自動Azure OpenAI が区間ごとの拾い出し(区間・長さの文字・既存の構造物・撤去と新設の内容)を返す
- 自動プログラムが、長さの文字が読み取りの結果にあるかを確かめ、自社の換算表で数量を計算する
- 自動数量表の下書きと、寸法の抜けた区間・高低差の向きが分からない箇所の一覧を作り、営業に知らせる
- 人営業が数量表と見取り図を見比べ、抜けと誤りを直す
- 人直した数量を見積の作成のソフトに入れ、上司が確かめて施主に出す
各工程の詳しい説明を読む
- 営業が現地で、敷地と既存の塀を測り、調査シートに見取り図と寸法を描く
- 事務所に戻り、調査シートを見ながら、区間ごとに長さと工事の内容を書き出す
- 自社の換算の決まりで、撤去の量・ブロックの個数・フェンスの枚数・土間の面積・残土の量を電卓で出す
- 数量を見積の作成のソフトに入れ、金額を出す
- 寸法の抜けや高低差の分からないところがあれば、もう一度現地に行くか、施主に聞く
- 見積を上司が確かめ、施主に出す
(a)拾い出しに時間がかかる。 見取り図の区間を1つずつ追い、どの区間に何をするかを書き出すだけで15分ほどかかります。見積の提出は調査の数日後になり、その間に施主が他社の見積を受け取ります。
(b)拾い出しのしかたが営業ごとに違う。 撤去する塀の高さを段数で数えるか、メートルで測るか。残土を見込むか見込まないか。同じ敷地でも、営業によって数量が違います。 上司が確かめるときに、どの数字が何を表すかを営業に聞き直すことになります。
(c)撤去と残土が漏れる。 新設の数量は施主の希望なので漏れにくい一方、既存の塀の撤去と、土間のための鋤取りの残土は、施主が言わない数量です。 拾い出しで漏れると、工事のときに追加の請求をお願いすることになります。
(d)寸法の抜けに気づくのが事務所に戻ってから。 現地で測り忘れた区間に気づくのは拾い出しのときで、もう一度現地に行く手間がかかります。
- 【人】 営業が事務所に戻ったら、調査シートを複合機でスキャンする(現地からスマートフォンで撮った画像も受ける)
- 【自動】 Azure Blob Storage への保存をきっかけに、Azure Functions が動く
- 【自動】 Azure AI Document Intelligence のレイアウト モデルが、手書きの文字・チェック欄と、それぞれの位置と信頼度を返す
- 【自動】 見取り図の範囲を画像として切り出し、その範囲にある寸法の文字の一覧と一緒に Azure OpenAI に渡す
- 【自動】 Azure OpenAI が区間ごとの拾い出し(区間・長さの文字・既存の構造物・撤去と新設の内容)を返す
- 【自動】 プログラムが、長さの文字が読み取りの結果にあるかを確かめ、自社の換算表で数量を計算する
- 【自動】 数量表の下書きと、寸法の抜けた区間・高低差の向きが分からない箇所の一覧を作り、営業に知らせる
- 【人】 営業が数量表と見取り図を見比べ、抜けと誤りを直す
- 【人】 直した数量を見積の作成のソフトに入れ、上司が確かめて施主に出す
8番目が、この設計の分かれ目です。 営業は数量を一から拾うのではなく、下書きの数量表を見取り図と見比べて直します。 下書きをそのまま見積に入れる運用にすると、見取り図の読み違いがそのまま施主に出ます。
6番目で、長さの文字を読み取りの結果と照らしているのは、意図してのことです。 生成AIは、見取り図から長さを「読み取ったように」見えて、書かれていない数字を作ることがあります。 長さは必ずOCRが読んだ文字のどれかであることを、プログラムで確かめます。
02今回想定するシステム構成
現地調査シート(手書き。A3の方眼。上段にチェック欄、下段に見取り図と寸法) │ 複合機でスキャン(またはスマートフォンで撮影) ▼【トリガー】Azure Blob Storage への保存 Azure Functions(Python) ├──▶ 形式・サイズ・画像の寸法の確認 ▼ Azure AI Document Intelligence(レイアウト モデル) │ 手書きの文字の行と位置、チェック欄の状態、それぞれの信頼度 ▼ Azure Functions(Python) │ 見取り図の範囲を切り出し、範囲の中の寸法の文字を一覧にする ├──▶ Azure OpenAI ── 区間ごとの拾い出し(構造化出力) ▼ Python ── 長さの文字の照合と、換算表による数量の計算 │ ① 撤去 ② ブロック ③ フェンス ④ 土間 ⑤ 残土 ▼ 数量表の下書き・確認の要るものの一覧 ▼ 【営業が見取り図と見比べて直す】 └──▶ 見積の作成のソフトへの入力(人が行う)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウト モデル) | Google Document AI(Form Parser)、AWS Textract(英文の書類に限る。日本語の調査シートには使えない) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(見取り図の画像と寸法の文字から区間ごとの拾い出しを返す) | Claude API、Gemini API |
| 集計 | Python(長さの文字の照合と、換算表による数量の計算) | 数量表の関数 |
| 連携 | Azure Functions(保存を起点に読み取りと拾い出しを呼び、数量表を書く) | Azure Logic Apps |
| 保管 | Azure Blob Storage(調査シートの画像、読み取りの結果、数量表) | 社内のファイルサーバー |
見積の作成のソフトは、新しく足すものではありません。 この構成からは書き込まず、営業が直した数量を入れます。新しく作るのは、自社の数量の換算表と、調査シートの書き方の決まり(区間の記号と高低差の向き)の2つです。
読み取りの土台は、Document Intelligence のレイアウト モデルです。 文字・表・選択マーク・文書の構造を取り出すモデルで、手書きの文字に対応する言語に日本語(ja)が含まれます。 文字の行ごとに手書きかどうかを信頼度とともに返し、選択マークは位置・信頼度・状態(selected/unselected)を返します。学習が要らないので、様式を決めればすぐに使えます。
区間の拾い出しには、画像を読める Azure OpenAI のモデルを使います。 公式の説明では、GPT-4.1 や GPT-5 のシリーズなどが画像の入力に対応し、メッセージの中身に文字と画像を並べて渡せます。見取り図の線と記号のつながりは、文字の位置だけからは分からないため、画像を見せて区間を組み立てさせます。
03どうやって実装するのか
処理の起点を決める
受付のコンテナー(Azure Blob Storage)に調査シートの画像が保存されたことを起点にします。 営業が事務所に戻ってスキャンした時点で動き、数量表の下書きが、営業が席に着く頃にはできているようにします。
Azure Functions の Blob トリガーは、遅延の短いイベント方式(Event Grid を使う方式)を使います。 公式の説明では、既定のポーリング方式は遅延が大きく、従量課金のプランで関数アプリが休止していると、新しいファイルの処理まで最大10分かかることがあるとされています。
現地からスマートフォンで撮った画像も、同じコンテナーで受けます。 寸法の抜けに現地にいるうちに気づけるからです。ただし撮影の画像は傾きと影が出やすいので、読み取りの信頼度が低い行が多ければ、事務所でのスキャンを促す知らせを返します。
同じファイルで二度動かないよう、Functions はファイルごとの受領の記録(blob receipt)を持ちます。処理に5回失敗したファイルは、webjobs-blobtrigger-poison のキューに送られます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 現地調査シート | スキャンまたは撮影の画像。工事の種類のチェック、既存の塀の種類と段数、高低差、見取り図と寸法、施主名と所在地 | 受付のコンテナー |
| 読み取り結果 | 文字の行と単語、それぞれの位置(polygon)と信頼度、手書きかどうか、選択マークの状態と信頼度 | Azure AI Document Intelligence |
| 見取り図の画像 | 調査シートの下段の方眼の範囲を切り出した画像 | Functions が切り出す |
| 数量の換算表 | 品目ごとの換算の決まり(ブロックの段数と延長から個数、フェンスの延長から枚数と柱の本数、鋤取りの深さと面積から残土の体積など) | 自社で整える表 |
| 書き方の決まり | 区間の記号の振り方、寸法の単位(メートル)、高低差の基準と向きの書き方 | 自社で整える決まり |
質を決めるのは、下の2つです。 換算表が無ければ、数量が営業ごとに違う状態は変わりません。換算表はベテランの営業の表計算から起こし、営業部で1つにそろえます。 書き方の決まりは、AIのためというより、誰が見ても同じ数量になるための決まりです。
データの取得方法を決める
読み取りは、Functions からレイアウト モデル(prebuilt-layout)の分析を呼ぶだけです。学習は要りません。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 文字の行・単語と位置 | pages の lines・words(polygon と confidence) | 寸法の文字と、その位置 |
| 手書きかどうか | styles の isHandwritten と信頼度 | 印刷された目盛りの数字と、手書きの寸法の区別 |
| チェック欄 | selectionMarks の状態と信頼度 | 工事の種類、既存の塀の種類 |
| 上段の欄の値 | 文字の行の位置(様式の欄の座標と照らす) | 段数、高低差、施主名と所在地 |
手書きかどうかの印を使うのは、方眼の目盛りの数字を除くためです。 方眼紙の端に印刷された目盛りの数字を寸法と取り違えると、存在しない区間が拾い出しに入ります。 手書きでない行は寸法の候補から外します。
見取り図の範囲は、様式の座標で切り出します。 調査シートは自社の様式なので、下段の方眼の位置は決まっています。ページの幅と高さに対する割合で範囲を持ち、スキャンの解像度が変わっても同じ範囲を切り出せるようにします。範囲の中にある手書きの文字の行を、位置とともに一覧にします。
AIへ渡す前に整形する
- 形式の確認 … PDF または画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)であることを確かめます
- 画像の寸法と文字の大きさ … 画像は50×50から10,000×10,000ピクセルの間で、取り出す文字の高さの下限は1024×768の画像で12ピクセル(150 DPIで約8ポイント)です。A3の方眼に小さく書かれた寸法が下限を下回らないよう、スキャンは300 DPIにそろえます
- 向きの確認 … 読み取りの結果のページの角度を見て、見取り図を切り出す前に向きをそろえます
- 見取り図の画像の形式 … Azure OpenAI に渡す画像は JPEG・PNG・GIF(最初のコマだけ)・WEBP に対応します。切り出した画像は PNG にします
- 画像の渡し方 … 画像のURLは公開されている必要があり、プライベート エンドポイントや仮想ネットワークで制限された保管場所のURLは使えないとされています。切り出した画像は base64 にして渡します
- 訂正の跡の確認 … 現地で測り直した寸法は、二重線で消して横に書き直されます。見取り図の範囲で、同じ区間の近くに寸法の文字が2つ以上あるものは、文字の一覧に「近くに別の寸法あり」の印を付けて渡します。 どちらが生きている数字かは、営業の確認に回します
5番目を軽く見ないでください。 施主の住所が書かれた見取り図を、公開のURLに置くことはできません。base64 で渡せば、保管場所を公開せずに済みます。
AIに処理させる
AIには2つの仕事を分けて渡します。 レイアウト モデルは文字とチェックを読み、Azure OpenAI は見取り図の画像と寸法の文字の一覧から区間を組み立てます。数量の計算は、どちらにもさせません。
| 拾い出す項目 | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 区間(A–B など) | 見取り図の記号と線のつながりから組み立てる | 記号が無ければ unlabeled として位置で示す |
| 区間の長さ | 寸法の文字の一覧から、その区間の横にあるものを選ぶ | 一覧に無ければ missing_length。数字を作らない |
| 既存の構造物 | 区間の上の書き込み(「既存ブロック5段」など)を写す | 書き込みが無ければ none_written |
| 撤去・新設の内容 | 区間の書き込み(「撤去」「新設フェンス」など)を写す | どちらとも読めなければ ambiguous |
| 高低差 | 上段の欄と見取り図の書き込みを写す | 向き(どちらが高いか)が書かれていなければ direction_unknown |
| させないこと | 理由 |
|---|---|
| 数量の計算 | 換算表で計算しないと、営業ごとの違いが残る |
| 長さの推定 | 方眼の目盛りや隣の区間から長さを割り出すと、測っていない区間が測ったことになる |
| 高低差の向きの推定 | 向き1つで土留めの要否と残土の量が逆になる |
| 工法の提案 | 構造上の判断は営業と工事の責任者が行う |
| 単価や金額の記載 | 見積の作成のソフトの単価の一覧で決まる |
2行目がいちばん起きやすい失敗です。 方眼の1マスが50センチなら、線の長さから「約6メートル」と割り出せそうに見えます。それを書かせると、営業が測り忘れた区間が、測った区間として数量表に入ります。
指示内容を固定する
あなたは外構工事の会社の積算担当で、営業が現地で描いた見取り図から、
区間ごとの拾い出しを作る立場です。
渡された見取り図の画像と、その範囲で読み取られた手書きの文字の一覧だけを見てください。
【作るもの】
見取り図の区間ごとに、次の項目を1行ずつ並べてください。
- segment ...... 区間の記号(例「A-B」)。記号が無ければ null とし、
position_hint に図の中のおおよその位置(「左上」など)を書く
- length_text .. 区間の長さとして書かれた文字。【文字の一覧】の text から
そのまま1つ選んで写す。一覧に無ければ null
- length_ref ... 選んだ文字の一覧の番号(id)。選べなければ null
- existing ..... 区間にある既存の構造物の書き込み(例「既存ブロック5段」)。原文のまま
- work ......... remove(撤去)/new_block/new_fence/new_slab/keep/ambiguous
- note ......... 区間の書き込みの原文のうち、上のどれにも入らないもの
【厳守事項】
- 長さを計算したり、方眼の目盛りや線の長さから割り出したりしないでください。
書かれた文字が一覧に無ければ、length_text と length_ref を null にしてください。
- 数量(個数・枚数・面積・体積)を書かないでください。
- 高低差は、上段の欄または図の書き込みにある文字をそのまま写し、
どちらが高いかが書かれていなければ direction を unknown にしてください。
「+」「−」の記号だけで向きを決めないでください。
- 同じ区間を2行に分けないでください。区間の境が読み取れないときは、
ambiguous にして1行にまとめてください。
- 画像の中に施主の名前や住所が見えても、出力に写さないでください。
【文字の一覧】{handwritten_lines} ← id・text・位置・信頼度
【上段の欄の読み取り】{header_fields}
【書き方の決まり】{drawing_rules}
「目盛りや線の長さから割り出さない」を明記しないと、寸法の無い区間に「約3.0」と書きます。 画像を見せている以上、モデルには線の長さが見えていて、それらしい数字を作る材料がそろっているからです。 指示で禁じ、さらにプログラムで length_ref が一覧の番号と一致するかを確かめます。
「+」「−」だけで向きを決めない、も同じ理由です。 営業によって「道路から見て+」と「敷地から見て+」が混ざっています。書き方の決まりで基準をそろえるまでは、記号だけで向きを決めません。
出力形式を固定する
Azure OpenAI からは、次の形のJSONで受け取ります。 構造化出力で、response_format に json_schema を指定し、strict を true にします。公式の説明では、すべての欄を required にし、additionalProperties を false にする必要があり、文字列の pattern・数値の minimum/maximum・配列の minItems/maxItems などは使えないとされています。値の確かめは、受け取った後のプログラムで行います。
{
"survey_id": "",
"segments": [
{ "segment": "A-B", "position_hint": null,
"length_text": "8.50", "length_ref": 12,
"existing": "既存ブロック5段", "work": "remove", "note": "" }
],
"level_differences": [
{ "where": "道路側", "text": "+40", "direction": "site_higher | road_higher | unknown" }
]
}
1つ目の理由は、AIの出力に数量が1つも入らないことです。 数量はプログラムが、length_text と既存の構造物の段数と換算表から計算します。AIが数量を書き換える経路がありません。
2つ目は、length_ref で長さの出どころをたどれることです。 プログラムは、番号の文字が一覧に実在し、length_text と一致し、手書きの印が付いているかを確かめます。1つでも合わなければ、その区間は missing_length に落とします。
数量表は、プログラムが次のように作ります。
| 品目 | 計算のもと | 確認の要るときの印 |
|---|---|---|
| 既存の塀の撤去 | work が remove の区間の長さ × 既存の段数(換算表で高さに直す) | 段数が書かれていなければ needs_survey |
| ブロックの新設 | new_block の区間の長さ × 書き込みの段数 → 換算表で個数 | 段数が無ければ needs_survey |
| フェンスの新設 | new_fence の区間の長さ → 換算表で枚数と柱の本数 | - |
| 土間 | new_slab の範囲の縦 × 横 | 縦か横の長さが無ければ needs_survey |
| 残土 | 土間の面積 × 鋤取りの深さ(上段の欄) | 深さが無いか、高低差の向きが unknown なら needs_survey |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Azure Blob Storage | Functions のトリガー(イベント方式) | 調査シートの保存を検知する |
| Azure AI Document Intelligence | API の呼び出し | 文字・位置・手書きの印・選択マークと信頼度を返す |
| Azure OpenAI | Chat Completions の API(画像と文字の入力、構造化出力) | 区間ごとの拾い出しを返す |
| 数量の換算表 | 表の読み取り | 品目ごとの換算の決まりを引く |
| 営業への知らせ | Teams またはメール | 数量表の下書きと、needs_survey の項目を知らせる |
| 見積の作成のソフト | 既存の入力の画面 | 営業が直した数量を入れる |
見積の作成のソフトへは、この構成から書き込みません。 数量表の下書きは表計算のファイルで出し、営業が見取り図と見比べて直したものだけを入れます。
人が確認する
営業は、数量表の下書きを見取り図の画像と並べて開きます。
needs_surveyを先に見る … 寸法の無い区間、段数の無い塀、向きの分からない高低差。記憶で埋められるものは埋め、分からないものは施主に聞くか、もう一度測ります- 区間の数を見取り図と数える … 区間が抜けていないか、同じ区間が二度入っていないかを見ます
- 撤去と残土の行を必ず見る … 施主が言わない数量なので、漏れると工事のときの追加の請求になります
- 直した箇所を記録する … どの区間の、どの項目を直したかを残します
3番目を省かないでください。 新設の行は施主の希望と照らせば誤りに気づけますが、撤去と残土の行は、照らす相手が見取り図しかありません。 現地の写真があれば、撤去する塀の段数を写真でも数えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 見取り図の範囲に手書きの文字がほとんど無い | 寸法を書き忘れた調査シート。拾い出しを呼ばず、営業に返す |
| 撮影の画像で信頼度の低い行が多い | 傾きや影。事務所でのスキャンを促す |
| 区間の記号が振られていない | unlabeled で位置を示す。書き方の決まりを守ってもらう材料として件数を数える |
length_ref が一覧に無い番号を指す | その区間を missing_length にする |
| 高低差の向きが分からない | direction_unknown。残土と土留めは数量に入れず営業に返す |
| 調査シートが2枚に分かれる | 2枚を1件として扱い、見取り図の範囲をそれぞれ切り出して同じ指示に渡す。1回の入力に渡せる画像は10枚まで |
| 換算表に無い品目の書き込み | 「目隠し」「門扉」など。数量を出さず note のまま営業に返す |
上から2行目までは、現場の書き方と撮り方の問題です。 精度を上げるより、営業が現地で寸法を書き切ることと、事務所でスキャンすることのほうが効きます。
記録を残す
- 調査シートの画像と、スキャンした日時・営業
- レイアウト モデルの結果の全文と、切り出した見取り図の画像
- Azure OpenAI に渡した文字の一覧と、返ってきた区間の拾い出し
- 数量の計算に使った換算表の版と、計算の途中の値
- 営業が直した箇所と、直す前の値、見積に入れた数量
最後の行は、換算表を育てる材料になります。 営業がいつも同じ品目の数量を直しているなら、換算表の決まりが現場と合っていないことが分かります。
04実装レベルの3段階
半自動化で、1件45分が18分になり、この段階が本記事の想定です。 拾い出しと計算は下書きになり、営業は見比べて直すだけになります。 本格構成は、見積の作成のソフトに取り込みの機能がある場合だけです。 取り込みを足しても、営業が見取り図と見比べてから取り込む順番は変えません。
05工数削減シミュレーション
導入後 80件 × 18分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 戸建て住宅の門まわり・塀・フェンス・カーポート・土間の工事を請け負い、営業が現地で方眼の調査シートに見取り図と寸法を手書きしている外構工事の会社。事務所に戻ってから営業が調査シートを見て数量を拾い出し、見積の作成に時間がかかっている場合。拾い出しのしかたが営業ごとに違い、撤去や残土の数量の漏れが見積の後で分かる場合。
- 現地調査をレーザー距離計やタブレットのアプリで記録していて、寸法がすでにデータになっている場合。月の調査が数件で、拾い出しが負担になっていない場合。造成や擁壁の工事など、構造の計算や設計が要る工事が中心の場合。なお、工法の選び方、構造上の安全の判断、見積の金額の決定は、この構成では行いません。
07最小構成で試す方法
- 先月の調査シートから10件を選ぶ(撤去や残土の漏れがあったもの、寸法の抜けで再訪したものを数件入れる)
- Document Intelligence Studio でレイアウト モデルを使い、10件を読み取って、寸法の文字がどれだけ読めるかを見る
- 見取り図の部分を画面で切り取り、読めた寸法の文字と一緒に手元の生成AIの画面に渡して、「区間ごとに、記号・長さの文字・既存の構造物・撤去か新設かを表にしてください。長さを計算や推定で埋めないでください。数量は書かないでください」と指示する
- 返ってきた区間の表を、当時の営業の拾い出しと比べる
数量の計算はさせないでください。 確かめたいのは、見取り図から区間を組み立てる部分が使えるかです。
| 出てきた内容 | 判断 |
|---|---|
| 区間と長さが営業の拾い出しと一致した | 換算表を作り、Functions とつなぐ段階に進む |
| 寸法の無い区間に長さを入れてきた | 指示を強め、実装では文字の番号で照らす。構成は有効 |
| 寸法の文字がそもそも読めない | 字が小さいか、方眼の線と重なっている。書き方とスキャンの設定が先 |
3行目が出たら、調査シートの様式を見直します。 寸法を書く欄を方眼の外に設けるだけで、読み取りは大きく変わります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 寸法の無い区間に長さが入る | 指示で禁じ、length_ref が文字の一覧と一致するかをプログラムで確かめる |
| 方眼の目盛りの数字を寸法と取り違える | 手書きでない行を寸法の候補から外す |
| 高低差の向きが逆になる | 記号だけで向きを決めない。書き方の決まりで基準をそろえる |
| 数量が営業ごとに違うまま | 換算表を1つにし、AIにもプログラムにも同じ表を使う |
| 撤去と残土の行が漏れる | 数量表に必ず行を出し、空なら needs_survey にする |
| 区間の記号が振られていない | 位置で示し、件数を数えて書き方の決まりを守ってもらう |
| 見取り図の画像を公開のURLで渡そうとする | プライベートの保管場所のURLは使えない。 base64 で渡す |
| 撮影の画像の信頼度が低い | 事務所でのスキャンを促す |
| 下書きをそのまま見積に入れる | 営業が見取り図と見比べてから入れる順番を守る |
上の2行が、この構成を使えるかどうかを決めます。 どちらも「書かれていない寸法が、書かれたように見える」失敗で、見積の数量としては自然な値なので、誰も気づきません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 施主の氏名と住所、敷地の見取り図と寸法、隣地との境の状況、見積の数量です。
- 施主の名前と住所を生成AIに渡さない … 上段の欄のうち、Azure OpenAI に渡すのは段数・高低差・鋤取りの深さだけにします。見取り図の範囲を切り出すのは、施主名と所在地の欄を渡さないためでもあります
- 見取り図の画像を公開しない … 画像は base64 で渡し、保管場所を公開のURLにしません
- 隣地の情報の扱いに注意する … 見取り図には隣地の塀や境の状況が描かれます。隣地との境の扱いは、施主と隣地の所有者の話し合いで決まることで、数量表の注記に推測を書きません
- 構造上の判断は人が行う … 塀の高さや土留めの高さによっては、構造の確かめが要ります。この構成が出すのは数量だけで、工法と安全の判断は工事の責任者が行います
- 数量表を見られる人を限る … 営業部と工事部だけが見られるようにします
誤りが起きた場合のリスクは、測っていない寸法が数量に入って見積が実際と合わなくなることと、撤去や残土が漏れて追加の請求になることの2つです。 前者は length_ref の照合で、後者は撤去と残土の行を必ず出すことで防ぎます。
10まず何から始めるか
1週目:換算表を1つにする
ベテランの営業の表計算から、ブロック・フェンス・土間・撤去・残土の換算の決まりを起こし、営業部で1つの表にそろえます。 違いがあれば、工事部と決めます。
2週目:書き方の決まりを決める
区間の記号の振り方、寸法の単位、高低差の基準と向きの書き方を決め、調査シートの余白に印刷します。寸法を書く欄を方眼の外に設けるかも、ここで決めます。
3週目:10件で試す
先月の調査シートから10件を選び、Studio で読み取って、手元の生成AIの画面で区間の表を作らせます。寸法の無い区間に長さが入っていないかを最優先で見ます。
4週目:スキャンから数量表の下書きまでをつなぐ
Functions で、スキャンから読み取り、拾い出し、換算表での計算、数量表の下書きまでを作り、営業1名で2週間使います。 直した箇所を数え、指示と換算表を見直します。
2か月目: 営業4名に広げ、needs_survey の件数と、再訪の件数を毎週数えます。3か月目以降: 直した箇所の傾向から換算表を直します。撤去と残土の漏れによる追加の請求がほとんど無くなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レイアウト モデルが文字・表・選択マーク・文書の構造を取り出すこと。文字を行と単語で返し、styles に手書きかどうかを信頼度とともに返すこと。選択マークを位置・信頼度・状態(selected/unselected)で返すこと。ページの角度・幅・高さを返すこと。入力が PDF と画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)などで、画像が50×50〜10,000×10,000ピクセル、文字の高さの下限が1024×768の画像で12ピクセル(150 DPIで約8ポイント)であること | Microsoft Learn: Document layout analysis | 2026-10-28 |
レイアウト モデルの手書きの文字に対応する言語に日本語(ja)が含まれること | Microsoft Learn: Language support for document analysis models | 2026-10-28 |
画像の入力に対応するモデルに GPT-5 シリーズ・GPT-4.1 シリーズなどが含まれること。メッセージの中身に文字と画像(URL または base64)を並べて渡せること。1回の入力の画像が10枚までなこと。画像の形式が JPEG・PNG・GIF(最初のコマ)・WEBP なこと。画像のURLは公開されている必要があり、プライベート エンドポイントなどで制限されたURLは使えないこと。detail に low・high・auto を指定でき、high は画像を細かく分けて読み、使う量が増えること | Microsoft Learn: How to use vision-enabled chat models | 2026-10-28 |
構造化出力で response_format に json_schema と strict を指定すること。すべての欄を required にし、additionalProperties を false にすること。文字列の pattern、数値の minimum/maximum、配列の minItems/maxItems などが使えないこと | Microsoft Learn: How to use structured outputs with Azure OpenAI in Microsoft Foundry Models | 2026-10-28 |
Blob トリガーはイベント方式が遅延が短く推奨されること。ポーリング方式では従量課金のプランで休止していると最大10分の遅延がありうること。blob receipt で同じファイルを二度処理しないこと。既定で5回失敗すると webjobs-blobtrigger-poison のキューに送られること | Microsoft Learn: Azure Blob storage trigger for Azure Functions | 2026-10-28 |
工法の選び方、構造上の安全、見積の金額は、工事の責任者と営業の上司が決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2157)についてのご相談はこちらから。
