【要約】OCRが苦手なノイズだらけの数字認識を「グリッド検出」と「Noise2Cleanノイズ除去」で実装した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
クロジカのAI Labが、介護保険の請求業務における帳票の自動データ化に取り組んだ。既存のクラウドOCR(Azure DI)では、以下の理由によりマス内の数字の読み取りに失敗するという課題に直面した。
- ・マスが小さく、罫線が細いため、文字と混同しやすい。
- ・土日や祝日の列に網掛け模様が印刷されており、数字を阻害する。
- ・スキャン時の傾きや、手書きの線が罫線検出を妨害する。
// Approach
開発チームは、クラウドOCRと自前モデルを組み合わせた、5フェーズのパイプラインを構築した。具体的な解決策は以下の通りである。
- ・グリッド検出: Azure DIの文字座標を基準に格子を推定。その後、1次元プロファイルを用いた「櫛(くし)の一括フィット」により、罫線へ正確に吸着させる。
- ・傾き補正: HoughLinesPを用いてスキャン時の微小な傾きを推定。2パス構成で画像を回転させ、グリッドを再検出する。
- ・ノイズ除去: Noise2Clean方式のUNetを採用。合成した劣化画像(太さ変化、掠れ、網掛け)を用いて、網掛けのみを除去する学習を行う。
- ・数字認識: 28×28に整えられた画像を、事前学習済みのCNNで分類する。
// Result
開発チームは、網掛け模様や細い罫線が存在する過酷な条件下での数字認識を実現した。
- ・網掛けを消しつつ、細い手書き線を維持するデノイザーを構築。
- ・罫線への吸着と傾き補正により、正確なマス目の切り出しを可能にした。
- ・推論をCPUのみで動作させ、実用的な処理速度を確保した。
- ・今後は、合計回数などの他の数値項目への適用を予定している。
Senior Engineer Insight
> クラウドOCRを「位置決めのアンカー」として使い、重い処理を自前モデルに任せる設計は極めて合理的だ。合成データによる学習戦略も、実データ不足を補う実戦的な解法である。特に、櫛の一括フィットによる局所ノイズの回避や、BCEとDice損失の併用による細い線の維持など、現場の泥臭い課題に対する解法が非常に洗練されている。運用コストを抑えるためのCPU推論への配慮も、実戦投入を強く意識した優れた設計と言える。