問題タブ [icr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - この画像で特定のフォーム フィールドを見つける方法
ブラジルでは、病院で新生児ごとに(手で)記入された標準フォーム。このフォームは「DNV」と呼ばれます (ポルトガル語の「Born Alive Declaration」にちなんで)。「DO」と呼ばれる形もあります(ポルトガル語で「Decease Declaration」を意味します)。私の州では、病院がこれらのフォームを 100 万枚近く、私が勤務する機関に送り、そこで「人口動態統計」と呼ばれるデータベースを計算しています。その作業を自動化できないか調査中です。商用ICRソリューションは多額の費用がかかるため、担当者は誰もそれを内部で実行できるとは信じていないため、草の根プロジェクトです.
私はいくつかの病院から送られてきた 10 万件の PDF ファイルを手に入れ、単純なアルゴリズムを使用してそれらを 2 つのタイプ (DNV または DO) のいずれかに分類することができました。まず、ドキュメントのタイプを含む黒い四角形を見つけます (cv2.findContours
および少しヒューリスティック)、OCR を適用します ( pytesseract.image_to_string
)。20k の「死亡宣言」(DO) と 80k の「生存宣言」を見つけました。
同様のアルゴリズムを使用して、黒い四角形の右側の数字を OCR し、55,000 フォームの画像を、これらのドキュメントに基づいてプロのタイピストが入力したデータベース内の対応するレコードにリンクすることができました。
ここで、数字を認識するための機械学習を少し試すために、日付フィールド (赤) を見つけたいと思います。フィールドは以下で強調表示されています。
最初に、これをテンプレートとして使用して「テンプレート マッチング」アルゴリズムを試しました。
これはうまく機能しますが、テンプレートとフォームの画像が同じ縮尺と角度である場合に限られます。このcv2.matchTemplate
方法は、スケールに非常に敏感です。SURF を使用して特徴マッチング アルゴリズムを試しましたが、機能させるのに苦労しています (やり過ぎのように感じます)。
左側の黒い長方形を見つけるのは簡単なので、数字を見つけるためにいくつかのオプションを考えています:
黒い長方形を元にスケールと角度を正規化して試してみ
cv2.matchTemplate
ます。輪郭を見つけようとし、それを使用して単純化し
cv2.approxPolyDP
、数字の位置を推測します。
私の質問は次のとおりです。問題に対処する方法について何かアドバイスはありますか? 入力が解像度/角度に関して正規化されていない場合、このフォーム フィールドを見つけるために他のどのアルゴリズムを使用できますか?
[アップデート #1]
(x, y, w, h) を左側の黒い四角形の位置とサイズとして指定すると、妥当な確信を持って検索を絞り込むことができます。
ランダムサンプルを試すと、この式は次のようになります。
[アップデート #2]
erode
とについて知ったばかりですdilate
が、今では彼らは私の新しい親友です。
ところで、私はコンピュータービジョンについて手がかりがありません。グーグルに戻りましょう...
image-processing - 画像内のボックスにテキストが含まれているかどうかを確認する方法は?
テキストが実際に手書きされている、これに似た表があります。各フィールドが入力されているかどうかを確認できるようにしたいのですが、各フィールドの内容を理解したり認識したりする必要はありません。フィールドが入力されたことを検出できるようにする必要があるだけです。
人々はスキャナーでページをスキャンする必要があり、プログラムはフィールドを検出し、本質的にコンテンツがあるかどうかを確認する必要があります。誰かがアイデアを持っているか、簡単な解決策を知っていますか? ICR か OCR を使おうと思ったのですが、OCR は手書きのテキストを検出できず、ICR はお金を払ってでも良いのですが、あまりにも良いです。