База знаний

Номер статьи: 1238 | Категория: Настройка проекта | Тип: Задача – Решение | Последнее обновление: 27.08.2015

Как явно указать определение документа?

В некоторых случаях заранее известно, какое именно определение должно быть наложено на документ. В этом случае можно сократить время обработки, явно указав наименование определения документа и не осуществляя перебор всех доступных определений.

Описание

Как явно указать определение документа

Если на этапе сканирования заранее известно, какое определение документа должно быть наложено на документ, то для сокращения времени обработки можно настроить проект таким образом, чтобы на этапе распознавания использовалось необходимое определение документа, а не выполнялся перебор всех доступных определений.

Решение

Использование типов пакетов

Самый простой способ реализации данного сценария – создать разные типы пакетов в одном проекте и в каждом типе пакета разрешить использование только одного определения документа (данная операция выполняется на закладке Распознавание диалогового окна свойств типа пакета, пункт меню Проект -> Типы пакетов..., в диалоговом окне создайте тип пакета с помощью кнопки Новый... или выберите существующий тип пакетов и нажмите кнопку Правка...). В этом случае оператор может сканировать документы непосредственно в пакеты соответствующего типа.

Использование параметра документа

Если в проекте ABBYY FlexiCapture много типов пакетов, выбор необходимого может занять у оператора сканирования длительное время. Кроме того, информация о том, какое определение документа необходимо использовать, может поступать после завершения этапа сканирования (но до этапа распознавания).

По умолчанию на этапе распознавания осуществляется попытка наложения всех определений документа, указанных при настройке типа пакетов. Для сокращения времени распознавания желательно указать для каждого документа требуемое определение, чтобы не выполнять наложение всех имеющихся.  Для этого необходимо выполнить следующие действия:

  1. На этапе обработки, в ходе которого становится известно определение документа, необходимо присвоить его наименование регистрационному параметру документа.
  2. Перед началом распознавания, используя значение регистрационного параметра, необходимо ограничить набор определений документа, которые будут использоваться для наложения. Это можно осуществить с помощью скрипта - обработчика события Перед наложением или с помощью регистрационного параметра документа fc_Predefined:DefinitionsToMatch в зависимости от специфики наложения определения документа (подробнее особенности обоих способов рассмотрены ниже).

Запись наименования определения документа в параметр документа

Вариант 1. Указание определения документа оператором сканирования

На станции сканирования оператор может вручную указать значение регистрационного параметра. Для этого данный параметр необходимо создать в настройках свойств типа пакета на станции сканирования (закладка Регистрационные параметры документа диалогового окна свойств типа пакета, пункт меню Сервис -> Типы пакетов..., в диалоговом окне создайте тип пакета с помощью кнопки Новый... или выберите существующий тип пакетов и нажмите кнопку Правка...).

Если набор используемых определений документа необходимо ограничивать с помощью регистрационного параметра fc_Predefined:DefinitionsToMatch, при создании необходимо указать именно это название. Если набор используемых определений документа ограничивается с помощь скрипта - обработчика события Перед наложением, необходимо указать любое другое название (для определенности в дальнейшем в примерах используется значение DocumentDefinitionName). 

Вариант 2. Автоматическое задание с помощью скрипта 

На закладке Процесс обработки диалогового окна свойств типа пакета (пункт меню Проект -> Типы пакетов..., в диалоговом окне создайте тип пакета с помощью кнопки Новый... или выберите существующий тип пакетов и нажмите кнопку Правка... выберите Расширенный режим в поле Схема и добавьте этап типа Автоматическая обработка, на котором будет выполняться скрипт (например, можно назвать его Document Processing). Данный этап должен находиться после этапа сканирования, но до этапа распознавания. 

В скрипте Document Processing на данном этапе для каждого документа создается регистрационный параметр DocumentDefinitionName, и значению данного параметра присваивается наименование определения документа. 

Пример 1. Определение документа выбирается с помощью классификации

В примере предполагается, что на стадию поступает набор страниц (в терминах ABBYY FlexiCapture – набор одностраничных документов). Для каждого одностраничного документа на основании результатов классификации определяется название определения документа, которое необходимо наложить. Если по результатам классификации ни одно определение документа не подошло (метод ClassifyPage вернул значение null), регистрационный параметр документа не создаётся.

Пример на языке C#:

IPageClassificationResult classificationResult = FCTools.ClassifyPage(Document.Pages[0]);
if (classificationResult != null)
{
    Document.Properties.Set("DocumentDefinitionName", classificationResult.MatchedSections);
}

Замечание. Если все документы направляются на этап распознавания, то использование данной схемы не приведет к сокращению времени обработки, поскольку она будет равносильна обычному распознаванию. Более того, время даже увеличится из-за маршрутизации на дополнительный этап обработки. Тем не менее, если после классификации на распознавание направляется только часть документов, а остальные удаляются как ненужные либо экспортируются нераспознанными, применение данной схемы позволит ускорить обработку. 

Пример 2. Определение документа выбирается по характерным признакам документа

В примере предполагается, что на стадию поступает набор страниц (в терминах ABBYY FlexiCapture – набор одностраничных документов). Для каждого одностраничного документа название определения документа, которое необходимо наложить, определяется на основании размера страницы.

Пример на языке C#:

int a4WidthMax = 3000;
int a4WidthMin = 2500;
int a4HeightMax = 4200;
int a4HeightMin = 3500;
if ((
// Portrait orientation
(Document.Pages[0].Rect.Right<a4WidthMax) && (Document.Pages[0].Rect.Right>a4WidthMin) //width
&&
(Document.Pages[0].Rect.Bottom<a4HeightMax) && (Document.Pages[0].Rect.Bottom>a4HeightMin) //height
) || (
// Album orientation
(Document.Pages[0].Rect.Bottom<a4WidthMax) && (Document.Pages[0].Rect.Bottom>a4WidthMin) //height
&&
(Document.Pages[0].Rect.Right<a4HeightMax) && (Document.Pages[0].Rect.Right>a4HeightMin) //width
))
{
    Document.Properties.Set("DocumentDefinitionName", "DocumentDefinition_forA4");
}
else
{
    Document.Properties.Set("DocumentDefinitionName", "DocumentDefinition_NOTforA4");
}
// Logging
Processing.ReportMessage(Document.Pages[0].Rect.ToString() + ": " + Document.Properties.Get("DocumentDefinitionName"));

Аналогично можно выбирать определение документа по другим признакам, таким как:

и так далее. 

Ограничение набора определений документа, используемых для наложения 

Существует два способа сократить набор определений документа, используемых в одном типе пакета:

  1. указать значение регистрационного параметра документа fc_Predefined:DefinitionsToMatch;
  2. использовать скрипт - обработчик события Перед наложением.

Выбор используемого способа зависит от особенностей процесса обработки документов, подробнее см. описания методов ниже. 

Способ 1. Использование параметра  документа с именем fc_Predefined:DefinitionsToMatch 

Значение регистрационного параметра fc_Predefined:DefinitionsToMatch рассматривается как набор определений документа, которые могут быть наложены на документ. Значением параметра может быть набор названий определений документа, конкретных разделов или их комбинация, в котором элементы разделены точкой с запятой, например: «Document Definition 1; Document Definition 2\Section 1; Document Definition 2\ Section 2». Наложение осуществляется следующим образом:

Способ 2. Использование скрипта - обработчика события Перед наложением 

При разработке примера скрипта будем исходить из предположения, что для каждого документа название определения, которое необходимо наложить, известно и указано в регистрационном параметре документа DocumentDefinitionName  (способы присвоить регистрационному параметру данное значение описаны ниже).

На закладке Обработчики событий диалогового окна свойств типа пакета (пункт меню Проект -> Типы пакетов..., в диалоговом окне создайте тип пакета с помощью кнопки Новый... или выберите существующий тип пакетов и нажмите кнопку Правка...) необходимо добавить скрипт - обработчик события Перед наложением, которое происходит для каждого документа перед началом его распознавания (перед началом подбора подходящего определения документа). Скрипт использует значение регистрационного параметра документа DocumentDefinitionName и ограничивает набор определений документа, которые необходимо накладывать на документ.

Значением регистрационного параметра может быть набор названий определений документа, конкретных разделов или их комбинация, в котором элементы разделены точкой с запятой, например: «Document Definition 1; Document Definition 2\Section 1; Document Definition 2\ Section 2». 

С помощью скрипта можно реализовать различные варианты обработки. Далее приведены два варианта, демонстрирующие основные возможности.

Вариант 1

Скрипт изменяет множество доступных для наложения на данный документ определений только в том случае, если у документа существует регистрационный параметр DocumentDefinitionName.

Пример на языке C#:

if (Document.Properties.Has("DocumentDefinitionName"))
{
    Matching.DefinitionsList = Document.Properties.Get("DocumentDefinitionName");
    if (Document.Properties.Get("DocumentDefinitionName") == string.Empty)
    {
        Matching.ForceMatch = true;
    }
}

Вариант 2

В отличие от первого варианта, в данном случае можно указывать не более одного раздела для каждого документа. Если указать название определения документа, имеющего более одного раздела, или наименования нескольких разделов, разделенных точкой с запятой, то выполнение скрипта завершится с ошибкой. Это связано с тем, что принудительно (при значении флага ForceMatch, равном true) можно накладывать только один раздел. Однако указанный раздел будет наложен в любом случае, даже если данные не будут найдены на изображении: в этом случае их регионы можно будет указать вручную, кроме того, при верификации для страницы будет отображаться форма данных, в которой оператор сможет ввести значения полей. 

Пример на языке C#:

if (Document.Properties.Has("DocumentDefinitionName"))
{
    Matching.DefinitionsList = Document.Properties.Get("DocumentDefinitionName");
    Matching.ForceMatch = true;
}

Использование штрихкодов

В некоторых ситуациях документы маркируются штрихкодами, значение которых может быть использовано для выбора сценария обработки данного документа. Если к моменту сканирования известно определение документа, которое необходимо использовать, такой документ можно отметить штрихкодом с определенным значением и в дальнейшем обрабатывать документы в зависимости от значений штрихкодов.

Если в настройках сканирования указано, что разделение на документы осуществляется с использованием штрихкодов, то полю Index документа присваивается значение найденного штрихкода. Аналогичное разделение может указываться в настройках типа пакета в ABBYY FlexiCapture (закладка Предварительная обработка изображений диалогового окна свойств типа пакета, пункт меню Проект -> Типы пакетов..., в диалоговом окне создайте тип пакета с помощью кнопки Новый... или выберите существующий тип пакетов и нажмите кнопку Правка...) при импорте документов из горячей папки или при отправке страниц со станции сканирования без разделения на документы. 

В дальнейшем к этому значению (Document.Index) документа можно обращаться при выполнении скрипта - обработчика события Перед наложением так же, как к параметру, расcмотренному в предыдущем примере. 

Если осуществлять разделение на документы с помощью штрихкодов не предполагается, но необходимо использовать значение штрихкодов для выбора накладываемого определения документа, можно использовать следующий способ:

  1. На станции сканирования выполняется скрипт, который для каждого документа находит штрихкод и присваивает его значение определенному регистрационному параметру документа.
  2. Значение данного параметра используется при обработке документа ABBYY FlexiCapture способом, аналогичным рассмотренному в предыдущем пункте.

Если сканировать документы не предполагается, а требуется загружать их изображения из горячей папки без участия оператора, то на станции сканирования с помощью скриптов можно реализовать выполнение данного сценария в автоматическом режиме: импорт изображений из горячей папки, поиск штрихкодов и отправка страниц для обработки ABBYY FlexiCapture.

Андрей Зюзин
Менеджер проектов DataCapture
409 считают это полезным.
Была ли эта информация вам полезна?