質問
ようにしている利用モディにOCRウィンドウのプログラム。での動作画面しむプログラムを使用win32interopのようになります:
public string SaveScreenShotToFile()
{
RECT rc;
GetWindowRect(_hWnd, out rc);
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
Bitmap bmp = new Bitmap(width, height);
Graphics gfxBmp = Graphics.FromImage(bmp);
IntPtr hdcBitmap = gfxBmp.GetHdc();
PrintWindow(_hWnd, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
gfxBmp.Dispose();
string fileName = @"c:\temp\screenshots\" + Guid.NewGuid().ToString() + ".bmp";
bmp.Save(fileName);
return fileName;
}
この画像はその後に保存されたファイルからモディのようになります:
private string GetTextFromImage(string fileName)
{
MODI.Document doc = new MODI.DocumentClass();
doc.Create(fileName);
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
MODI.Image img = (MODI.Image)doc.Images[0];
MODI.Layout layout = img.Layout;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < layout.Words.Count; i++)
{
MODI.Word word = (MODI.Word)layout.Words[i];
sb.Append(word.Text);
sb.Append(" ");
}
if (sb.Length > 1)
sb.Length--;
return sb.ToString();
}
この作品は、しかし、いOCR全体のスクリーンショットだ部分です。ようにしてい作画像のプログラムのようになります:
private string SaveToCroppedImage(Bitmap original)
{
Bitmap result = original.Clone(new Rectangle(0, 0, 250, 250), original.PixelFormat);
var fileName = "c:\\" + Guid.NewGuid().ToString() + ".bmp";
result.Save(fileName, original.RawFormat);
return fileName;
}
そのOCRingこの小さい画像しかし、モディ例外をスローします;'OCR走行エラーのエラーコードが-959967087.
できないのはなぜでモディの独自のビットマップの小型取りしているか確認してください。
解決
答えがMODIに大きなキャンバスを与えることであるかのように見えます。私はまた、制御およびOCRそれのスクリーンショットを取得しようとすると、同じ問題に遭遇しました。最後に、私は、コントロールのイメージを取り、より大きなビットマップに画像をコピーして、より大きなビットマップをOCRed。
私が見つけたもう一つの問題は、あなたのイメージファイルの適切な拡張子を持たなければならないということでした。言い換えれば、.tmpファイルは、それをカットしていません。
私は、この(私はImageオブジェクトと直接取引)のようになります私のOCR方法、内部の大きなソースを作成する作業を保ちました
public static string ExtractText(this Image image)
{
var tmpFile = Path.GetTempFileName();
string text;
try
{
var bmp = new Bitmap(Math.Max(image.Width, 1024), Math.Max(image.Height, 768));
var gfxResize = Graphics.FromImage(bmp);
gfxResize.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height));
bmp.Save(tmpFile + ".bmp", ImageFormat.Bmp);
var doc = new MODI.Document();
doc.Create(tmpFile + ".bmp");
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
var img = (MODI.Image)doc.Images[0];
var layout = img.Layout;
text = layout.Text;
}
finally
{
File.Delete(tmpFile);
File.Delete(tmpFile + ".bmp");
}
return text;
}
私は最小サイズが正確にわからないんだけど、1024×768は、トリックを行いますかのようにそれが表示されます。
他のヒント
あり、このスレッド感ゲので、ここにさせていただくことになった追加:
したい画像をダウンロード(小)その後ocr...
-加工した場合画像のようでtheyrスループットバッファのサイズする電源の2!(ことができたocrの画像:512x512,128x128,256x64..その他のサイズに多様な1103x334))
透明背景も作ります。私は最良の結果を新規作成時tifとpowerof2境界、白背景貼り付け、ダウンロードした画像がとても早いことが気に入っています。
スケールの画像かったが成功しない私にとって、OCRが間違った結果、"ドイツ"に登場するキャラクターのように"ü"
最終的にも使っていました:doc.OCR(モディ.MiLANGUAGES.miLANG_ENGLISH場合は、falseの場合、false);
使用モディオフィス2003年
ご挨拶
womd
MODIのOCRは私だけでTIF取り組んでいます。 "TIF" に画像を保存しようとします。
申し訳ありませんが、私の悪い英語
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);
私はそれが向きを検出し、任意のゆがみを修正しないようにしたくないことを意味しています。今のコマンドは、2400x2496のTIFFなど、すべての画像に正常に動作します。
しかし、画像をtifファイルにする必要があります。
が、これは同じ問題に直面して人々を助けることを望みます。
私はいくつかの画像と同じ問題「OCR実行中の問題」を持っていました。 Iは、再スケーリングされた(50%私の場合)画像、すなわち、そのサイズと出来上がりを低減しました!それは動作します!
私は同じ問題を持っていた。
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
2400x2496たTIFFファイルに。しかし、問題は、(サイズを小さくする)50%にそれを修正リサイズ及び方法はもはや例外をスローしないし、それが誤って代わりに「712517」の代わりに「参照」の「relerence」または「712017」を検出するようにテキストを認識しました。 。私は
にコマンドを変更するまで、私は別の画像サイズをしようとして保たれますが、それらはすべて同じ問題を持っていましたdoc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);
私はそれが向きを検出したくないし、任意のゆがみを修正しないことを意味しています。今のコマンドは、2400x2496のTIFFなど、すべての画像に正常に動作します。
希望はこれが同じ問題に直面して人々を助け
何がフォトエディタ(Paint.NET)を使用して、最大でシャープ効果を使用した私の状況を解決します。
私も使用: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH、偽、偽);