باستخدام MODI إلى OCR في C#. تحتاج إلى قراءة الصور من الذاكرة ، وليس القرص

StackOverflow https://stackoverflow.com/questions/4081335

  •  28-09-2019
  •  | 
  •  

سؤال

أحاول استخدام MODI ل PERFOM OCR على نقرة الصورة النقطية التي لدي بالفعل في الذاكرة. لا يمكنني العثور على حل لهذا لأن جميع الأمثلة التي أجدها تستخدم طريقة إنشاء للاستيلاء على الصورة من القرص وإعدادها لـ OCR. ومع ذلك ، لدي بالفعل الصورة على الذاكرة والكتابة والقراءة من وإلى القرص يستهلك الكثير من الوقت.

Bitmap bmp = ...
//Instantiate the MODI.Document object
MODI.Document md = new MODI.Document();
//The Create method grabs the picture from disk snd prepares for OCR.          
md.Create("C:\\bmp.gif"); //but I don't want to read from disk :(
//Do the OCR.
md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
//Get the first (and only image)
MODI.Image image = (MODI.Image)md.Images[0];
//Get the layout.
MODI.Layout layout = image.Layout;
هل كانت مفيدة؟

المحلول

لا يمكنك. لا يوجد سوى إصدار واحد من Create ويستغرق ملفًا. قم بعمل ملف مؤقت. احفظ الصورة فيها. حذف ملف temp. استخدم path.getTempFilename () للقيام بذلك.

string file = Path.GetTempFileName();
try {
    SaveImageToFile(image, file); // you decide how to best do this
    md.Create(file);
    // etc.
}
finally {
    File.Delete(file);
}

نصائح أخرى

هل يمكن أن تقرأ فئة modi.document هذه من دفق؟ مثل ال

Image.FromStream(YourStream);

بهذه الطريقة يمكنك إنشاء دفق ذاكرة وقراءة منه.

يمكنك التحقق من معلومات MODI / OCR على ويكيبيديا

en.wikipedia.org/wiki/microsoft_office_document_imaging

en.wikipedia.org/wiki/list_of_optical_character_recognition_software

أبسط رمز لـ OCR صورة باستخدام وظيفة التصوير في Microsoft Office (تتطلب MS-Office 2007 أو أحدث ، يجب تثبيت مكونات التصوير ويجب إضافة MODI إلى المراجع).

private string OCR ( string fileToOCR)

{

MODI.Document md = new MODI.Document();

md.Create(fileToOCR);

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

MODI.Image img = (MODI.Image) md.Images[0];

MODI.Layout layout = img.Layout;

layout = img.Layout;

string result = layout.Text;

md.Close (false);


return result; 

}

يمكن أن تكون وظيفة الاتصال:

private void button6_Click(object sender, EventArgs e)

{

MessageBox.Show ( OCR ("C:\\temp\\in.tif")); 

} 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top