3

SCADA ソリューションを提供することで、多くの場合、PDF 形式または画像として提出される構造化制御図 (以下に示すフロー図のような visio) で指定されたエンド ユーザー仕様を取得します。

C# でこれらにアクセスするために、OpenCV ライブラリの 1 つを使用したいと考えていました。

私はテンプレートの認識について調べていましたが、機械学習アルゴリズムに入力して、ボックスと矢印の既知の特定の形状を認識できるように学習させるのは適切ではないようです。

私が調べたライブラリには、いくつかの polyedge 関数があります。ただし、以下の例からわかるように、要素間にスペースがない場合、システムが全体を 1 つの大きなポリゴンとして扱う危険性があります。

注釈は任意の 90 度回転である可能性があり、OCR を使用してそれらと長方形の内容を識別したいと考えています。

私はこれについて何の経験もありません. 複数のアプローチがある場合は、数学的な負担が最も少ないものを選択します。

更新: これは、私が話している画像の種類の例です。 SCDの作図例

対処すべき問題は次のとおりです。

  • セル内のテキストを含む赤い四角形の識別 (OCR)。
  • 方向と終点の注釈を含む矢印の識別。できれば線種。
  • コンポーネントのテンプレート マッチング。
  • テンプレートの一致が失敗した場合は、ポリライン エンティティまたは何かにフォールバックします。
4

2 に答える 2

3

これは活発な研究分野であり、この投稿で説明されているアルゴリズムと方法は基本的なものであり、完全にヒューリスティックであるか、これらの基本的な方法に基づいた、より優れた/より具体的なソリューションがあることを認識していると思います.

私が以前に使用し、同様の状況で良い結果を得たいくつかの方法を説明しようとします (電気グリッドの論理グラフを見つけるために単純な CAD 図面に取り組みました)。

セル内のテキストを含む赤い四角形の識別 (OCR)。

ドキュメントは高品質であり、現在の無料のOCRエンジン(Tesseractなど)を目的に合わせて簡単に適応させることができるため、これはソリューションにとって簡単です.90度、180度、...度、Tesseractのようなエンジンが検出それら (エンジンを構成する必要があり、場合によっては、検出された境界を抽出して OCR エンジンに個別に渡す必要があります) を最大限に高めるには、トレーニングと微調整が必​​要な場合があります。

コンポーネントのテンプレート マッチング。

ほとんどのテンプレート マッチング アルゴリズムは縮尺の影響を受けやすく、縮尺不変のアルゴリズムは非常に複雑であるため、ドキュメントの縮尺とサイズが異なる場合、単純なテンプレート マッチング アルゴリズムを使用しても正確な結果が得られるとは思えません。

SIFT や SURF などのアルゴリズムから優れた結果と独自の機能を得るために、形状の機能は非常に類似しておりまばらです。

輪郭を使用することをお勧めします。形状は単純で、コンポーネントはこれらの単純な形状を組み合わせて作成されます。輪郭を使用すると、これらの単純な形状 (長方形や三角形など) を見つけて、コンポーネントの形状に基づいて以前に収集したものと比較して輪郭を確認できます。 、たとえば、コンポーネントの 1 つが 4 つの長方形を組み合わせて作成されるため、相対的な輪郭を一緒に保持し、後で検出段階でドキュメントと照合することができます。

ネット上には輪郭分析に関する記事がたくさんあります。これらを参照することをお勧めします。輪郭を使用して単純な形状と複雑な形状を検出する方法の手がかりが得られます。

http://www.emgu.com/wiki/index.php/Shape_%28Triangle,_Rectangle,_Circle,_Line%29_Detection_in_CSharp

http://www.codeproject.com/Articles/196168/Contour-Analysis-for-Image-Recognition-in-C

http://opencv-code.com/tutorials/detecting-simple-shapes-in-an-image/

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html

ちなみに、EmguCV を使用してコードを c# に移植するのは簡単なので、心配する必要はありません。

方向と終点の注釈を含む矢印の識別。できれば線種。

線分を見つけるにはいくつかの方法があります (ハフ変換など)。この部分の主な問題は、他のコンポーネントも通常は線として検出されるため、最初にコンポーネントを見つけてドキュメントから削除すると、線を検出するのが大変になります。より簡単に、誤検出がはるかに少なくなります。

アプローチ

1- さまざまな色に基づいてドキュメントをレイヤー化し、必要なレイヤーごとに次のフェーズを実行します。

2- OCR を使用してテキストを検出および抽出し、テキスト領域を削除して、テキストなしでドキュメントを再作成します。

3-輪郭分析と収集されたコンポーネントデータベースに基づいてコンポーネントを検出し、検出されたコンポーネントを削除します (未知の形状は次のフェーズで誤検出を増加させるため、既知と未知のタイプの両方)。線のみが必要な検出

4-検出ライン

5-この時点で、検出された位置に基づいて、抽出されたコンポーネント、ライン、およびタグから論理グラフを作成できます

お役に立てれば

于 2014-09-21T06:52:49.667 に答える
2

4 つの質問すべてに答えを出すことはできませんが、最初の質問Identification of the red rectangles with texts in cells (OCR)はさほど難しくないように思えます。この質問に対する私の解決策は次のとおりです。

ステップ 1: カラー画像を赤、青、緑の 3 つのレイヤーに分離し、次の操作には赤のレイヤーのみを使用します。

ステップ 2: 赤のレイヤーの 2 値化。

ステップ 3: 2 値化結果の連結成分分析、および各連結成分の統計 (ブロブの幅、ブロブの高さなど) を保持します。

ステップ 4: 大きな BLOB を破棄し、テキストに対応する BLOB のみを保持します。また、レイアウト情報を使用して、誤ったテキスト BLOB を破棄します (たとえば、テキストは常に大きな BLOB にあり、テキスト BLOB は横書きスタイルなど)。

ステップ 5: テクスチャ コンポーネントで OCR を実行します。OCR を実行すると、各ブロブから信頼レベルが得られます。これは、テキスト コンポーネントであるかどうかにかかわらず、検証に使用できます。

于 2014-09-18T08:36:10.090 に答える