チェックボックス/空の丸(署名/ストライク/ティック用)を備えたテストのようなドキュメントをスキャンしていると仮定しましょう。既にトリミングされたチェックボックス/サークルがチェック/署名/ストライク/チェックされているかどうかを確認する適切な方法は何ですか?
テスト ユーザーに領域を完全にマークするように強制する場合は、チェックボックス/円の位置と、白以外のピクセルの量を数えることだけで十分です (そうでしょうか?)。チェックボックス / 丸がチェックされているか、チェックされているか (X)?
これは C# のプロジェクトの一部になるため、.net / c/c++ 用のコードまたは準備が整ったライブラリを歓迎します。
3 に答える
この回答が短くて申し訳ありませんが、チェックボックス内の領域でocrシステムを実行できます。
何も返さない場合は、チェックされていないことがわかります。
何かが返された場合は、それを可能性のある大きなホワイトリストと比較してから、不確実性にフラグを立てます.
@danが提案したエラー処理も使用できます
これが平均をとるよりも堅牢である理由は、高い確実性でチェックされていないかどうかを判断できることです。最小限の方法で認識できるマークを探しているため、そこに何もない場合は間違いなくチェックされません。あとは、チェックとして使用できる文字とマークの適切なホワイト リストを見つけるだけです (箱の外で考えると、ocr システムは波線に対して「a」を返す場合がありますが、それは肯定的な応答です)。 . 明確にするために、平均をとるだけの問題は、チェック ボックスの暗さの増加が肯定的な結果をもたらすことです。これは常に当てはまるとは限りません。誰かがマークを付けてから消去した場合でも、ボックス内の闇が増えます。
最後に、かなり高度な OCR システムが数多く出回っていることを付け加えておきます。ランダムな文字よりも優れたケースに一致する追加のトレーニングデータセットを提供できるものを見つけるのに苦労することはないと思います.
アルゴリズムは次のようになります。
- 各チェックボックスを見つけます(すでにあることは承知しています)
- すべてのピクセルの色の平均を計算する
- 特定のしきい値を超えている場合はマークされ、それを下回っている場合はマークが解除されます
ただし、いくつかのチェックを追加する必要があります。
- 複数がしきい値を超えていますか? -> 人間にチェックさせます。学生は最初に何かにチェックを入れてから、別のフィールドに変更することができます。
- しきい値を超えるものはありませんか? -> 実際に何もチェックされていないことを人間に確認させます。
この回答の重要な部分は次のとおりだと思います
。アルゴリズムが不明な場合は、手動処理用にフラグを立ててください。
チェックボックス認識を提供する高性能製品のほとんどは、ある種のベル分布曲線を使用して、ボックスが実際にチェックされる可能性を計算します。「データ」が多すぎると、ユーザーが気が変わってこれを走り書きした可能性が高くなります。箱; 少なすぎると、ユーザーが下のボックスにチェックを入れ、次のボックス領域を横切る前にペンを持ち上げなかったために残された「尾」である可能性があります。
追加のロジックを適用して、複数のボックスが許可されている場合 (例: 車を所有していますか / 自転車も所有していますか) と、正しいボックスが 1 つしかない状況 (例: あなたは男性か、または女性)。これはアプリに役立つはずです。より明白なエラーを除外します。