2017-02-16 3 views
0

J'essaie de reconnaître du texte dans un ordre pdf avec Ghostscript et Tesseract 3.0.2.Comment reconnaître du texte dans un ordre PDF?

Je ne peux pas utiliser itextsharp car le pdf ne contient pas de texte mais juste une image. D'abord, je convertis la page pdf dans une image et j'essaye d'obtenir le texte.

Dans un premier test, j'ai essayé d'obtenir tout le texte avec la variable "preserve_interword_spaces" définie sur true, mais je vois que l'information dans la colonne "Articolo" dans le tableau est manquante. Après avoir essayé d'obtenir une colonne comme "Consegna", mais certains symboles "/" manquent.
J'ai utilisé ce code:

string sDLLPath = @".\gsdll64.dll"; 
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(sDLLPath); 
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer()) 
{ 
    rasterizer.Open(path_file_pdf, gvi, false); 
    int dpi_x = 600; 
    int dpi_y = 600; 
    for (int i = 1; i <= rasterizer.PageCount; i++) 
    { 
     Image imgg = rasterizer.GetPage(dpi_x, dpi_y, i); 

     imgg.Save(".\\Temp2.png", System.Drawing.Imaging.ImageFormat.Png); 

     using (var tEngine = new TesseractEngine(@".\tessdata", "ita", EngineMode.Default)) 
     { 
      tEngine.SetVariable("tessedit_char_whitelist", "/"); 
      using (var img = Pix.LoadFromFile(".\\Temp2.png")) 
      { 
       Tesseract.Rect region = new Tesseract.Rect(4120, 3215, 550, 840); 
       using (var page = tEngine.Process(img, region, PageSegMode.SingleBlock)) 
       { 
        var text = page.GetText(); 
        Console.WriteLine(text); 
        Console.WriteLine(page.GetMeanConfidence()); 
        Console.ReadKey(); 
       } 
      } 
     } 
    } 
} 

Quelqu'un pourrait-il me aider à obtenir le texte intégral dans l'image? Merci d'avance

This est le lien de l'image (Temp2.png).

enter image description here

Répondre

0

Essayez de mettre EngineMode à TesseractAndCube. Il détecte plus de mot que l'autre.

using (var engine = new TesseractEngine(@".\tessdata", "ita", EngineMode.TesseractAndCube)) 
{ 
    using (var img = Pix.LoadFromFile(sourceFilePath)) 
    { 
     using (var page = engine.Process(img)) 
     { 
      var text = page.GetText();       
     } 
    } 
} 

Sinon, essayez de convertir votre fichier PDF en fichier XPS. Ensuite, vous serez en mesure d'extraire des mots du fichier XPS. Comme ceci:

XpsDocument xpsDocument = new XpsDocument(pSourceDocPath, FileAccess.Read); 
IXpsFixedDocumentSequenceReader fixedDocSeqReader = xpsDocument.FixedDocumentSequenceReader; 
if (fixedDocSeqReader == null) return null; 

const string uniStr = "UnicodeString"; 
const string glyphs = "Glyphs"; 
IXpsFixedDocumentReader document = fixedDocSeqReader.FixedDocuments[0]; 
FixedDocumentSequence sequence = xpsDocument.GetFixedDocumentSequence(); 

for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount) 
{ 
    IXpsFixedPageReader page = document.FixedPages[pageCount]; 
    XmlReader pageContentReader = page.XmlReader; 

    if (pageContentReader == null) return null; 
    while (pageContentReader.Read()) 
    { 
     if (pageContentReader.Name != glyphs) continue; 
     if (!pageContentReader.HasAttributes) continue; 
     if (pageContentReader.GetAttribute(uniStr) != null) 
     { 
      string words = uniStr; 
     } 
    } 
} 

J'espère que cela aide.