養鶏場が鶏舎ごとの手書きの集卵・へい死・給餌の記録を読み取り、日ごと・鶏舎ごとの集計表を作る
養鶏場で鶏舎の担当が毎日手書きする鶏舎ごとの日報を読み取り、群の台帳の飼養羽数とあわせて、日ごと・鶏舎ごとの産卵率・へい死率・給餌量の集計表を作ります。直近21日の平均と比べたへい死の増え方も、鶏舎ごとに並べます。
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他
- 対象部門
- 生産
- 対象業務
- データ入力・転記/集計・分析
- 主な課題
- データ分析に時間がかかる/入力作業が多い/期限・対応漏れが起きる
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 鶏舎の担当が、見回りと集卵のたびに日報を書き足す
- へい死が多いと感じたら、担当が農場長に電話で知らせる
- 夕方、事務の担当が8棟の日報を回収する
- 事務の担当が、日報の値を集計表に打ち直す
- 農場長が、群の台帳の飼養羽数を更新し、産卵率とへい死率を計算する
- 異状の記載があれば、農場長が鶏舎を見に行き、必要なら獣医師に相談する
- 月に1回、群ごとの産卵率とへい死率の推移を見る
- 人鶏舎の担当が、欄を枠で区切り「0も書く」決まりにした日報を書く。日報の上の欄には、前の日の夕方に印刷された「すぐ知らせる羽数の目安」がある
- 人へい死を数えたら、その場で目安と見比べ、目安以上か、まとまった死亡や異状があれば、すぐ農場長に電話で知らせる(この手順はこれまでどおり)
- 人夕方、事務の担当が8枚の日報を回収し、複合機でスキャンして共有フォルダに保存する
- 自動18時30分に、Python のプログラムが Document AI の Form Parser で日報を読み取る
- 自動欄ごとの値と信頼度を取り出し、空欄・読めない値・信頼度の低い値に印を付ける
- 自動群の台帳から飼養羽数を引き、産卵率・へい死率・1羽あたりの給餌量を計算する
- 自動直近21日の平均のへい死率を鶏舎ごとに計算し、当日のへい死率と比べる
- 自動日ごと・鶏舎ごとの集計表と、「読み取りの確認」「へい死の増え方」「異状の記載」の一覧を作り、翌日の日報に目安の羽数を入れて印刷用のファイルを作る
- 人事務の担当が「読み取りの確認」を日報と見比べて直し、農場長が残りの一覧を見る
- 人農場長が、群の台帳の空舎の日や特段の事情のあった日を付け、翌日の目安が正しく出るようにする
各工程の詳しい説明を読む
- 鶏舎の担当が、見回りと集卵のたびに日報を書き足す
- へい死が多いと感じたら、担当が農場長に電話で知らせる
- 夕方、事務の担当が8棟の日報を回収する
- 事務の担当が、日報の値を集計表に打ち直す
- 農場長が、群の台帳の飼養羽数を更新し、産卵率とへい死率を計算する
- 異状の記載があれば、農場長が鶏舎を見に行き、必要なら獣医師に相談する
- 月に1回、群ごとの産卵率とへい死率の推移を見る
(a)打ち直しが遅れる。 8枚の日報に十数の値が並び、4番は毎日30分前後かかります。 集卵の多い日や事務の担当が休みの日には翌日以降に回り、集計表が数日遅れていることがあります。
(b)「多いと感じたら」に頼っている。 2番は担当の感覚です。12万羽の農場では、鶏舎ごとに毎日いくらかのへい死があり、1日に何羽なら多いのかは、その鶏舎の最近の数を覚えていないと判断できません。 新しく入った担当には、なおさら分かりません。
(c)記録の欠けに気づかない。 へい死の欄の空欄が「0羽」か「書き忘れ」かは、打ち直しの段階では分かりません。欠けた日があると、21日の平均も産卵率も正しく出ません。
(d)推移を見るのが月1回。 7番まで、群ごとの変化を並べて見る機会がありません。産卵率がじわじわ下がっている鶏舎に、気づくのが翌月になります。
- 【人】 鶏舎の担当が、欄を枠で区切り「0も書く」決まりにした日報を書く。日報の上の欄には、前の日の夕方に印刷された「すぐ知らせる羽数の目安」がある
- 【人】 へい死を数えたら、その場で目安と見比べ、目安以上か、まとまった死亡や異状があれば、すぐ農場長に電話で知らせる(この手順はこれまでどおり)
- 【人】 夕方、事務の担当が8枚の日報を回収し、複合機でスキャンして共有フォルダに保存する
- 【自動】 18時30分に、Python のプログラムが Document AI の Form Parser で日報を読み取る
- 【自動】 欄ごとの値と信頼度を取り出し、空欄・読めない値・信頼度の低い値に印を付ける
- 【自動】 群の台帳から飼養羽数を引き、産卵率・へい死率・1羽あたりの給餌量を計算する
- 【自動】 直近21日の平均のへい死率を鶏舎ごとに計算し、当日のへい死率と比べる
- 【自動】 日ごと・鶏舎ごとの集計表と、「読み取りの確認」「へい死の増え方」「異状の記載」の一覧を作り、翌日の日報に目安の羽数を入れて印刷用のファイルを作る
- 【人】 事務の担当が「読み取りの確認」を日報と見比べて直し、農場長が残りの一覧を見る
- 【人】 農場長が、群の台帳の空舎の日や特段の事情のあった日を付け、翌日の目安が正しく出るようにする
2番目が、この設計でいちばん大事なところです。 知らせる判断は、鶏舎の担当がその場で行います。この構成は、その判断に使う目安の羽数を前の日のうちに用意し、夕方にもう一度、知らせ漏れが無かったかを確かめるためのものです。
9番目の「読み取りの確認」を先に片付けるのは、 読み違いで出た「へい死の増え方」のために鶏舎を見に行くことを避けるためです。
02今回想定するシステム構成
鶏舎ごとの日報(1棟1日1枚。欄を枠で区切った様式) │ 夕方に回収し、事務所の複合機でスキャン(1枚1ファイル) ▼【トリガー】18:30 の定時に共有フォルダの新着を見る Python(事務所の PC) ▼ Google Document AI(Form Parser) │ キーと値(鶏舎番号・日付・集卵・へい死・給餌・温度) │ チェック欄(filled_checkbox / unfilled_checkbox)、信頼度 ▼ Python ── 群の台帳から飼養羽数を引く │ 産卵率・へい死率・給餌量の計算/直近21日の平均との比較 ▼ 集計表(日ごと・鶏舎ごと)・3つの一覧・翌日の日報(目安の羽数入り) ▼ 【事務の担当が読み取りを直し、農場長が一覧を見る】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence(カスタム テンプレート モデル)。AWS Textract は日本語を読めないため対象外 |
| 集計 | Python(キーと値の取り出し、飼養羽数の引き継ぎ、率の計算、21日の平均、日報の印刷用のファイル) | Google Apps Script |
| 保管 | 事務所の共有フォルダ(日報のスキャン、集計表) | Google ドライブ |
| 台帳 | 群の台帳(導入・へい死・淘汰・出荷・空舎の日) | ― |
群の台帳は、新しく足すものではありません。 足すのは、空舎の日と「特段の事情のあった日」の列です。防疫指針では、21日の平均を出すとき、家きんの伝染性疾病や設備の故障、気温の急激な変化、火災、風水害などの特段の事情のあった日と、出荷などで家きん舎が空だった日を除いて、通算21日で数えるとされています。除く日を、農場長が台帳に付けます。
土台になるのは、Document AI の Form Parser です。 キーと値のペア、表、チェック欄、一般的な項目を、OCR の文字とあわせて取り出す学習済みのプロセッサで、学習させることはできません。 プロセッサの一覧では、推奨の版 pretrained-form-parser-v2.0-2022-11-10 が一般提供(GA)で、日本語(ja)に手書きの対応の印が付いています。
日報は表ではなく、キーと値の様式にします。 「へい死(羽)」のようなラベルの付いた枠に書き込む様式は、Form Parser がキーと値として取り出す形です。表の外のチェック欄は、キーと値のペアとして返り、valueType が filled_checkbox か unfilled_checkbox かで、付いているかが分かります。
処理する地域も決めておきます。 Form Parser が使える地域は、us・eu の複数の地域といくつかの単一の地域で、一覧に日本の地域はありません。 日報に載るのは鶏舎の数字と担当の名字ですが、国外の地域で処理してよいかを先に確かめます。
03どうやって実装するのか
処理の起点を決める
18時30分の定時に、共有フォルダの新着を見に行くことを起点にします。 動かすのは、事務所の PC のタスクの予約の機能です。
時刻は、翌日の日報の印刷に間に合うように決めます。 夕方の見回りと集卵が終わり、日報がそろう時刻の後で、事務の担当が帰る前に「読み取りの確認」を直せる時刻にします。直した後に、翌日の日報の印刷用のファイルを作り直すボタン(もう一度動かすための小さな手順)を用意しておきます。
8枚がそろわないうちは、翌日の日報を作りません。 1棟でも欠けると、その鶏舎の21日の平均が1日分ずれます。欠けた鶏舎は「日報が届いていない」として一覧の先頭に出し、 事務の担当が鶏舎に取りに行きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 日報のスキャン | 1枚1ファイルの PDF。保存の日時 | 共有フォルダ |
| 読み取り結果 | 鶏舎番号・日付・集卵の数・破卵・汚卵・へい死・淘汰・給餌の量・最高と最低の温度のキーと値、給水の異常と異状の有無のチェック、異状の内容、信頼度 | Document AI |
| 群の台帳 | 鶏舎ごとの導入の日と羽数、日齢、へい死と淘汰の合計、出荷・空舎の日、特段の事情のあった日 | 表計算のファイル |
| 見出しの対応表 | 日報のラベルの文字と、集計表の列の名前の対応 | 事務の担当が用意する一覧 |
質を決めるのは、群の台帳の「除く日」の列です。 空舎の日や設備の故障の日を付け忘れると、その日のへい死が21日の平均に入り、翌日以降の目安の羽数がずれます。 付けるのは農場長で、付けた理由を備考に書きます。
集卵の数は、トレーの数と端数で書いてもらいます。 1トレーの個数を決めておき、プログラムがトレーの数×個数+端数で個数に直します。 個数を直接書くより、桁の多い数字を手で書く回数が減ります。
データの取得方法を決める
Python のプログラムから、公式のライブラリ google-cloud-documentai で Form Parser を呼びます。 プロセッサの名前と文書を渡して process_document を呼ぶと、ページごとのキーと値(formFields)が返ります。
| 取るもの | 返り方 | 何に使うか |
|---|---|---|
| ラベルの文字 | pages[].formFields[].fieldName | 見出しの対応表で列を決める |
| 書かれた値 | pages[].formFields[].fieldValue | 集計表の値 |
| チェック欄 | fieldValue.valueType が filled_checkbox / unfilled_checkbox | 給水の異常・異状の有無 |
| 位置と文字 | layout.textAnchor が全文(text)の位置を指す | 値の切り出し |
| 信頼度 | layout.confidence | 「読み取りの確認」に回すか |
キーと値を列に直す処理は、次のような流れです。
doc = client.process_document(
request=documentai_v1.ProcessRequest(name=PROCESSOR_NAME, raw_document=raw)).document
def text_of(layout):
return "".join(doc.text[s.start_index:s.end_index]
for s in layout.text_anchor.text_segments).strip()
row, low = {}, []
for page in doc.pages:
for f in page.form_fields:
col = LABEL_MAP.get(text_of(f.field_name)) # 見出しの対応表で列を決める
if col is None:
continue
if f.value_type in ("filled_checkbox", "unfilled_checkbox"):
row[col] = (f.value_type == "filled_checkbox")
else:
row[col] = text_of(f.field_value)
if f.field_value.confidence < THRESHOLD:
low.append(col)
missing = [c for c in REQUIRED_COLUMNS if c not in row] # 取れなかった列=書き忘れの疑い
最後の行の missing が、記録の欠けを拾う場所です。 取れなかった列を0で埋めず、そのまま「読み取りの確認」に渡します。
ラベルの文字は、見出しの対応表で列に直します。 「へい死(羽)」が「へい死(羽」や「へいし」と読まれても、対応表に読み違えやすい表記を足しておけば同じ列に入ります。キーと値の様式では、表のように列の位置で決められないため、対応表が読み取りの要になります。
取れなかったラベルは、そのまま「読み取りの確認」に出します。 公式の説明では、Form Parser は値の空いたキーと値のペアを確実には取り出せないとされています。へい死の欄が空欄だと、ラベルごと結果から消えることがあります。 次の前処理の「0も書く」が、ここに効きます。
AIへ渡す前に整形する
- 「0も書く」決まり … へい死・淘汰・破卵・汚卵が0のときも「0」と書きます。空欄は書き忘れとして扱います
- 様式の改訂 … 欄を太い枠で区切り、ラベルを枠の左に置きます。ラベルと値の並びが毎回同じになるようにします
- チェック欄は「あり」「なし」の2つ … どちらか一方に印を付けます。ラジオボタンのような丸い選択の欄は、Form Parser のチェック欄の読み取りが対応しないため、四角いチェック欄にします
- 目安の羽数の欄 … 日報の上に、前の日の夕方に印刷する「すぐ知らせる羽数の目安」の欄を作ります。印刷の文字は読み取りの対象から外し、 集計にはプログラムが計算した値を使います
- スキャンの設定 … 公式の説明では、スキャンは200 dpi 以上、300 dpi 以上で最もよい結果になります。複合機を300 dpi にそろえます
- ファイルの形式 … 以前の JPEG の圧縮方式の TIFF は使えないため、保存形式を PDF にします
- 日報の汚れ … 鶏舎の前室で書く場所を決め、日報を板に挟んでおきます。衛生管理区域から持ち出す物の扱いは、農場の決まりに従います
1番目の「0も書く」が、この構成でいちばん効きます。 空欄が書き忘れと決まれば、記録の欠けを読み取りの段階で拾えます。 へい死が0の日を記録に残すことは、21日の平均を正しく出すことにもつながります。
AIに処理させる
Form Parser にさせるのは、キーと値とチェック欄を読み取り、信頼度を付けることだけです。 計算と比較は、Python の決まった規則で行います。
| 確かめること | 条件 | 当てはまったときの扱い |
|---|---|---|
| 日報の数 | 当日の8棟の日報がそろう | 欠けた鶏舎を「日報が届いていない」 |
| ラベルの有無 | 見出しの対応表の全部の列が取れる | 取れない列は「読み取りの確認」(書き忘れの疑い) |
| 値の形 | 数字として読める | 読めなければ「読み取りの確認」 |
| 信頼度 | 値の信頼度が基準以上 | 下回ったら「読み取りの確認」 |
| へい死の増え方 | 当日のへい死率が直近21日の平均の2倍以上 | 「へい死の増え方」の一覧に出す |
| まとまった死亡 | へい死が5羽以上 | 「へい死の増え方」の一覧に出す |
| 異状の有無 | 「あり」にチェック、または内容の欄に記載 | 「異状の記載」の一覧に出す |
| 給餌と温度 | 直近7日の平均から自社で決めた幅を外れる | 「異状の記載」の一覧に出す |
21日の平均は、群の台帳の「除く日」を除いて、通算21日で数えます。 防疫指針の数え方に合わせ、空舎の日と特段の事情のあった日を飛ばして、さかのぼって21日分を集めます。5羽以上のまとまった死亡は、防疫指針の留意事項に出てくる目安で、農場長が家畜保健衛生所と取り決めた目安があれば、そちらを使います。
数え方の例を挙げます。 鶏舎3で、10月の5日から7日まで給餌の機器の故障があり、農場長が台帳に「除く日(設備の故障)」を付けていたとします。10月28日の平均を出すとき、さかのぼる21日間に故障の3日が入るため、その3日を飛ばして、さらに3日さかのぼった通算21日で計算します。故障の日のへい死の増え方が平均を押し上げ、翌日の目安の羽数が高くなりすぎることを防ぎます。
させないことも決めておきます。
| させないこと | 理由 |
|---|---|
| 特定症状に当たるかを決める | 判断は農場長と獣医師、家畜保健衛生所が行う |
| 通報する・しないを決める | 通報はその場で人が行う |
| 空欄のへい死を0として計算する | 書き忘れを0にすると、21日の平均が下がり、目安の羽数も下がる |
| 読めない値を前日の値で埋める | 1日分の増え方が消える |
| 「除く日」を自動で付ける | 特段の事情があったかは農場長が決める |
3行目がいちばん起きやすい失敗です。 空欄を0として計算すると、集計表はきれいにそろいますが、その日の本当のへい死が分からなくなります。 空欄の日は、鶏舎の担当に確かめてから値を入れます。
指示内容を固定する
この構成には生成AIへのプロンプトがありません。AIへの指示にあたるのは、見出しの対応表と、Python の計算の規則です。
【見出しの対応表(読み違えやすい表記も並べる)】
house_no ....... 鶏舎 / 鶏舎番号 / 鶏舎No
date ........... 日付 / 月日
egg_tray ....... 集卵(トレー) / 集卵トレー
egg_rest ....... 端数 / 集卵端数
broken ......... 破卵 / 破卵数
dirty .......... 汚卵 / 汚卵数
dead ........... へい死 / へい死(羽 / へいし / 死亡
culled ......... 淘汰 / 淘汰(羽
feed_kg ........ 給餌 / 給餌量 / 給餌(kg
temp_max ....... 最高 / 最高温度
temp_min ....... 最低 / 最低温度
water_alarm .... 給水異常(チェック)
abnormal ....... 異状(チェック)と 異状の内容
【計算の規則(Python)】
1. 取れなかった列、数字として読めない値、信頼度の低い値は「読み取りの確認」。0 で埋めない
2. 集卵の個数 = egg_tray × 1トレーの個数 + egg_rest
3. 飼養羽数 = 群の台帳の前日の羽数 − dead − culled(読み取りの確認が残る鶏舎は計算を保留)
4. 産卵率 = 集卵の個数 ÷ 前日の飼養羽数 × 100
5. へい死率 = dead ÷ 前日の飼養羽数 × 100
6. 21日の平均 = 群の台帳の「除く日」を除き、さかのぼって通算21日のへい死率の平均
7. 当日のへい死率が21日の平均の2倍以上、または dead が5以上なら「へい死の増え方」
8. 翌日の目安の羽数 = 21日の平均 × 2 × 当日の飼養羽数 を切り上げ、5 と比べて小さいほう
9. 特定症状に当たるか、通報するかは書かない
8番の目安の羽数を「小さいほう」にするのは、知らせ漏れを避けるためです。 21日の平均の2倍と、まとまった死亡の5羽のどちらか早く届くほうを、鶏舎の担当の目安にします。
3番で「計算を保留」にするのは、 読み違いのまま飼養羽数を引き継ぐと、翌日以降の産卵率もへい死率もずれていくからです。
出力形式を固定する
集計表は、日ごと・鶏舎ごとに1行です。
| 列 | 中身 |
|---|---|
| 日付・鶏舎番号・日齢 | 日報と群の台帳から |
| 飼養羽数(前日・当日) | 群の台帳から引き継いで計算 |
| 集卵の個数・破卵・汚卵 | 日報から |
| 産卵率 | 計算 |
| へい死・淘汰の羽数 | 日報から |
| へい死率・21日の平均・倍率 | 計算 |
| 給餌の量・1羽あたりの給餌量 | 日報から・計算 |
| 最高・最低の温度、給水の異常 | 日報から |
| 異状の有無と内容 | 日報から |
| 読み取りの状態 | 確か/読み取りの確認(列の名前) |
| 翌日の目安の羽数 | 計算 |
翌日の日報には、目安の羽数をこう印刷します。
鶏舎 3 日付 10/29 日齢 412日 前日の飼養羽数 14,820羽
【すぐ知らせる羽数の目安】 へい死 4羽以上(21日平均 1.9羽/日 → 2倍 3.8羽 → 切り上げ 4羽)
※ 目安より少なくても、まとまって死んでいる・元気がない・とさかの色が悪いなど
いつもと違うときは、すぐ農場長に電話する
目安の羽数の横に、計算の元を書いています。 鶏舎の担当が目安の意味を知っていると、目安に届かなくても、いつもと違うと感じたときに知らせやすくなります。 目安は、知らせる判断を絞るためではなく、迷ったときの背中を押すためのものです。
この例では、21日平均の2倍から出した4羽が5羽より小さいので、 規則の8番に沿って目安は4羽です。印刷の文面には、プログラムが計算した値をそのまま入れ、手で書き直しません。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有フォルダ | Python がファイルの一覧を見て読み込む | 日報のスキャンを受け取る |
| Document AI | google-cloud-documentai の process_document | キーと値・チェック欄・信頼度を返す |
| 群の台帳 | Python が表計算のファイルを読み、飼養羽数の列だけを書き足す | 飼養羽数と除く日 |
| 集計表・一覧・翌日の日報 | Python が書き出す | 事務の担当と農場長が見る、日報を印刷する |
群の台帳に書き足すのは、読み取りの確認が残っていない鶏舎の飼養羽数だけです。 除く日や備考の列には書き込みません。台帳の書き換えは、農場長の手に残します。
人が確認する
- 「日報が届いていない」を見る … 事務の担当が鶏舎に取りに行きます
- 「読み取りの確認」を見る … 事務の担当が日報と見比べて直します。空欄は、鶏舎の担当に確かめてから値を入れます
- 「へい死の増え方」を見る … 農場長が、その日に鶏舎の担当から連絡があったか、鶏舎の様子を見たかを確かめます。連絡が無かったなら、すぐに鶏舎を見に行きます
- 「異状の記載」を見る … 内容を読み、必要なら獣医師に相談します
- 群の台帳の「除く日」を付ける … 空舎の日や設備の故障の日を、理由とともに付けます
3番目を省かないでください。 夕方の一覧は、その場の連絡が漏れていなかったかを確かめる二重の網です。連絡があった鶏舎は記録を残すだけで済み、無かった鶏舎は、この一覧が最初の気づきになります。
目標は、240枚をならして1枚2分です。 「読み取りの確認」になる日報が2割前後という想定で、それより多い鶏舎は、日報の汚れか書き方を見直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| ラベルが取れない列がある | 空欄か読み違い。「読み取りの確認」にし、0 で埋めない |
| 日付が前日のまま | 書き間違いの疑い。保存の日時と比べて「読み取りの確認」 |
| 同じ日報が二度保存された | 鶏舎番号と日付の重なりで見つけ、二度目は使わない |
| 群の台帳に導入・出荷が記録されていない | 飼養羽数が合わなくなる。計算を保留し、農場長に台帳を直してもらう |
| 空舎の鶏舎の日報 | 群の台帳で空舎なら、日報が無くても欠けとしない |
| 誘導換羽の期間中・ひなの群 | 防疫指針の留意事項に、換羽中の家きんやひなの死亡の扱いの例がある。台帳に「換羽中」「育すう中」の印を付け、一覧には出したうえで、扱いは家畜防疫員と取り決めた率で農場長が判断する |
| Document AI の呼び出しが失敗する | ファイルを残し、事務の担当が手で集計表に入れる。翌日の目安は前の日の値で印刷し、その旨を書く |
最後の行は、目安の羽数を空にしないためです。 読み取りが止まっても、前の日の目安を「前日の値」と書いて印刷すれば、鶏舎の担当がその場で見比べる手順は途切れません。
記録を残す
- 日報のスキャンと紙の原本
- Document AI が返した結果の JSON と、プロセッサの版
- 集計表と、事務の担当が直した値の記録(どの列を、何から何に直したか)
- 群の台帳の「除く日」と、その理由
- 印刷した翌日の日報の目安の羽数と、その計算の元
- 「へい死の増え方」に出た日と、その日の連絡の有無・農場長の対応
飼養衛生管理基準では、飼養する家きんの羽数、日齢、異状の有無と症状などの記録を作り、少なくとも1年間保存することが求められています。集計表と日報の原本は、この記録の一部になります。 保存の期間は1年を下限に、農場の決まりで決めます。
04実装レベルの3段階
この記事の想定は、半自動化です。 読み取りと計算、集計表と翌日の日報づくりまでを Python で行い、知らせる判断と通報、台帳の除く日は人が行います。 半自動化で、1枚6分が2分になります。 打ち直しと計算が「読み取りの確認」の直しだけになり、農場長は一覧に出た鶏舎だけを見ます。 本格構成でも、へい死は鶏舎の担当が数えて書きます。 数える人が鶏の様子を見ることそのものが、異状に気づく機会だからです。
05工数削減シミュレーション
導入後 240件 × 2分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 鶏舎が数棟から十数棟あり、鶏舎ごとの日報を紙に手書きしている採卵鶏の養鶏場。農場長や事務の担当が日報を表計算に打ち直して産卵率やへい死率を出しており、打ち直しが数日遅れることがある場合。鶏舎ごとの飼養羽数を群の台帳で持っている場合。
- 集卵のコンベヤーのカウンターや給餌の機器から値を直接データで取れている場合(読み取りが要らない)。鶏舎が1〜2棟で、日報を見れば全体が分かる場合。なお、高病原性鳥インフルエンザの特定症状に当たるかどうかの判断、家畜保健衛生所への通報、獣医師の診療はこの構成では行わず、通報はこの構成を待たずに行います。
07最小構成で試す方法
- 欄を枠で区切り「0も書く」決まりにした日報を、2棟で2週間使う
- その28枚を、汚れの多いもの・少ないものを混ぜてスキャンする
- Document AI のコンソールで Form Parser のプロセッサを作り、28枚を読み取る
- 返ってきたキーと値を、これまでどおり手で打ち直した集計表と突き合わせる
- ラベルが取れなかった欄と、読み違えた値の信頼度を見る
5番目で見るのは、すべてのラベルが毎回取れているかと、読み違いが信頼度の低い側に集まっているかです。 Form Parser は学習しないので、ラベルが取れない欄は様式の側を直します。
| 出てきた内容 | 判断 |
|---|---|
| ラベルが毎回取れ、読み違いが信頼度の低い側に集まった | Python の計算づくりに進む |
| 特定の欄のラベルが取れない | 枠とラベルの位置を見直す。値が空欄でないかを確かめる |
| チェック欄が取れない | 丸い選択の欄になっていないか確かめ、四角いチェック欄にする |
| 汚れで読めない値が多い | 書く場所と日報の置き方を見直す |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 夕方の一覧を通報の経路にしてしまう | 通報はその場で人が行う。一覧は二重の網 |
| 空欄のへい死を0として計算する | 空欄は書き忘れ。「0も書く」決まりにし、0 で埋めない |
| 値の空いた欄がラベルごと消える | 値の空いたキーと値は確実に取れない。取れない列を読み取りの確認に出す |
| 21日の平均に空舎の日が入る | 群の台帳の除く日を付け、通算21日で数える |
| 読み違いのまま飼養羽数を引き継ぐ | 読み取りの確認が残る鶏舎は計算を保留する |
| チェック欄が取れない | ラジオボタンは非対応。四角いチェック欄にする |
| 日本の地域で処理できない | Form Parser の地域に日本は無い。処理の地域を確かめる |
| 読み取りが止まって目安の羽数が空になる | 前の日の値を「前日の値」と書いて印刷する |
上の2行が、この構成の失敗のほとんどです。 どちらも、へい死の増え方に気づくのが遅れるという同じ結果になります。その場の連絡の手順を残すことと、空欄を0にしないことを、最初に決めておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 鶏舎ごとの集卵・へい死・給餌・温度の数字、異状の記載、担当の名字です。
- 通報の判断を自動にしない … 飼養衛生管理基準は、特定症状を見つけたときの直ちの通報を求めています。判断と通報は人が行い、この構成は目安と二重の網を用意するだけです
- 目安の羽数を「下限」として扱わせない … 目安に届かなくても、いつもと違うと感じたら知らせることを、日報の文面と教育で伝えます
- 記録の保存の期間を決める … 飼養衛生管理基準は、羽数・日齢・異状の有無などの記録を少なくとも1年保存することを求めています。日報の原本、スキャン、集計表のどれを残すかを決めます
- 処理する地域を確かめる … Form Parser の地域に日本はありません。日報を国外の地域で処理してよいかを、取引先との取り決めなども含めて確かめます
- 集計表を見られる人を絞る … 鶏舎ごとのへい死や産卵率は、取引に影響しうる情報です。農場長と事務の担当に絞ります
誤りが起きた場合のリスクは、へい死の増え方に気づくのが遅れることと、記録が欠けることの2つです。 前者は一覧を通報の経路と取り違えたときに、後者は空欄を0として扱ったときに起きます。その場の連絡の手順を残し、空欄を読み取りの確認に出すことで、どちらも防ぎます。
10まず何から始めるか
1週目:日報の様式と台帳の列を決める
欄を枠で区切り、四角いチェック欄にし、「0も書く」決まりを入れた日報を作ります。群の台帳に、空舎の日と特段の事情のあった日の列を足します。 あわせて、へい死を見つけたときの連絡の手順を、鶏舎の担当とあらためて確かめます。
2〜3週目:2棟で新しい日報を使う
新しい様式の日報を2棟で2週間使い、28枚を集めます。
4週目:コンソールで Form Parser を試す
28枚を読み取り、ラベルが毎回取れているか、読み違いが信頼度の低い側に集まっているかを確かめます。処理する地域も、ここで決めます。
2か月目: Python で読み取り、飼養羽数と率の計算、21日の平均を作り、事務の担当がこれまでどおり打ち直しながら、集計表と見比べます。 3か月目以降: 8棟に広げ、翌日の日報に目安の羽数を印刷し始めて、1枚6分が何分になったかを実測します。集計表が毎日その日のうちにそろい、鶏舎の担当が目安の羽数を見て判断している状態になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser がキーと値のペア・チェック欄・表・一般的な項目を OCR の文字とあわせて取り出すこと。推奨の版 pretrained-form-parser-v2.0-2022-11-10 が GA であること。言語の一覧で日本語(ja)に手書きの対応の印があること。対応する地域に日本が無いこと | Google Cloud: Processor list | 2026-10-28 |
| Form Parser が学習済みで、学習させられないこと。チェック欄がラジオボタンに対応しないこと。値の空いたキーと値のペアを確実には取り出せないこと。以前の JPEG の圧縮方式の TIFF に対応しないこと | Google Cloud: Form Parser | 2026-10-28 |
キーと値が formFields の fieldName と fieldValue で返ること。表の外のチェック欄の valueType が filled_checkbox / unfilled_checkbox になること。textAnchor が全文の位置を指し、要素ごとに confidence があること | Google Cloud: Handle the processing response | 2026-10-28 |
| スキャンは200 dpi 以上、300 dpi 以上で最もよい結果になること。対応するファイルの形式 | Google Cloud: Supported files | 2026-10-28 |
| 飼養衛生管理基準(鶏その他の家きん)で、飼養する家きんの羽数・日齢・異状の有無と症状などの記録を作り少なくとも1年間保存すること。特定症状を見つけたときは直ちに家畜保健衛生所に通報し、出荷と移動を行わないこと。死亡率の急激な上昇などの異状では獣医師の診療か家畜保健衛生所の指導を受けること(e-Gov 法令API。2026-10-01 施行の版) | e-Gov: 家畜伝染病予防法施行規則 | 2026-10-28 |
| 同一の家きん舎で1日の死亡率が対象期間(当日から遡って21日間。特段の事情のあった日と家きん舎が空だった日を除く通算21日間)の平均の2倍以上となっている旨の届出が対応の起点となること。留意事項で、翌日も2倍以上の死亡または5羽以上まとまった死亡を確認したときは届け出るよう指導するとされていること(令和7年10月1日一部変更の版) | 農林水産省: 高病原性鳥インフルエンザ及び低病原性鳥インフルエンザに関する特定家畜伝染病防疫指針 | 2026-10-28 |
特定症状の判断、通報の基準の当てはめ、記録の様式は、管轄の家畜保健衛生所と担当の獣医師に確かめてください。 本記事は公開の資料で確認できた範囲だけを扱っており、本記事の数値は例示です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2161)についてのご相談はこちらから。
