2017-02-16 8 views
0

私はGhostscriptとTesseract 3.0.2を使ってテキストをpdf形式で認識しようとしています。PDFオーダーでのテキストの認識方法は?

pdfにはテキストが含まれておらずイメージだけが含まれているため、itextsharpは使用できません。

まず、画像のpdfページを変換してから、テキストを取得しようとします。

最初のテストでは、 "preserve_interword_spaces"変数をtrueに設定してすべてのテキストを取得しようとしましたが、テーブルの "Articolo"列の情報が欠落しています。 "Consegna"のような列を取得しようとしたが、いくつかの "/"記号がない。
私はこのコードを使用しています

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

誰かが画像全体のテキストを取得するために私を助けてもらえますか? ありがとうございます。

Thisは画像リンク(Temp2.​​png)です。

enter image description here

答えて

0

TesseractAndCubeにEngineModeを設定してください。それは他の単語よりも多くの単語を検出します。

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

それ以外の場合は、PDFをXPSファイルに変換してください。次に、XPSファイルから単語を抽出することができます。このように:

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

私は役に立つと思います。

関連する問題