En utilisant Modi OCR en C #. Vous avez besoin de lire des images de la mémoire, et non du disque
Question
Je suis en train d'utiliser Modi perfom OCR sur bitmaps je l'ai déjà en mémoire. Je ne peux pas sembler trouver une solution à ce que tous les exemples que je trouve utiliser la méthode create pour saisir l'image à partir du disque et prépare pour l'OCR. Cependant, je l'ai déjà l'image sur la mémoire et l'écriture et la lecture i et à partir du disque consomme trop de temps.
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;
La solution
Vous ne pouvez pas. Il n'y a qu'une seule version de Créer et il faut un fichier. Faire un fichier temporaire. Enregistrez l'image en elle. Supprimez le fichier temp. Utilisez Path.GetTempFileName () pour le faire.
string file = Path.GetTempFileName();
try {
SaveImageToFile(image, file); // you decide how to best do this
md.Create(file);
// etc.
}
finally {
File.Delete(file);
}
Autres conseils
Can cette MODI.Document classe lu dans un flux? Comme le
Image.FromStream(YourStream);
De cette façon, vous pouvez créer un flux de mémoire et lire.
Vous pouvez vérifier les informations MODI / OCR sur wikipedia
en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging
en.wikipedia.org/wiki/List_of_optical_character_recognition_software
Code OCR pour Simplest une image en utilisant la fonctionnalité d'imagerie de Microsoft Office (nécessite MS-Office 2007 ou plus tard, les composants d'imagerie doivent être installés et MODI doivent être ajoutées aux références).
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;
}
L'appel peut être fonction:
private void button6_Click(object sender, EventArgs e)
{
MessageBox.Show ( OCR ("C:\\temp\\in.tif"));
}