7

Sikuli の画像認識を C# 内で使用する方法を見つけようとしています。スクリプト言語が少し遅いため、Sikuli 自体は使用したくありません。また、.NET C# アプリの途中で Java ブリッジを導入したくないためです。

したがって、画面の領域を表すビットマップがあります (この領域を BUTTON1 と呼びます)。画面のレイアウトが少し変わっているか、デスクトップ上で画面が移動されている可能性があるため、直接の位置を使用することはできません。まず、BUTTON1 の現在の位置がライブ画面内のどこにあるかを見つける必要があります。(これの写真を投稿しようとしましたが、私は新しいユーザーなのでできないと思います...説明が明確になることを願っています...)

Sikuli は裏で OpenCV を使用していると思います。オープン ソースなので、リバース エンジニアリングを行い、OpenCV で行っていることを理解して、代わりに Emgu.CV に実装できると思いますが、私の Java はあまり強力ではありません。

これを示す例を探しましたが、すべての例は非常に単純 (つまり、一時停止の標識を認識する方法) または非常に複雑 (つまり、顔認識を行う方法) のいずれかです...そして多分私はただ密集していますが、私はできますこれを行う方法の論理にジャンプしているようには見えません。

また、さまざまな画像操作ルーチンのすべてが実際にはプロセッサを集中的に使用するのではないかと心配しており、これをできるだけ軽量にしたいと思っています (実際には、画面上で見つけようとしているボタンやフィールドがたくさんあるかもしれません...)

したがって、代わりにこれを行うことを考えている方法は次のとおりです。

A) ビットマップをバイト配列に変換し、ブルート フォース検索を実行します。(私はその部分を行う方法を知っています)。その後

B)画像処理を使用する代わりに、見つけたバイト配列位置を使用して画面位置を計算します(これを行う方法が完全にはわかりません)。

それは完全にクレイジーですか?Aforge.Net または Emgu.CV を使用してこれを行う方法の簡単な例はありますか? (または、上記のステップ B を具体化する方法は...?)

ありがとう!

4

1 に答える 1

1

一般的に言えば、基本的なオブジェクト認識が必要なようです。私は SIKULI の経験はありませんが、オブジェクト認識を行う方法はいくつかあります (エッジ ベースのテンプレート マッチングなど)。そうは言っても、まっすぐなヒストグラムマッチングだけで行けるかもしれません。

http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx

そのページには、AForge.net を使用して画像のヒストグラムを取得する方法が示されているはずです。次のようなものを使用して、ブルートフォース検索を行うだけです。

Bitmap ImageSearchingWithin=new Bitmap("Location of image"); //or just load from a screenshot or whatever
for (int x = 0; x < ImageSearchingWithin.Width - WidthOfImageSearchingFor; ++x)
{
    for (int y = 0; y < ImageSearchingWithin.Height - HeightOfImageSearchingFor; ++y)
    {
        Bitmap MySmallViewOfImage = ImageSearchingWithin.Clone(new Rectangle(x, y, WidthOfImageSearchingFor, HeightOfImageSearchingFor), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    }
}

次に、新しく作成されたビットマップのヒストグラムを、元の画像から計算したものと比較します (マッチングに関して最も近い領域は、BUTTON1 の領域として選択するものです)。これは最も洗練されたソリューションではありませんが、必要に応じて機能する可能性があります。そうしないと、より難しいテクニックを使用することになります (もちろん、その時点でもっと簡単なことを忘れている可能性があります)。

于 2011-07-23T20:37:54.123 に答える