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

나는 희망한다.