製麺所が手書きの製造記録(配合・加水率・ゆで時間・検品)を読み取り、ロットごとの製造台帳と基準外の値の一覧を作る
製麺所の製造ラインで手書きする製造記録をスキャンして読み取り、ロットごとの製造台帳に登録します。加水率を粉と水の量から検算し、品目ごとの社内基準を外れた値の一覧を作って、出荷の前に品質管理の担当が確かめます。
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 製造/飲食
- 対象部門
- 品質管理
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- ラインの担当が、ロットごとに計量と工程の値を記録表に書く
- ラインの責任者が、1日の終わりに記録表を見て確認者の欄に印を押す
- 品質管理の担当が記録表を回収し、ロット台帳に打ち直す
- 加水率を電卓で検算し、品目ごとの社内基準の文書と照らして、外れた値に印を付ける
- 外れた値があれば、ラインの責任者に事情を聞き、台帳の備考に書く
- 翌朝の出荷の前に、印の付いたロットを確かめる
- 月末に、台帳から品目ごとの加水率や重量のばらつきを見る
- 人ラインの担当が、見出しを1行にそろえた新しい記録表に、ロットごとの値を書く
- 人昼の休憩と終業の前の2回、ラインの責任者が確認者の欄に印を押した記録表を複合機でスキャンし、共有フォルダに保存する
- 自動12時30分と18時に、Python のプログラムが新しいファイルを見つけ、Document AI の Form Parser で読み取る
- 自動表の見出しから列を決め、ロットごとの行に直す。信頼度の低い値と、数字として読めない値に印を付ける
- 自動粉と水の量から加水率を計算し、書かれた加水率と比べる
- 自動品目マスタの社内基準と照らし、外れた値を出す
- 自動ロット台帳に行を追加し、「読み取りの確認」「加水率の食い違い」「基準外」の3つの一覧を作る
- 人品質管理の担当が、一覧の行だけを記録表のスキャンと見比べる
- 人基準外が本当なら、ラインの責任者に事情を聞き、台帳の備考に書く。出荷の扱いは責任者と品質管理で決める
- 人翌朝の出荷の前に、基準外のロットの扱いが決まっていることを確かめる
各工程の詳しい説明を読む
- ラインの担当が、ロットごとに計量と工程の値を記録表に書く
- ラインの責任者が、1日の終わりに記録表を見て確認者の欄に印を押す
- 品質管理の担当が記録表を回収し、ロット台帳に打ち直す
- 加水率を電卓で検算し、品目ごとの社内基準の文書と照らして、外れた値に印を付ける
- 外れた値があれば、ラインの責任者に事情を聞き、台帳の備考に書く
- 翌朝の出荷の前に、印の付いたロットを確かめる
- 月末に、台帳から品目ごとの加水率や重量のばらつきを見る
(a)打ち直しが毎日残る。 1日24ロットに10列前後の値で、1日に200を超える数字を手で打ちます。 夕方に回収するため、打ち直しは毎日の終わりに集中します。
(b)加水率の書き間違いが見逃される。 4番の検算は、忙しい日には省かれます。書かれた加水率が基準の範囲に入っていれば、粉と水の量が基準から外れていても気づきません。
(c)基準の文書を毎回引く。 品目ごとに加水率・ゆで時間・品温・重量の範囲が違い、品目コードを見て文書のページを開くところから照合が始まります。
(d)傾向を見る時間が無い。 7番は、月末の打ち直しが終わってから行うため、ばらつきが大きくなっている品目に気づくのが翌月になります。
- 【人】 ラインの担当が、見出しを1行にそろえた新しい記録表に、ロットごとの値を書く
- 【人】 昼の休憩と終業の前の2回、ラインの責任者が確認者の欄に印を押した記録表を複合機でスキャンし、共有フォルダに保存する
- 【自動】 12時30分と18時に、Python のプログラムが新しいファイルを見つけ、Document AI の Form Parser で読み取る
- 【自動】 表の見出しから列を決め、ロットごとの行に直す。信頼度の低い値と、数字として読めない値に印を付ける
- 【自動】 粉と水の量から加水率を計算し、書かれた加水率と比べる
- 【自動】 品目マスタの社内基準と照らし、外れた値を出す
- 【自動】 ロット台帳に行を追加し、「読み取りの確認」「加水率の食い違い」「基準外」の3つの一覧を作る
- 【人】 品質管理の担当が、一覧の行だけを記録表のスキャンと見比べる
- 【人】 基準外が本当なら、ラインの責任者に事情を聞き、台帳の備考に書く。出荷の扱いは責任者と品質管理で決める
- 【人】 翌朝の出荷の前に、基準外のロットの扱いが決まっていることを確かめる
8番目が、この設計の分かれ目です。人が見るのは一覧の行だけです。 読み取りが確かで、加水率が合い、基準に入っているロットは台帳に入るだけで、全部の行を記録表と見比べる設計にすると、①の2分はほとんど減りません。
一覧を3つに分けているのは、見る順番を決めるためです。 先に「読み取りの確認」を片付け、読み違いを直してから「加水率の食い違い」と「基準外」を見ます。読み違いを直す前に基準外を見ると、存在しない基準外のために責任者を探すことになります。
02今回想定するシステム構成
製造記録(ライン・日ごとの記録表。見出し1行の罫線の表) │ 昼と終業の前にスキャン(1枚1ファイル) ▼【トリガー】12:30 と 18:00 の定時に共有フォルダの新着を見る Python(品質管理の PC かサーバー) ├─ 形式・解像度の確認 ▼ Google Document AI(Form Parser) │ 表(見出しの行・本体の行・セル)、キーと値(製造日・ライン・確認者) │ チェック欄(表の中は ✓ / ☐ の文字)、信頼度 ▼ Python ── 見出しで列を決める → ロットごとの行 │ 加水率の検算/品目マスタの社内基準との照合 ▼ ロット台帳(CSV に追記)・3つの一覧 ▼ 【品質管理の担当が一覧の行を確かめ、出荷の前に扱いを決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence(レイアウト モデル)。AWS Textract は日本語を読めないため対象外 |
| 集計 | Python(表の行への変換、加水率の計算、社内基準との照合、一覧の書き出し) | Google Apps Script |
| 保管 | 社内の共有フォルダ(記録表のスキャンとロット台帳) | Google ドライブ |
| 基準 | 品目マスタ(品目コードごとの社内基準の範囲) | ― |
新しく足すのは、品目マスタの「社内基準の範囲」の列です。 これまで品質管理の文書に文章で書かれていた加水率・ゆで時間・ゆで湯の温度・品温・重量の範囲を、品目コードごとの下限と上限の数字にします。
土台になるのは、Document AI の Form Parser です。 キーと値のペア、表、チェック欄、一般的な項目を、OCR の文字とあわせて取り出す学習済みのプロセッサで、学習させることはできません。 プロセッサの一覧では、推奨の版 pretrained-form-parser-v2.0-2022-11-10 が一般提供(GA)で、日本語(ja)に手書きの対応の印が付いています。
表の読み方に、この構成の前提があります。 公式の説明では、Form Parser の表の取り出しは行や列をまたぐセルの無い、ふつうの表だけを認識します。 返ってくる表は、見出しの行(headerRows)と本体の行(bodyRows)に分かれ、それぞれにセルが並びます。記録表の様式を、この性質に合わせて作り直します。
処理する場所も決めておきます。 Form Parser が使える地域は、us・eu の複数の地域といくつかの単一の地域で、一覧に日本の地域はありません。 製造記録に載る個人の情報は担当の名字くらいですが、記録表を国外の地域で処理してよいかを、社内で先に確かめます。
03どうやって実装するのか
処理の起点を決める
12時30分と18時の定時に、共有フォルダの新着を見に行くことを起点にします。 動かすのは、品質管理の PC かサーバーのタスクの予約の機能です。
1日2回にしているのは、出荷の前に一覧を見られるようにするためです。 午前のロットの多くは、その日の午後か翌朝に出荷されます。終業の後に1回だけ読むと、午前のロットの基準外に気づくのが翌朝になります。 昼の休憩で午前の記録表をいったんスキャンし、終業の前に午後の分をスキャンします。
読み取りが終わったファイルは、処理済みのフォルダへ移します。 移すのは台帳に書き出すところまで成功したときだけで、共有フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録表のスキャン | 1枚1ファイルの PDF か画像。保存の日時 | 共有フォルダ |
| 読み取り結果 | 表の見出しの行と本体の行のセル、製造日・ライン・記録者・確認者のキーと値、チェック欄、信頼度 | Document AI |
| 品目マスタ | 品目コード、品名、ライン、加水率・ゆで時間・ゆで湯の温度・冷却後の品温・1玉の重量の下限と上限 | 品質管理で用意する一覧 |
| 見出しの対応表 | 記録表の見出しの文字と、台帳の列の名前の対応 | 品質管理で用意する一覧 |
質を決めるのは、品目マスタの基準の数字です。 文書の「おおむね」「〜前後」のような書き方を、下限と上限の数字に直す作業は、品質管理と製造の責任者で行います。 直し方が決まらない値は、基準の照合から外し、台帳に記録するだけにします。
見出しの対応表は、記録表の見出しが読み違えられたときのために持ちます。 「ゆで時間」が「ゆで時問」と読まれても、対応表に読み違えやすい表記を足しておけば、同じ列に入ります。
データの取得方法を決める
Python のプログラムから、公式のライブラリ google-cloud-documentai で Form Parser を呼びます。 公式の手順では、DocumentProcessorServiceClient を作り、ProcessRequest にプロセッサの名前と文書(raw_document)を渡して process_document を呼びます。us 以外の地域を使うときは、api_endpoint に地域の付いたエンドポイントを指定します。
| 取るもの | 返り方 | 何に使うか |
|---|---|---|
| 表の見出し | pages[].tables[].headerRows[].cells[] | 列の決定 |
| 表の本体 | pages[].tables[].bodyRows[].cells[] | ロットごとの値 |
| セルの文字 | 各セルの layout.textAnchor が全文(text)を指す位置 | 値の取り出し |
| 信頼度 | 各要素の layout.confidence | 「読み取りの確認」に回すか |
| 製造日・ライン・確認者 | pages[].formFields[] の fieldName と fieldValue | 記録表の特定と確認の有無 |
| 金属検出機のチェック | 表の中のチェック欄は ✓ か ☐ の文字 | 作動確認の有無 |
表をロットの行に直す処理は、次のような流れです。
from google.cloud import documentai_v1
from google.api_core.client_options import ClientOptions
client = documentai_v1.DocumentProcessorServiceClient(
client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com"))
raw = documentai_v1.RawDocument(content=pdf_bytes, mime_type="application/pdf")
doc = client.process_document(
request=documentai_v1.ProcessRequest(name=PROCESSOR_NAME, raw_document=raw)).document
def cell_text(cell):
# textAnchor の位置から全文を切り出す(startIndex は省かれることがある)
return "".join(doc.text[s.start_index:s.end_index]
for s in cell.layout.text_anchor.text_segments).strip()
for page in doc.pages:
for table in page.tables:
header = [HEADER_MAP.get(cell_text(c)) for c in table.header_rows[0].cells]
if None in header:
mark_table_for_review(table) # 列が決まらない表は全部確認へ
continue
for row in table.body_rows:
values = {col: (cell_text(c), c.layout.confidence)
for col, c in zip(header, row.cells)}
add_lot_row(values) # 検算と照合は別の関数で行う
読み取りと判定を別の関数に分けておくと、基準の値や計算式を直したときに、読み取りをやり直さずに判定だけをやり直せます。
表の中のチェック欄は、文字として返ります。 公式の説明では、表の中のチェック欄は ✓(付いている)や ☐(付いていない)の文字で表れ、表の外のチェック欄はキーと値のペアとして返り、valueType が filled_checkbox か unfilled_checkbox になります。 金属検出機の作動確認は表の中なので、セルの文字が ✓ か ☐ かで見ます。
ページの上限は、オンラインの処理で15ページです。 記録表は1枚1ページなので届きません。ファイルの大きさはオンラインで40MBまでです。
AIへ渡す前に整形する
- 様式の改訂 … 見出しを1行にし、行や列をまたぐセルを無くします。 「ゆで麺」の見出しの下に「時間」「湯温」を並べる2段の見出しをやめ、「ゆで時間」「ゆで湯温」の1段にします
- 生麺のラインの空欄 … 生麺のラインはゆで時間などを書きません。空欄に斜線を引く決まりにし、 空欄と読み落としを見分けます
- 数字の書き方 … 小数点は必ず書く、単位は見出しに印刷して欄には書かない、を決まりにします
- 確認者の欄 … 確認者の印は記録表の上のキーと値で取ります。Form Parser は値の空いたキーと値のペアを確実には取り出せないとされているため、キーが見つからない、または値が無いときは「未確認」として扱います
- スキャンの設定 … 公式の説明では、スキャンは200 dpi 以上、300 dpi 以上で最もよい結果になります。複合機を300 dpi にそろえます
- ファイルの形式 … PDF、JPEG、PNG、TIFF などが使えます。TIFF は、以前の JPEG の圧縮方式のものは使えないため、複合機の保存形式を PDF にします
- 汚れ … 記録表を透明のファイルに入れてラインに置くと、水や粉が付きにくくなります。スキャンの前にはファイルから出します
1番目の様式の改訂がいちばん効きます。 2段の見出しのままだと、Form Parser が表として認識できず、セルの並びがずれて、ゆで時間の列に湯温が入ります。 学習の要らないプロセッサなので、様式の側を合わせます。
AIに処理させる
Form Parser にさせるのは、表とキーと値を読み取り、信頼度を付けることだけです。 列の決定、検算、照合は、Python の決まった規則で行います。
| 確かめること | 条件 | 当てはまったときの扱い |
|---|---|---|
| 見出しの列 | 見出しの対応表で全部の列が決まる | 決まらない列があれば、その表を全部「読み取りの確認」 |
| 値の形 | 数字として読める(斜線は空欄) | 読めなければ「読み取りの確認」 |
| 信頼度 | セルの信頼度が基準以上 | 下回ったら「読み取りの確認」 |
| 加水率の検算 | 水÷粉×100 と書かれた加水率の差が0.5ポイント以内 | 超えたら「加水率の食い違い」 |
| 社内基準 | 品目マスタの下限と上限の間 | 外れたら「基準外」 |
| 金属検出機の確認 | セルが ✓ | ☐ か空なら「基準外」 |
| 確認者 | 確認者のキーと値がある | 無ければ「未確認」として一覧の先頭に出す |
| ロット番号の重なり | 台帳に同じ製造日・同じロット番号が無い | あれば二重のスキャンとして書き出さない |
加水率の計算式は、自社の決まりをそのまま使います。 水の量で計算するか、塩水の量で計算するか、粉に対する割合か全体に対する割合かは製麺所によって違います。品質管理の文書にある式を、プログラムに1か所だけ書きます。
させないことも決めておきます。
| させないこと | 理由 |
|---|---|
| 読めない値を、前後のロットや同じ品目の平均で埋める | 埋めた瞬間に、基準外が見えなくなる |
| 書かれた加水率を、計算した値で書き換える | 現場がどう書いたかが、食い違いの調べの材料になる |
| 基準外のロットを出荷してよいかを決める | 品質管理と製造の責任者が決める |
| 基準の範囲を、過去の値から自動で広げる | 基準は品質管理の文書で決める |
1行目がいちばん起きやすい失敗です。 同じ品目のロットは値が似ているので、読めない重量を前のロットの値で埋めると、台帳はきれいにそろいますが、その1ロットだけ重量が足りなかったことが消えます。
指示内容を固定する
この構成には生成AIへのプロンプトがありません。AIへの指示にあたるのは、見出しの対応表と、Python の照合の規則です。
【見出しの対応表(読み違えやすい表記も並べる)】
lot_no ......... ロット / ロット番号 / ロツト
item_code ...... 品目 / 品目コード
flour_kg ....... 小麦粉 / 粉 / 小麦粉(kg)
water_l ........ 水 / 水(L) / 加水量
baume .......... ボーメ / 塩水ボーメ / ボーメ度
water_ratio .... 加水率 / 加水率(%)
mix_min ........ 混合 / 混合時間
boil_min ....... ゆで時間 / ゆで時問 / 茹で時間
boil_temp ...... ゆで湯温 / 湯温
chill_temp ..... 冷却後品温 / 品温
ball_g ......... 1玉重量 / 重量 / 玉重量
metal_check .... 金検 / 金属検出 / 金属検出確認
【照合の規則(Python)】
1. 表ごとに見出しの行を対応表で引き、全部の列が決まらなければ表全体を「読み取りの確認」
2. 斜線は空欄として扱う。生麺のラインの boil_min・boil_temp・chill_temp は空欄でよい
3. 数字として読めない値、信頼度が基準より低い値は「読み取りの確認」
4. 自社の式で加水率を計算し、water_ratio との差が0.5ポイントを超えれば「加水率の食い違い」
5. item_code で品目マスタを引き、下限と上限の外の値は「基準外」
6. metal_check が ✓ でなければ「基準外」
7. 確認者のキーと値が無ければ「未確認」
8. 読めない値を、ほかのロットや平均で埋めない。書かれた値を書き換えない
8番の「埋めない」「書き換えない」が、この規則の中でいちばん大事です。 埋める処理も書き換える処理も、数行で書けます。書けるからこそ、書かない決まりとして残しておきます。
基準の値は、最初の1か月で決めます。 信頼度の基準を低めから始めて「読み取りの確認」を多めに出し、担当が直した値と、そのときの信頼度を並べて、 誤りが出なくなる信頼度を探します。
出力形式を固定する
ロット台帳は、ロットごとに1行の CSV に追記します。
| 列 | 中身 |
|---|---|
| 製造日・ライン・ロット番号・品目コード | 記録表から |
| 粉・水・ボーメ度・加水率(書かれた値) | 記録表から |
| 加水率(計算した値)・差 | プログラムが計算 |
| 混合の時間・ゆで時間・ゆで湯の温度・冷却後の品温・1玉の重量 | 記録表から |
| 金属検出機の確認 | ✓ / ☐ |
| 読み取りの状態 | 確か/読み取りの確認(列の名前) |
| 判定 | 基準内/加水率の食い違い/基準外(列の名前と基準) |
| 確認者 | 印あり/未確認 |
| 記録表のファイル | スキャンへのリンク |
| 備考 | 品質管理の担当が書く事情と扱い |
「読み取りの状態」と「判定」を別の列にしているのが、この形の要です。 読み取りが確かでないロットは、判定の列を空にして「読み取りの確認」の一覧に出し、担当が値を直してから判定をやり直します。 読み違いの値で判定した結果を、台帳に残しません。
3つの一覧は、たとえば次の形で出します。
【読み取りの確認】 10/28 ゆで麺ライン
L-1028-07 ball_g 「2〇5」 信頼度 0.41 記録表 p1 7行目
【加水率の食い違い】
L-1028-03 粉 25.0kg 水 8.5L 書かれた加水率 36.0 計算 34.0 差 2.0
【基準外】
L-1028-11 うどん(U12) chill_temp 18.5℃ 基準 上限 15.0℃
加水率の食い違いの例は、計算の誤りか、計量の書き間違いかのどちらかです。 計算した34.0が基準の範囲でも、書かれた36.0のままでは本当の配合が分かりません。ラインの責任者に、計量の値と計算のどちらが正しいかを聞いて、備考に残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有フォルダ | Python がファイルの一覧を見て読み込む | 記録表のスキャンを受け取る |
| Document AI | google-cloud-documentai の process_document | 表・キーと値・信頼度を返す |
| 品目マスタ・見出しの対応表 | Python が CSV を読み込む | 基準の範囲と列の対応 |
| ロット台帳・一覧 | Python が CSV に追記・書き出す | 品質管理の担当が表計算で開く |
出荷の仕組みには、何もつなぎません。 基準外のロットを止めるかどうかは人が決め、この構成から出荷を止めたり許したりする経路を作りません。
人が確認する
- 「読み取りの確認」を先に見る … 記録表のスキャンを開き、値を直します。直したロットは判定をやり直します
- 「未確認」を見る … 確認者の印が無い記録表は、ラインの責任者に確認を頼みます
- 「加水率の食い違い」を見る … 計量の値と計算のどちらが正しいかを、ラインの責任者に聞きます
- 「基準外」を見る … 事情を聞き、出荷の扱いを責任者と決めて、備考に書きます
- 翌朝の出荷の前に、基準外のロットの扱いが決まっていることを確かめる
1番目を先に片付けることを省かないでください。 読み違いが残ったまま「基準外」を見ると、存在しない基準外のためにラインの責任者を探し、 本当の基準外への対応が後回しになります。
この構成は、現場の判断を後ろに置き換えるものではありません。 ゆで湯の温度が低い、品温が下がらないといったことは、ラインの担当がその場で気づいて対応するのが先です。 一覧は、その場の判断が記録に残っているかを、出荷の前にもう一度確かめるためのものです。
目標は、480ロットをならして1ロット1分です。 一覧に出るロットが2割前後という想定で、それより多い日は、記録表の汚れかスキャンの設定を疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 見出しの列が決まらない | 2段の見出しの古い様式か、見出しの読み違い。表全体を「読み取りの確認」にする |
| 表が2つに分かれて返る | 罫線のかすれ。ページの順に表をつなぎ、見出しが無い表は前の表の続きとする |
| 品目コードが品目マスタに無い | 新しい品目か書き間違い。判定をせずに「読み取りの確認」 |
| 同じ記録表が二度保存された | 製造日・ライン・ロット番号の重なりで見つけ、二度目は書き出さない |
| 記録表が汚れて読めない欄が多い | 記録表の原本を見て、担当が台帳に打つ |
| Document AI の呼び出しが失敗する | ファイルを共有フォルダに残し、次の定時にもう一度読む |
| ロットが多く、記録表が2枚目に続く | 2枚を1つの PDF にし、見出しの無い2ページ目の表を1ページ目の続きとして読む |
上の2行は、運用を始めて最初の数週間によく出ます。 どちらも用紙の問題で、新しい様式に切り替わると減っていきます。
記録を残す
- 記録表のスキャン(紙の原本とあわせて、社内の記録の保存の期間に従う)
- Document AI が返した結果の JSON と、プロセッサの版
- ロット台帳の各行と、担当が直した値の記録(どの列を、何から何に直したか)
- 一覧に出たロットの、事情と扱いの備考
- 品目ごとの加水率・重量のばらつきの推移
3つ目の直した値の記録が、信頼度の基準を決める材料になります。 最後の推移は、月末を待たずに毎週見ます。 台帳が毎日そろうので、ばらつきが広がり始めた品目に、その週のうちに気づけます。
04実装レベルの3段階
この記事の想定は、半自動化です。 読み取り・検算・照合・一覧づくりまでを Python で行い、出荷の扱いの判断は品質管理と製造の責任者が行います。 半自動化で、1ロット4分が1分になります。 打ち直しと検算と照合が一覧の確認に置き換わり、品質管理の担当は一覧に出たロットだけに時間を使います。 本格構成は、機器の入れ替えのときに考えます。 計量や温度の値を機器から直接取れれば、読み取りそのものが要らなくなります。 それまでの間、手書きの記録を台帳にそろえるのがこの構成の役目です。
05工数削減シミュレーション
導入後 480件 × 1分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 生麺・ゆで麺・蒸し麺を作り、製造の記録を紙の記録表に手書きしている製麺所や麺の製造業。品質管理の担当が記録を表計算に打ち直し、加水率の検算や社内基準との照合を目で行っている場合。品目ごとの社内基準(加水率・ゆで時間・品温・重量の範囲)が文書で決まっている場合。
- 製造ラインの機械から配合や温度の値を直接データで取れている場合(読み取りが要らない)。1日のロットが数件で、目視の点検で足りる場合。社内基準が決まっておらず、基準外を判定できない場合。なお、基準外の品を出荷するかどうか、製品の安全の判断はこの構成では行いません。
07最小構成で試す方法
- 見出しを1行にそろえた新しい記録表を、ゆで麺のラインで2週間使う
- その間の記録表から、汚れの多いもの・少ないものを混ぜて10枚(約120ロット)選ぶ
- Document AI のコンソールで Form Parser のプロセッサを作り、10枚を読み取る
- 返ってきた表のセルを、これまでどおり手で打ち直したロット台帳と突き合わせる
- 読み違えたセルの信頼度と、見出しが正しく取れたかを見る
5番目で見るのは、見出しの行が正しく取れているかと、読み違えたセルが信頼度の低い側に集まっているかです。 Form Parser は学習しないので、ここで取れなければ様式を直します。
| 出てきた内容 | 判断 |
|---|---|
| 見出しが取れ、読み違いが信頼度の低い側に集まった | Python の照合づくりに進む |
| 見出しの列がずれる | 行や列をまたぐセルが残っていないか、様式を見直す |
| 小数点の読み落としが多い | 小数点を必ず書く決まりにし、数字の欄を広げる |
| 金属検出機のチェックが取れない | チェック欄の大きさと、✓の書き方をそろえる |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 読み違いを基準外として扱う | 「読み取りの状態」と「判定」を分け、読み取りの確認を先に片付ける |
| 読めない値を前のロットで埋める | 埋めない決まりを規則に書く |
| 書かれた加水率を計算した値で書き換える | 両方を残し、差を「加水率の食い違い」として出す |
| 2段の見出しで列がずれる | 行や列をまたぐセルを無くし、見出しを1行にする |
| 確認者の空欄が取れない | 値の空いたキーと値は確実に取れない。キーが無いときも「未確認」とする |
| 表の中のチェックが取れない | 表の中のチェックは ✓ / ☐ の文字で見る |
| 日本の地域で処理できない | Form Parser の地域に日本は無い。処理の地域を社内で確かめる |
| TIFF が読めない | 以前の JPEG の圧縮方式の TIFF は使えない。PDF で保存する |
上の3行が、この構成の失敗のほとんどです。 どれも、台帳の値が実際に書かれたことと違ってしまうという同じ結果になります。読めないものを埋めず、書かれたものを変えず、読み違いを判定に使わない、の3つを規則に書いておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 品目ごとの配合(粉・水・塩水の量)、工程の条件、検品の値、担当の名字です。
- 配合を社外秘として扱う … 品目ごとの加水率やゆで時間は、その製麺所の味を決める情報です。ロット台帳と品目マスタを見られる人を、品質管理と製造の責任者に絞ります
- 処理する地域を確かめる … Form Parser の地域に日本はありません。記録表を国外の地域で処理してよいかを、社内の取り決めに照らして決めます
- 出荷の判断を自動にしない … 基準外のロットを出荷するかどうかは、品質管理と製造の責任者が決めます。この構成は判断の材料を並べるだけです
- 現場の即時の判断を後回しにしない … ゆで湯の温度や品温の外れは、ラインの担当がその場で対応するのが先です。一覧があることで、その場の確認を省かないよう、ラインに伝えておきます
- 記録の原本を決める … 紙の記録表、スキャン、ロット台帳のどれを原本とし、いつまで残すかを、社内の記録の決まりとあわせて決めます
誤りが起きた場合のリスクは、本当の基準外を見逃すことと、存在しない基準外でロットを止めることの2つです。 前者は読めない値を埋めたときに、後者は読み違いを判定に使ったときに起きます。「読み取りの状態」と「判定」を分けた台帳で、どちらも防ぎます。
10まず何から始めるか
1週目:記録表の様式と品目マスタを決める
見出しを1行にし、行や列をまたぐセルを無くした記録表を作ります。品質管理の文書から、品目コードごとの社内基準の下限と上限を書き出し、製造の責任者と読み合わせます。
2〜3週目:ゆで麺のラインで新しい記録表を使う
新しい様式の記録表を2週間使い、汚れの多いもの・少ないものを混ぜて10枚集めます。
4週目:コンソールで Form Parser を試す
10枚を読み取り、見出しが取れているか、読み違いが信頼度の低い側に集まっているかを確かめます。あわせて、処理する地域を社内で確かめます。
2か月目: Python で定時の読み取り、列の決定、加水率の検算、基準の照合を作り、品質管理の担当がこれまでどおり打ち直しながら、台帳と見比べます。 3か月目以降: 生麺のラインにも広げ、1ロット4分が何分になったかを実測します。3つの一覧が毎日2回そろい、出荷の前に基準外のロットの扱いが決まっている状態になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がキーと値のペア・チェック欄・表・一般的な項目を OCR の文字とあわせて取り出すこと。推奨の版 pretrained-form-parser-v2.0-2022-11-10 が GA であること。言語の一覧で日本語(ja)に手書きの対応の印があること。オンラインの処理で15ページ・一括の処理で100ページまでであること。対応する地域に日本が無いこと | Google Cloud: Processor list | 2026-10-28 |
| Form Parser が学習済みで、学習させられないこと。チェック欄がラジオボタンに対応しないこと。値の空いたキーと値のペアを確実には取り出せないこと。以前の JPEG の圧縮方式の TIFF に対応しないこと | Google Cloud: Form Parser | 2026-10-28 |
表が headerRows と bodyRows のセルとして返ること。表の取り出しが行や列をまたぐセルの無い表だけを認識すること。表の中のチェック欄が ✓ / ☐ の文字で表れ、表の外のチェック欄は valueType が filled_checkbox / unfilled_checkbox になること。textAnchor が全文の位置を指し、要素ごとに confidence があること | Google Cloud: Handle the processing response | 2026-10-28 |
| 対応するファイルの形式(PDF、JPEG、PNG、TIFF など)。スキャンは200 dpi 以上、300 dpi 以上で最もよい結果になること | Google Cloud: Supported files | 2026-10-28 |
| オンラインの処理のファイルの大きさが40MBまでであること。Form Parser のページの上限 | Google Cloud: Quotas and limits | 2026-10-28 |
Python のライブラリ google-cloud-documentai を入れ、DocumentProcessorServiceClient の process_document に ProcessRequest(プロセッサの名前と文書)を渡すこと。us 以外の地域では api_endpoint を指定すること | Google Cloud: Process documents by using client libraries | 2026-10-28 |
加水率の計算式、品目ごとの社内基準の範囲、基準外のロットの扱いは、各製麺所の品質管理の決まりによります。 本記事は製品の公開仕様で確認できた範囲だけを扱っており、本記事の数値は例示です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2160)についてのご相談はこちらから。
