【要約】OpenCVとOCRを組み合わせてPDF書類内の丸がついた項目を自動判定してみた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
- ・LLM単体では「丸で囲まれている」という図形的状態を正確に抽出できない。
- ・単純な輪郭検出では、二重線や文字との重なりにより形状が崩れ、誤検知が発生する。
- ・テーブル(表)の枠線を丸印と誤認する問題がある。
- ・手書き文字が潰れることで、OCRの読み取りに欠損が生じる。
// Approach
1.OpenCVで画像を二値化(閾値180)。
2.findContoursで輪郭を抽出し、面積・アスペクト比・円形度・頂点数でフィルタリング。
3.テキスト周辺を上下左右25%拡張した領域のピクセル密度を計算。
4.密度差(閾値0.04)に基づき、最も密度が高い候補を選択。
5.OCR欠損時は線形回帰を用いて座標を推定(補間)。
6.取り消し線対策として、補間候補内で最も密度が低い箇所を正解とする。
// Result
特定フォーマットにおける選択肢の自動抽出で高い精度を実現。今後は、自治体等の多様なフォーマットへの汎用化、および文字マスク処理の高度化による精度向上を目指す。
Senior Engineer Insight
> LLMの限界を画像処理で補完する設計は、実務において極めて合理的。特に、形状の崩れを「ピクセル密度」という統計的指標で解決するアプローチは、現場の泥臭い課題に対する正攻法である。ただし、ピクセル密度法はテキスト位置の既知性を前提とするため、レイアウト変更への耐性は低い。実戦投入時は、スキャン解像度に応じた閾値の動的スケーリングと、文字マスク処理によるノイズ除去の高度化が、スケーラビリティ確保の要となる。