2009-07-15 15 views
8

Tôi đang cố gắng sử dụng MODI để OCR một chương trình của cửa sổ. Nó hoạt động tốt cho ảnh chụp màn hình tôi lấy lập trình sử dụng win32 interop như thế này:.NET OCRing một Hình ảnh

Hình ảnh này sau đó được lưu vào một tập tin và chạy qua MODI như thế này:

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(); 
    } 

phần này hoạt động tốt, tuy nhiên, Tôi không muốn OCR toàn bộ ảnh chụp màn hình, chỉ là một phần của nó. Tôi thử cắt xén hình ảnh theo chương trình như sau:

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; 
    } 

và sau đó OCRing hình ảnh nhỏ hơn này, tuy nhiên MODI ném ngoại lệ; 'Lỗi chạy OCR', mã lỗi là -959967087.

Tại sao MODI có thể xử lý bitmap gốc chứ không phải phiên bản nhỏ hơn được lấy từ nó?

Trả lời

7

Dường như câu trả lời là đưa cho MODI một canvas lớn hơn. Tôi cũng đang cố gắng chụp ảnh màn hình điều khiển và OCR nó và chạy vào cùng một vấn đề. Cuối cùng tôi lấy hình ảnh của điều khiển, sao chép hình ảnh vào một bitmap lớn hơn và OCRed bitmap lớn hơn.

Một vấn đề khác mà tôi thấy là bạn phải có phần mở rộng thích hợp cho tệp hình ảnh của mình. Nói cách khác, .tmp không cắt nó.

tôi vẫn tiếp tục công việc của việc tạo ra một nguồn lớn hơn bên trong phương pháp OCR của tôi, mà trông giống như thế này (tôi đối phó trực tiếp với các đối tượng hình ảnh):

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; 
} 

Tôi không chắc chắn chính xác những gì kích thước tối thiểu là , nhưng nó xuất hiện như là mặc dù 1024 x 768 làm các trick.

+0

mọi mã nguồn đầy đủ? – Kiquenet

1

modi ocr chỉ hoạt động với tôi. cố gắng lưu hình ảnh trong "tif".

xin lỗi tiếng anh xấu của tôi

0

Tôi gặp vấn đề tương tự "OCR đang chạy sự cố" với một số hình ảnh. Tôi đã thu nhỏ lại hình ảnh (trong trường hợp của tôi là 50%), tức là giảm kích thước của nó và thì đấy! nó hoạt động!

0

tôi đã cùng một vấn đề trong khi sử dụng

doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); 

trên một tập tin tiff đó là 2400x2496. Thay đổi kích thước thành 50% (giảm kích thước) đã khắc phục sự cố và phương pháp không ném ngoại lệ nữa, tuy nhiên, nó không nhận dạng được văn bản như phát hiện "relerence" thay vì "reference" hoặc "712017" thay vì "712517" . Tôi tiếp tục cố gắng kích thước hình ảnh khác nhau nhưng tất cả đều có cùng một vấn đề, cho đến khi tôi đã thay đổi lệnh để

doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); 

điều này có nghĩa rằng tôi không muốn nó để phát hiện các định hướng và không để sửa chữa bất kỳ skewing. Bây giờ lệnh hoạt động tốt trên tất cả các hình ảnh bao gồm cả tiff 2400x2496.

Hope this helps ra người phải đối mặt với cùng một vấn đề

3

có các bài viết trong luồng này đã giúp tôi gettin nó để làm việc, ở đây những gì tôi cần phải thêm:

đã cố gắng để tải về hình ảnh (những cái nhỏ) sau đó ocr ...

-khi xử lý hình ảnh, có vẻ như kích thước theyr phải là sức mạnh của 2! (đã có thể OCR hình ảnh: 512x512, 128x128, 256x64 .. kích thước khác chủ yếu là thất bại (như 1103x334))

  • nền trong suốt cũng làm rắc rối. Tôi nhận được kết quả tốt nhất khi tạo một tif mới với ranh giới powerof2, nền trắng, dán hình ảnh đã tải xuống vào đó, lưu lại.

  • co giãn hình ảnh đã không thành công đối với tôi, vì OCR là nhận được kết quả sai, đặc biệt cho các ký tự "Đức" like "ü"

  • cuối cùng tôi cũng được sử dụng: doc.OCR (MODI.MiLANGUAGES .miLANG_ENGLISH, sai, sai);

  • sử dụng Modi từ văn phòng 2003

lời chào

womd

1
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); 

Có nghĩa là tôi không muốn nó để phát hiện các định hướng và không sửa chữa bất kỳ skewing. Bây giờ lệnh hoạt động tốt trên tất cả các hình ảnh bao gồm cả tiff 2400x2496.

Nhưng hình ảnh phải ở trong .tif.

Hy vọng điều này sẽ giúp mọi người đối mặt với cùng một vấn đề.

0

điều đã giải quyết được tình huống của tôi là sử dụng trình chỉnh sửa ảnh (Paint.NET) và sử dụng hiệu ứng làm sắc nét ở mức tối đa.

Tôi cũng đã sử dụng: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);

Các vấn đề liên quan