2013-03-04 3 views
1

Кто-то работает с fineReader abbyy sdk 10? Мне любопытно, возможно ли даже получить шанс успеха при добыче данных после обработки изображений.ABBYY FineReader SDK как определить минимальный коэффициент распознавания

Для сценария у нас есть рабочий процесс для сбора данных из изображений, и если признанный результат меньше 90%, мы помещаем нашу партию на визуальную проверку/исправление.

Для обработки SDk Я использую .net - его не так важно знать, но ... только для в случае

Как я могу добиться этого числа? Спасибо за совет

+0

хорошо, просто сделайте это немного понятным. То, что я ищу, - это сводка доверия к коду для всего сканирования - есть ли возможность fnc для объекта Engine? в выходном файле RAW есть уверенность для каждого символа, но его слишком подробно ... –

+0

, вероятно, вы должны спросить об этом на форуме ABBYY здесь: http://forum.ocrsdk.com – Tomato

ответ

0

ИМХО, такого значения «глобальной уверенности» нет, но вы могли бы легко получить это, взяв доверие каждого персонажа и усреднив итог. Тем не менее, я думаю, вы должны направить свой запрос на форум ABBYY или поддержать адрес электронной почты, чтобы узнать, что их совет.

Невозможно рассказать вам, какой уровень уверенности я мог бы получить, если бы использовал двигатель, потому что все это зависит от качества изображения, размера шрифта и т. Д. как «средний документ», который промышленность использует для создания своих данных.

Удачи вам!

1

Не существует свойства «Глобальное признание доверия». Предполагается, что разработчики будут вычислять их самостоятельно, используя свои собственные критерии доверия. Самый простой способ - итерация каждого персонажа, проверка свойства CharParams.IsSuspicious. Вот пример кода (C#) для FREngine 11

//Statistics counters 

    //Count of all suspicious symbols in layout 
    private int suspiciousSymbolsCount; 
    //Count of all unrecognized symbols in layout 
    private int unrecognizedSymbolsCount; 
    //Count of all nonspace symbols in layout 
    private int allSymbolsCount; 
    //Count of all words in layout 
    private int allWordsCount; 
    //Count of all not dictionary word in layout 
    private int notDictionaryWordsCount; 
    private void processImage() 
    { 
     // Create document 
     FRDocument document = engineLoader.Engine.CreateFRDocument(); 

     try { 
      // Add image file to document 
      displayMessage("Loading image..."); 
      string imagePath = Path.Combine(FreConfig.GetSamplesFolder(), @"SampleImages\Demo.tif"); 

      document.AddImageFile(imagePath, null, null); 

      //Recognize document 
      displayMessage("Recognizing..."); 
      document.Process(null); 

      // Calculate text statistics 
      displayMessage("Calculating statistics..."); 
      clearStatistics(); 
      for(int i = 0; i < document.Pages.Count; i++) { 
       calculateStatisticsForLayout(document.Pages[i].Layout); 
      } 

      //show calculated statistics 
      displayStatistics(); 

     } catch(Exception error) { 
      MessageBox.Show(this, error.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally { 
      // Close document 
      document.Close(); 
     } 
    } 
    private void calculateStatisticsForLayout(Layout layout) 
    {  
     LayoutBlocks blocks = layout.Blocks; 
     for(int index = 0; index < blocks.Count; index++) { 
      calculateStatisticsForBlock(blocks[index]); 
     } 
    } 

    void calculateStatisticsForBlock(IBlock block) 
    {   
     if(block.Type == BlockTypeEnum.BT_Text) { 
      calculateStatisticsForTextBlock(block.GetAsTextBlock()); 
     } else if(block.Type == BlockTypeEnum.BT_Table) { 
      calculateStatisticsForTableBlock(block.GetAsTableBlock()); 
     } 
    } 

    void calculateStatisticsForTextBlock(TextBlock textBlockProperties) 
    { 
     calculateStatisticsForText(textBlockProperties.Text); 
    } 

    void calculateStatisticsForTableBlock(TableBlock tableBlockProperties) 
    { 
     for(int index = 0; index < tableBlockProperties.Cells.Count; index++) { 
      calculateStatisticsForBlock(tableBlockProperties.Cells[index].Block); 
     } 
    } 

    void calculateStatisticsForText(Text text) 
    { 
     Paragraphs paragraphs = text.Paragraphs; 
     for(int index = 0; index < paragraphs.Count; index++) { 
      calculateStatisticsForParagraph(paragraphs[index]); 
     } 
    } 

    void calculateStatisticsForParagraph(Paragraph paragraph) 
    { 
     calculateCharStatisticsForParagraph(paragraph); 

     calculateWordStatisticsForParagraph(paragraph); 
    } 

    void calculateCharStatisticsForParagraph(Paragraph paragraph) 
    { 
     for(int index = 0; index < paragraph.Text.Length; index++) 
     { 
      calculateStatisticsForChar(paragraph, index); 
     } 
    } 

    void calculateStatisticsForChar(Paragraph paragraph, int charIndex) 
    { 
     CharParams charParams = engineLoader.Engine.CreateCharParams(); 
     paragraph.GetCharParams(charIndex, charParams); 
     if(charParams.IsSuspicious) 
     { 
      suspiciousSymbolsCount++; 
     } 

     if(isUnrecognizedSymbol(paragraph.Text[charIndex])) 
     { 
      unrecognizedSymbolsCount++; 
     } 

     if(paragraph.Text[charIndex] != ' ') 
     { 
      allSymbolsCount++; 
     } 
    } 

    void calculateWordStatisticsForParagraph(Paragraph paragraph) 
    { 
     allWordsCount += paragraph.Words.Count; 

     for(int index = 0; index < paragraph.Words.Count; index++) 
     { 
      if(!paragraph.Words[index].IsWordFromDictionary) 
      { 
       notDictionaryWordsCount ++; 
      } 
     } 
    } 

    bool isUnrecognizedSymbol(char symbol) 
    { 
     //it is special constant used by FREngine recogniser 
     return (symbol == 0x005E); 
    } 

    void displayStatistics() 
    { 
     labelAllSymbols.Text = "All symbols: " + allSymbolsCount.ToString(); 
     labelSuspiciosSymbols.Text = "Suspicious symbols: " + suspiciousSymbolsCount.ToString(); 
     labelUnrecognizedSymbols.Text = "Unrecognized symbols: " + unrecognizedSymbolsCount.ToString(); 

     labelAllWords.Text = "All words: " + allWordsCount.ToString(); 
     labelNotDictionaryWords.Text = "Non-dictionary words: " + notDictionaryWordsCount.ToString(); 
    } 
+0

Существует также характерный характер доверия 1-100 оценка по адресу: characterParameters.SelectedCharacterRecognitionVariant.CharConfidence –

+0

Вы предпочитаете не использовать его в этом случае. Значение от 0 до 100 не является показателем уверенности абсолютного считывания определенного символа. Это важная ценность, помогающая вам узнать, насколько хороший выбранный вариант символа относится ко всем другим возможным символам в этом месте. –