Использование Modi к OCR в C #. Нужно читать изображения из памяти, а не диск
Вопрос
Я пытаюсь использовать Modi для Perfom OCR на растровых изображениях, у меня уже есть в памяти. Я не могу найти это решение для этого, как все примеры, которые я нахожу, используя метод создания для захвата изображения с диска и готовит его для OCR., Однако у меня уже есть изображение в памяти и записи и чтении I до и с диска потребляет слишком много времени.
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;
Решение
Вы не можете. Есть только одна версия создания, и она принимает файл. Сделайте файл Temp. Сохраните изображение в него. Удалите файл 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 на Wikipedia
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"));
}