漬物の工場が手書きの漬け込みの記録表から樽・塩分・重量・漬け替えを読み取り、樽ごとの製造の台帳と基準から外れた値の一覧を作る
漬け込みの現場で手書きした記録表を読み取り、樽ごとの製造の台帳に積み上げます。自社の製品ごとの基準と照らし、塩分の外れ、漬け替えの遅れ、記録の抜けを品質管理の担当に回します。
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- その他/小売/製造
- 対象部門
- 品質管理/生産
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 現場の作業者が、作業の合間に記録表の行を書く
- 終業時に班長が記録表を集め、品質管理の担当に渡す
- 翌日、品質管理の担当が記録表を表計算の製造の記録に打ち直す
- 週に一度、樽ごとに並べ替えて、塩分の推移と漬け替えの日を見る
- 基準の一覧と見比べて、外れた樽を班長に伝える
- 記録の抜けている樽を、班長に確かめる
- 人現場の作業者が、作業の合間に記録表の行を書く(これまでどおり)
- 人終業時に班長が記録表を集め、複合機でスキャンして所定の保存先に送る
- 自動保存をきっかけに Azure Functions が動き、Azure AI Document Intelligence のカスタム テンプレート モデルで記録表の表を読み取る
- 自動行ごとに、樽番号・品目・数字・チェック欄を取り出し、セルの信頼度で「書かれていない」「読めなかった」を分ける
- 自動樽ごとの製造の台帳に、行を積み上げる
- 自動製品ごとの基準の表と照らし、外れた値・漬け替えの予定を過ぎた樽・記録の抜けている樽を拾う
- 自動翌朝、品質管理の担当と班長に、基準から外れた値の一覧を届ける
- 人品質管理の担当が、一覧の行を記録表の画像で確かめる。読めなかった欄は値を入れる
- 人外れた樽について、班長と現場で樽を確かめ、品質管理の責任者が扱いを決める
各工程の詳しい説明を読む
- 現場の作業者が、作業の合間に記録表の行を書く
- 終業時に班長が記録表を集め、品質管理の担当に渡す
- 翌日、品質管理の担当が記録表を表計算の製造の記録に打ち直す
- 週に一度、樽ごとに並べ替えて、塩分の推移と漬け替えの日を見る
- 基準の一覧と見比べて、外れた樽を班長に伝える
- 記録の抜けている樽を、班長に確かめる
(a)打ち直しで毎日1時間以上かかる。 15枚 × 10行で150行。数字の多い表なので、打ち間違いも出ます。 打ち間違いは、週に一度の集計で「急に塩分が下がった樽」として見つかり、記録表まで戻って確かめることになります。
(b)外れに気づくのが週末。 塩分の推移を樽ごとに並べるのは週に一度です。月曜に外れた樽に、金曜まで誰も気づきません。 漬け替えの遅れも同じです。
(c)記録の抜けは、見つけにくい。 書かれていない行は、表計算のどこにも現れません。「この樽は3日前から記録が無い」ことは、樽の側から数えないと分かりません。
(d)基準の一覧が紙にある。 どの品目のどの段階で、塩分がいくつからいくつまでか。ベテランの担当は覚えていますが、新しい担当は毎回紙を見ます。
- 【人】 現場の作業者が、作業の合間に記録表の行を書く(これまでどおり)
- 【人】 終業時に班長が記録表を集め、複合機でスキャンして所定の保存先に送る
- 【自動】 保存をきっかけに Azure Functions が動き、Azure AI Document Intelligence のカスタム テンプレート モデルで記録表の表を読み取る
- 【自動】 行ごとに、樽番号・品目・数字・チェック欄を取り出し、セルの信頼度で「書かれていない」「読めなかった」を分ける
- 【自動】 樽ごとの製造の台帳に、行を積み上げる
- 【自動】 製品ごとの基準の表と照らし、外れた値・漬け替えの予定を過ぎた樽・記録の抜けている樽を拾う
- 【自動】 翌朝、品質管理の担当と班長に、基準から外れた値の一覧を届ける
- 【人】 品質管理の担当が、一覧の行を記録表の画像で確かめる。読めなかった欄は値を入れる
- 【人】 外れた樽について、班長と現場で樽を確かめ、品質管理の責任者が扱いを決める
7番目で、一覧が「週に一度」から「翌朝」になるのが、この設計の要点です。 外れた樽に、4日早く気づけます。
9番目の「扱いを決める」は、人のままにしておきます。 塩分が基準を外れた樽をどうするかは、測り直し、差し塩、作り直し、出荷の止めのどれにするかを、樽の状態を見たうえで品質管理の責任者が決めることです。 この構成が出すのは、外れたという事実までです。
02今回想定するシステム構成
漬け込みの記録表(1枚に10行。樽番号・品目・数字・チェック欄) │ 終業時に班長がスキャン(1枚1ファイル) ▼【トリガー】Azure Blob Storage のコンテナへの保存 Azure Functions(Python。イベントで動く Blob のトリガー) ├─ 形式・ページ数の確認 ▼ Azure AI Document Intelligence(カスタム テンプレート モデル。固定の10行の表) │ セルごとの値と信頼度、行・表の信頼度 │ 作業の種類と液の上がりのチェック欄 ▼ Azure Functions(Python) │ ① セルの信頼度で「書かれていない」と「読めなかった」を分ける │ ② 樽番号で樽ごとの製造の台帳に行を積み上げる │ ③ 製品ごとの基準の表と照らす │ ④ 樽の側から、記録の抜けと漬け替えの遅れを数える ▼ 製造の台帳(Azure SQL Database) ▼【翌朝】 基準から外れた値の一覧(品質管理の担当と班長へ)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(カスタム テンプレート モデル。固定の表) | Google Document AI(Form Parser) |
| 集計 | Python(基準の表との照合、記録の抜けと漬け替えの遅れの洗い出し) | ― |
| 連携 | Azure Functions(Blob の保存を起点に読み取りと照合を動かす) | Azure Logic Apps |
| 台帳 | Azure SQL Database(樽ごとの製造の台帳と、製品ごとの基準の表) | ― |
| 保管 | Azure Blob Storage(記録表のスキャン) | ― |
カスタム テンプレート モデルは、決まった見た目の様式から、ラベルを付けた値・選択マーク・表・署名・選んだ領域を取り出します。 記録表は工場で1種類なので、この型が合います。手書きの文字の対応言語には日本語(ja)が含まれます。 樽番号や品目の略号の手書きも読めます。
記録表の表は、行の数が決まった「固定の表」として扱います。 2024-11-30 の版から、カスタムモデルで表・行・セルの信頼度が返ります。固定の表では、セルの信頼度を1つずつ見るだけで予測の良し悪しの多くが分かると案内されています。
トリガーは、イベントで動く Blob のトリガーにします。 Azure Functions の Blob のトリガーには、イベントで動くものとポーリングで動くものがあり、イベントで動くほうが遅れが少ないとして推奨されています。 ポーリングのほうは、Consumption のプランでアプリが止まっていると新しい Blob の処理に最大10分の遅れが出ることがあり、使うログも「ベストエフォート」で拾い漏れがありうるとされています。
新しく足すのは、製品ごとの基準の表です。 紙の一覧を、品目・段階(下漬け・本漬け・漬け替え)ごとに、塩の割合の範囲、塩分の範囲、次の作業までの日数の目安を1行ずつにします。基準を変えるときは、この表だけを直します。
03どうやって実装するのか
処理の起点を決める
班長がスキャンした記録表が、Blob Storage のコンテナに保存されたことを起点にします。 スキャンは1枚1ファイルにします。1枚に10行しかない表を、何十枚もまとめた1つの PDF にすると、どの行がどの日のどの紙かを、後で記録表に戻って確かめにくくなります。
同じファイルを二度処理しない仕組みは、ランタイムの側にあります。 Azure Functions は、同じ新しい(または更新された)Blob に対して Blob のトリガーの関数を二度呼ばないよう、Blob の受領の記録(blob receipts)を持ちます。ただし、班長が同じ記録表を別の名前で二度スキャンしたものは、別の Blob として処理されます。 これは票の日付と行の中身で見分けます。
処理に失敗したファイルは、既定で合わせて5回まで試し直され、それでも失敗すると webjobs-blobtrigger-poison という名前のキューにメッセージが入ります。 このキューを毎朝見て、読み取れなかった記録表があれば、品質管理の担当がスキャンし直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録表のスキャン | 1枚1ファイルの PDF か画像 | Blob Storage のコンテナ |
| 読み取り結果 | セルごとの値と信頼度、行と表の信頼度、チェック欄の状態 | Document Intelligence |
| 樽の一覧 | 樽番号・大きさ・置き場 | 製造の台帳 |
| 製品ごとの基準の表 | 品目・段階ごとの塩の割合・塩分・日数の目安 | 製造の台帳 |
| 樽ごとの製造の台帳 | 樽ごとの、これまでの行 | 製造の台帳 |
質を決めるのは、樽の一覧と基準の表です。 読み取った樽番号が樽の一覧に無ければ、その行はどの樽にも積めません。基準の表が古いと、正しい値を「外れ」として回し続け、一覧が読まれなくなります。
学習に使う見本は、少なくとも5枚です。 カスタム テンプレート モデルは様式ごとに少なくとも5枚の見本を用意するよう案内されています。10行が全部埋まった表だけでなく、途中までしか書かれていない表、書き直しのある表、水や塩で汚れた表を混ぜます。
データの取得方法を決める
読み取りは、Azure Functions から Document Intelligence の 2024-11-30 の版の API を呼びます。表は10行×12列ほどの固定の表としてラベルを付けたので、行と列の番号がそのまま返ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 記録表の日付と記入者 | ラベルを付けた欄の値 | 行の日付 |
| 樽番号・品目・ロット | 表のセル | 台帳への積み上げ |
| 原料の重量・塩の量・塩分・重石 | 表のセル | 基準との照合 |
| 作業の種類・液の上がり | 表の中の選択マーク | 段階の決定 |
| セル・行・表の信頼度 | 各レベルの confidence | 「書かれていない」と「読めなかった」の区別 |
「書かれていない」と「読めなかった」は、空のセルの信頼度で分けます。 案内では、値の無いセルは NULL とその信頼度を持ち、信頼度が高ければ「値が無い」という予測が正しい可能性が高く、低ければ値を見落とした可能性があるとされています。
| 空のセルの状態 | 扱い |
|---|---|
NULL で信頼度が高い | 書かれていない(記録の抜けの候補) |
NULL で信頼度が低い | 読めなかった(記録表の画像で確かめる) |
| 値があり信頼度が低い | 読めなかった(同上) |
信頼度は、表全体 → 行 → セルの順に見ます。 案内でも、表の信頼度から見始め、行、セルと下りていくのがよいとされています。表全体の信頼度が低い記録表は、汚れや折れで表の形が崩れている恐れがあり、行ごとに見る前に記録表ごと人に回します。
AIへ渡す前に整形する
- 形式とページ数の確認 … PDF か画像で、1ページであることを確かめます。2ページ以上は分けます
- 解像度の確認 … 文字の高さの下限は、1024×768の画像で12ピクセル(150 DPI で約8ポイント)です。小数点が残る解像度でスキャンします
- 記録表の日付 … 表の上の日付の欄から取ります。行ごとに日付を書かない様式なので、この日付が読めないと全行が宙に浮きます
- 樽番号の正規化 … 全角と半角、前後の空白をそろえます。それ以上は直しません
- 数字の正規化 … 「kg」「%」などの単位の文字を外します。小数点の補いはしません
2番目の「小数点が残る解像度」は、この構成でいちばん効く設定です。 塩分の「3.5」と「35」は、小数点1つの違いです。複合機の既定の解像度で小数点が消えるなら、解像度を上げるか、現場で小数点を大きく書く決まりにします。
AIに処理させる
AIにさせるのは、表のセルの文字とチェックの状態を、信頼度とともに返すことだけです。 基準との照合、記録の抜けの洗い出し、一覧づくりは Python の決まった処理で行います。
| 読み取るもの | 決め方 | 決められないときの扱い |
|---|---|---|
| 樽番号 | 樽の一覧に当たる | 当たらなければ「要確認」。近い番号に寄せない |
| 品目 | 品目の略号の一覧に当たる | 当たらなければ「要確認」 |
| 原料の重量・塩の量・塩分・重石 | 数値として解釈できる | 解釈できない、または信頼度が低ければ「読めなかった」 |
| 作業の種類 | selected がちょうど1つ | 0個・2個以上なら「要確認」 |
| 液の上がり | 選択マークの状態 | 信頼度が低ければ「要確認」 |
照合の処理で拾うものは次のとおりです。
| 拾うもの | 決め方 |
|---|---|
| 塩分の外れ | 品目と段階の、基準の表の塩分の範囲の外 |
| 塩の割合の外れ | 塩の量 ÷ 原料の重量が、基準の表の範囲の外 |
| 急な変化 | 同じ樽の前回の塩分との差が、基準の表の幅を超える |
| 漬け替えの遅れ | 前回の作業の日から、次の作業までの日数の目安を過ぎて、次の作業の行が無い |
| 記録の抜け | 漬け込み中の樽で、決めた日数のあいだ1行も無い |
| 液の上がりの不足 | 本漬けの後の点検で、液が上がっていないにチェック |
「急な変化」を入れているのは、読み違いを拾うためでもあります。 前回 3.5 だった樽が今回 35 なら、塩分の範囲の外として拾えますが、前回 3.5 の樽が今回 2.5 と読まれたら、範囲の中に収まって見逃します。 前回との差を見れば、こちらも拾えます。
| させないこと | 理由 |
|---|---|
| 小数点の補い | 「35」を「3.5」に直すと、何が書かれていたかを誰も見なくなる |
| 空のセルを前回の値で埋めること | 測り忘れが記録の上から消える |
| 樽番号の補正 | 1字違いの番号に寄せると、別の樽の記録になる |
| 樽の扱いの判断 | 出荷・作り直し・廃棄は品質管理の責任者が決める |
2行目がいちばん起きやすい失敗です。 重石の重さは前回と同じことが多く、空なら前回の値を入れたくなります。しかし、記録の抜けを拾うのがこの構成の目的の1つで、埋めた瞬間にそれが消えます。
指示内容を固定する
この構成の読み取りはカスタム テンプレート モデルで、生成AIへの文章の指示はありません。指示にあたるのは、ラベルの付け方と、Python の照合の設定です。
【ラベルの付け方(Document Intelligence Studio でモデルを作るとき)】
- record_date, recorder … 表の上の欄の値
- work_table … 固定の表(10行)。列は次のとおり
tank_no, item_code, lot_no, raw_kg, salt_kg, salinity_pct, weight_kg,
op_shitazuke, op_honzuke, op_tsukekae, op_sashijio, op_toridashi(選択マーク),
liquid_ok(選択マーク), note
- 見本は少なくとも5枚。途中までしか書かれていない表、書き直しのある表、
汚れのある表を混ぜる。空の行も「空」としてラベルを付ける。
【照合の設定(Python)】
thresholds:
table_confidence_min: 0.70 # 表全体がこれ未満 → 記録表ごと人へ
cell_confidence_min: 0.80 # 値のあるセルがこれ未満 → 読めなかった
null_confidence_min: 0.80 # NULL のセルがこれ以上 → 書かれていない
rules:
- 値を直さない。小数点を補わない。空を前回の値で埋めない。
- tank_no と item_code は一覧に当たらなければ要確認。近いものに寄せない。
- 作業の種類の選択マークがちょうど1つでなければ要確認。
- 塩分・塩の割合は、item_code と作業の種類から基準の表の行を引いて照らす。
- 同じ tank_no の前回の salinity_pct との差が、基準の表の幅を超えたら「急な変化」。
- 毎朝、漬け込み中の樽を樽の一覧から数え、
次の作業の目安の日を過ぎた樽、決めた日数のあいだ行の無い樽を拾う。
- 読めなかったセルを含む行は、台帳に積むが、照合の結果を「保留」にする。
「読めなかったセルを含む行も台帳に積む」のは、記録の抜けと取り違えないためです。 積まずに捨てると、その樽はその日に記録が無いことになり、翌朝の「記録の抜け」に誤って出ます。 積んだうえで照合を保留にすれば、樽の側から見て「記録はあるが読めていない」と分かります。
しきい値の「0.70」「0.80」は例です。 最初の1か月は、保留に回る行が多くても全部確かめ、どのセルでどの程度の信頼度のときに誤りが出たかを数えてから決めます。
出力形式を固定する
次の形で、行ごとに台帳に積みます。
{
"record_date": "2026-10-28",
"sheet_id": "",
"row": 3,
"tank_no": "T-118",
"item_code": "TK",
"operation": "tsukekae",
"lot_no": "",
"raw_kg": { "value": 420.0, "state": "ok", "confidence": 0.94 },
"salt_kg": { "value": null, "state": "not_written", "confidence": 0.91 },
"salinity_pct": { "value": 35, "state": "ok", "confidence": 0.62 },
"weight_kg": { "value": 300, "state": "ok", "confidence": 0.90 },
"liquid_ok": true,
"checks": ["salinity_out_of_range", "salt_not_written"],
"result": "ok | out_of_range | hold | needs_check",
"image_link": ""
}
1つ目の理由は、数字ごとに state を持てることです。 ok・not_written(書かれていない)・unreadable(読めなかった)の3つです。一覧で「塩の量が書かれていない」と「塩の量が読めなかった」を並べて見られます。 前者は現場に、後者は品質管理の担当が記録表の画像で確かめます。
2つ目は、confidence を値の隣に置くことです。 上の例の塩分 35 は信頼度が 0.62 で、基準の外であると同時に、読み違いを疑う値でもあります。 一覧ではこの両方を並べて出し、担当者が記録表を見る前に察しをつけられるようにします。
3つ目は、sheet_id と row で記録表に戻れることです。 一覧の行から、記録表の画像の何行目かがすぐに開けます。数字の確かめは、画像を見るのがいちばん早いからです。
樽ごとの製造の台帳は、この行を樽番号で並べたものです。 樽ごとに、漬け込みの日、品目、ロット、塩分の推移、漬け替えの日、経過の日数が1画面で見えます。原料のロットも行に持たせているので、ある産地の原料で塩分の外れが続いたときに、そのロットを使った樽を台帳から引けます。 原料の受け入れの記録と台帳をつなぐのは、この lot_no です。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Blob Storage | イベントで動く Blob のトリガー | 記録表の保存を検知する |
| Document Intelligence | 2024-11-30 の版の API | モデルで表を読み取る |
| 製造の台帳 | Python からの書き込み | 行を積み、樽の一覧と基準の表を読む |
| 一覧の配信 | 毎朝の定時の関数からメールか Teams | 品質管理の担当と班長へ |
| 試し直しに失敗したファイル | webjobs-blobtrigger-poison のキュー | 毎朝確かめ、スキャンし直す |
出荷の仕組みとは、つなぎません。 基準から外れた樽の出荷を止めるかどうかは、品質管理の責任者が決めます。この構成が自動で出荷を止めると、読み違いで正常な樽が止まり、現場が一覧を信じなくなります。
人が確認する
- 品質管理の担当が、毎朝の一覧を記録表の画像で確かめる … 読めなかったセルに値を入れ、保留を解きます
- 書かれていない値は、班長に確かめる … 測り忘れなら、その日のうちに測り直せるかを決めます
- 基準から外れた樽は、班長と現場で樽を見る … 測り直しの値を記録に足します
- 扱いを品質管理の責任者が決める … 差し塩、漬け替えの前倒し、出荷の保留など
- 人が値を入れ直したら、入れ直した記録を残す … 何を何に直したか
1番目で、一覧の行を必ず画像で見ます。 読み取りの値と信頼度だけで判断せず、記録表の数字を自分の目で読みます。 信頼度が高くても、汚れで別の数字に見える字はあります。
目標は、300枚をならして1枚2分です。 保留や外れが出るのは1枚に1行前後という想定で、それより多い日は、スキャンの解像度か、ある作業者の書き方に理由があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 表全体の信頼度が低い | 汚れや折れで表が崩れている恐れ。記録表ごと人に回す |
| 記録表の日付が読めない | 全行を保留にし、班長に日付を確かめる |
| 樽番号が一覧に無い | 要確認。新しい樽の登録漏れか読み違い |
| 品目の略号が一覧に無い | 要確認。新しい品目なら基準の表に行を足す |
| 作業の種類のチェックが0個・2個以上 | 要確認。基準の表の行が引けないので照合しない |
| 塩分が基準の外で、信頼度が低い | 外れと読み違いの両方を疑う。画像で確かめるまで外れと決めない |
| 同じ記録表が別の名前で二度届く | 日付と行の中身で見分け、2枚目を積まない |
| 取り出しの済んだ樽に、新しい行が書かれる | 次の漬け込みの始まりか、樽番号の書き違い。品目とロットで見分け、迷えば要確認 |
| 書き直しで同じセルに数字が二つある | 読み取りの値を使わず要確認。どちらが正かは書いた本人に確かめる |
| 5回試し直しても失敗する | webjobs-blobtrigger-poison のキューに入る。スキャンし直す |
上の2行は、行ごとに見る前に記録表ごと止める規則です。 日付や表の形が崩れたまま行を積むと、別の日の記録として台帳に残り、後から直すのに手間がかかります。
記録を残す
- 記録表のスキャンと、保存した日時・スキャンした人
- 読み取りの結果の全文(セル・行・表の値と信頼度、チェック欄の状態)
- 行ごとの
state・checks・resultと、そのときの基準の表の内容 - 人が値を入れ直した記録 … どのセルを、何から何に直したか、だれが
- 基準から外れた樽について、品質管理の責任者が決めた扱い
3つ目で基準の表の内容を残すのは、基準が後から変わるためです。 塩分の範囲を直すと、過去の外れの意味が変わります。当時の基準が残っていないと、過去の記録を見直すときに判断がつきません。
4つ目と5つ目は、衛生管理の記録として後から確かめられる形で残します。 記録の様式と保存の期間は、自社の衛生管理の計画に合わせて決めます。
04実装レベルの3段階
半自動化で、1枚6分が2分程度になります。 これが本記事の想定です。打ち直しと週に一度の集計がなくなり、人の時間は一覧の行を画像で確かめる時間に絞られます。 本格構成は、手書きそのものを減らす形です。 塩分計や秤から値を直接取り込めれば、読み違いの心配がなくなり、樽番号と作業の種類だけを手で書けば済むようになります。ただし、機器の入れ替えと現場の手順の見直しが要るので、半自動化の一覧で読み違いの多い列が分かってから、その列の機器から始めます。
05工数削減シミュレーション
導入後 300件 × 2分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- たくあん・白菜漬け・古漬けなど、樽やタンクで日数をかけて漬ける漬物を作っていて、漬け込み・漬け替え・差し塩の作業を現場で手書きの記録表に書いている工場。記録表を品質管理の担当が表計算に打ち直していて、塩分の推移や漬け替えの遅れに気づくのが週に一度の集計のときになっている場合。製品ごとに塩分や塩の割合の自社の基準を決めている場合。
- 樽の数が数十本で、記録表を目で追えば足りる場合。塩分計や秤の値がすでに機器から記録の仕組みに取り込まれていて、手書きの表が無い場合(読み取りが要りません)。浅漬けだけを作っていて、樽ごとに日数を追う必要が無い場合。なお、基準から外れた樽を出荷してよいか、作り直すか、捨てるかの判断は品質管理の責任者が行うもので、この構成は関わりません。
07最小構成で試す方法
- 先月の記録表から20枚を選ぶ(汚れた表、書き直しのある表、塩分が基準を外れた日の表を混ぜる)
- その20枚について、当時の打ち直しの結果を表計算から取り出す
- Document Intelligence Studio で、見本を5枚以上使ってカスタム テンプレート モデルを作る
- 残りの表を読み取り、セルの値と信頼度を、打ち直しの結果と見比べる
- 空のセルについて、信頼度の高い
NULLと低いNULLが、実際に書かれていなかったか読めなかったかと合っているかを見る
20枚は必ずやってください。 Functions を組む前に、「小数点が読めるか」と「空のセルの信頼度で区別がつくか」を確かめます。 この2つが成り立たなければ、照合を組んでも一覧が信用されません。
| 出てきた内容 | 判断 |
|---|---|
| 小数点も空のセルの区別もおおむね合う | Functions と台帳の連携に進む |
| 特定の列の数字が読み違えられる | 見本にその崩れ方の表を足す。構成は有効 |
| 小数点が多くの表で消えている | スキャンの解像度か、書き方の決まりが先。 読み取りの問題ではない |
3行目は珍しくありません。 複合機の既定の設定や、鉛筆の薄い字、濡れた手袋で書いたにじみで起きます。それが分かったこと自体が、打ち直しで時間がかかっていた理由の1つです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 「35」を「3.5」に直してしまう | 直さない。 基準の外として回し、画像で確かめる |
| 空のセルを前回の値で埋める | 埋めない。not_written として残す |
| 「書かれていない」と「読めなかった」が混ざる | NULL の信頼度で分ける |
| 読めなかった行を捨てて「記録の抜け」に出る | 台帳に積んで保留にする |
| 小数点がスキャンで消える | 解像度を上げる。小数点を大きく書く決まりにする |
| 前回との差を見ずに読み違いを見逃す | 「急な変化」を照合に入れる |
| 記録表の日付が読めず全行が宙に浮く | 記録表ごと保留にし、班長に確かめる |
| ポーリングのトリガーで処理が遅れる | イベントで動く Blob のトリガーにする |
| 試し直しに失敗したファイルに気づかない | webjobs-blobtrigger-poison のキューを毎朝見る |
| 基準の表が古いまま | 基準を変えたら表を直し、当時の基準を残す |
上の4行が、この構成の失敗のほとんどです。 どれも、空や読めない値を、もっともらしい値や「無かったこと」にしてしまう誤りです。台帳が見かけ上きれいになるほど、外れと抜けが見えなくなります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 樽ごとの製造の記録、品目ごとの塩の割合と塩分の基準(製品の配合にあたる、自社の重要な情報)、作業者の名前です。
- 基準の表を外に出さない … 塩の割合と塩分の範囲は、製品の味を決める配合の情報です。照合は自社の Azure の環境の中の処理で行い、台帳と基準の表へのアクセスを品質管理と班長に絞ります
- 樽の扱いを自動で決めない … 出荷・作り直し・廃棄の判断は品質管理の責任者が行います。この構成が出すのは、外れたという事実と、どの記録表の何行目かまでです
- 衛生管理の記録として残せる形にする … 人が値を入れ直した記録と、責任者が決めた扱いを、後から確かめられるように残します。記録の様式と保存の期間は、自社の衛生管理の計画に合わせます
- 作業者を評価する材料にしない … 記録の抜けや読み違いの多さは、まず様式とスキャンの設定と作業の段取りの問題として扱います。特定の作業者を責める一覧にすると、記録そのものが書かれなくなります
誤りが起きた場合のリスクは、基準から外れた樽を見落とすことと、正常な樽を外れとして扱うことの2つです。 前者は空のセルを前回の値で埋めたり読み違いを直したりすると起き、後者は読み違いを画像で確かめずに外れと決めると起きます。どちらも「値を直さず、画像で確かめる」という決まりで防ぎます。
10まず何から始めるか
1週目:基準の一覧を表にする
紙の基準の一覧を、品目・段階ごとに1行の表にします。塩の割合、塩分の範囲、次の作業までの日数の目安、前回との差の幅を入れます。あわせて樽の一覧を作り、番号の札と照らします。
2週目:20枚で試す
先月の記録表で Document Intelligence Studio のモデルを作り、小数点と空のセルの区別がどれだけそのまま読めるかを確かめます。
3週目:書き方とスキャンの設定をそろえる
小数点を大きく書く、空の欄に斜線を引かない、ボールペンで書く、を現場の決まりにします。複合機の解像度を、小数点が残る設定に変えます。
4週目:保存から台帳までをつなぐ
Blob の保存から読み取り、台帳への積み上げまでを作ります。この時点では一覧を出さず、台帳を打ち直しの結果と並べて見比べます。
2か月目: 基準との照合と毎朝の一覧を足し、打ち直しをやめます。3か月目以降: 1枚6分が何分になったかを実測し、読み違いの多い列と記録の抜けの多い工程を見て、様式と段取りを見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| カスタム テンプレート モデルが、ラベルを付けた値・選択マーク・表・署名・選んだ領域を取り出し、決まった見た目の様式に向くこと。様式ごとに少なくとも5枚の見本を用意すること。サイズが S0 で500MB・F0 で4MB、文字の高さの下限が1024×768の画像で12ピクセルであること。学習の版の指定に 2024-11-30 があること | Microsoft Learn: Custom template document model | 2026-10-29 |
2024-11-30(GA)から、カスタムモデルで表・行・セルの信頼度が返ること。値の無いセルが NULL と信頼度を持ち、信頼度が高いほど値が無いという予測が正しく、低いと値を見落とした可能性があること。表 → 行 → セルの順に見ること。固定の表ではセルの信頼度で多くが分かること | Microsoft Learn: Interpret and improve model accuracy and confidence scores | 2026-10-29 |
カスタム テンプレート モデルの手書きの文字の対応言語に日本語(ja)が含まれること | Microsoft Learn: Language and locale support for custom models | 2026-10-29 |
Blob のトリガーにイベントで動くものとポーリングで動くものがあり、イベントで動くものが遅れが少なく推奨されること。ポーリングは Consumption のプランで最大10分の遅れがありうり、ログがベストエフォートであること。blob receipts で同じ Blob を二度呼ばないこと。失敗時に既定で合わせて5回試し、webjobs-blobtrigger-poison のキューに入ること | Microsoft Learn: Azure Blob storage trigger for Azure Functions | 2026-10-29 |
| HACCPの考え方を取り入れた衛生管理のための手引書の一覧に、全日本漬物協同組合連合会が作成した「漬物製造(小規模事業者向け)」の手引書が掲載されていること | 厚生労働省: HACCPの考え方を取り入れた衛生管理のための手引書 | 2026-10-29 |
塩分や塩の割合の基準、漬け替えまでの日数は、製品と工場ごとに決めるものです。 本記事の基準の項目と信頼度のしきい値は例示で、製品の公開仕様と厚生労働省の手引書の一覧で確認できた範囲だけを扱っています。衛生管理の計画と記録の様式は、手引書と保健所の指導に沿って自社で決めてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2237)についてのご相談はこちらから。
