База знаний

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

Создание проекта-классификатора во FlexiCapture

Описание

Как создать проект во FlexiCapture, направленный только на классификацию?

Решение

Иногда требуется только определить тип входящих документов без извлечения из них данных. Создание гибкого описания для каждого типа документа с таких случаях отнимает слишком много времени и не оправдывает усилий. В данной статье рассказывается, как выполнить классификацию документов без последующего наложения определений документов. Вы можете найти информацию о классификации в проектах FlexiCapture проектов здесь. Чтобы узнать, как настроить классификатор во FlexiLayout Studio, см. эту статью.

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

Чтобы настроить проект, выполните следующие действия:

  1. Добавьте CFL-файл классификатора, экспортированный из FlexiLayout Studio, в проект FlexiCapture. Для этого в диалоговом окне свойств проекта или типа пакета на вкладке Распознавание в группе Дерево классификатора нажмите кнопку Загрузить…
  2. Выберите Расширенную схему маршрутизации на вкладке Процесс обработки в свойствах проекта или типа пакета; отключите все этапы, кроме Сканирования и Исключений.
  3. Добавьте новый этап типа Автоматические (подробней см. здесь). На этом этапе будет производиться классификация документов и экспорт изображений.
  4. На вкладке Скрипт диалогового окна Свойства выберите тип обработки (обработка документа или обработка пакета) и откройте редактор скрипта (нажмите кнопку Правка скрипта…):
    • Выберите скриптовый язык (пример ниже написан на языке С#);
    • Чтобы классифицировать страницы при помощи классификатора, используйте этот метод:

      FCTools.ClassifyPage(page : IPage, [optional] callback : IProcessingCallback, [optional] detectClassesWithoutLayout : bool)

      Значения параметра:

      page – страница, которую нужно классифицировать:
      - page = Document.Pages[0]  - если был выбран тип Обработка документа; или
      - page = Batch.Documents[i].Pages[0] – если был выбран тип Обработка пакета;
      callback - вы можете использовать имеющийся интерфейс IProcessingCallback, либо реализовать этот интерфейс самостоятельно.
      detectClassesWithoutLayout - Если значение параметра равно true, классификация будет основываться только на классах из классификатора без использования определений документов

      Этот метод возвращает объект IPageClassificationResult. Результат классификации страницы будет возвращен в свойстве MatchedSections (для более подробной информации см. файл справки Приложения >> Использование скриптов в ABBYY FlexiCapture >> Объекты >> IFlexiCaptureTools).

Пример

Предположим, что пакет содержит документы двух типов, которые требуется распределить с помощью классификатора. Классификатор имеет два соответствующих класса (Class1, Class2) и уже добавлен в проект FlexiCapture. Автоматический этап под названием “Export_Classification result” был добавлен в процесс обработки. На этом этапе программа классифицирует документы и сохраняет их в одну из трех папок - \\path\Class1, \\path\Class2, или  \\path\Unclassified.

Скрипт Export_Classification result:

int count = Batch.Documents.Count;
for (int i = 0; i < count; i++)
{
    IExportImageSavingOptions op = Documents[i].NewImageSavingOptions();     // создание объекта, описывающего изображение  
    op.Format = "bmp";             // настройки сохранения изображения
    op.ColorType = "FullColor";         
    op.Resolution = 300;          

    //классификация страницы и сохранение ее изображения в соответствующей папке  
    if(FCTools.ClassifyPage(Batch.Documents[i].Pages[0], Processing, true).MatchedSections == "Class1")
    {
        Batch.Documents[i].Pages[0].Picture.SaveAs("\\\\path\\Class1\\"+ i.ToString() + ".bmp", op);
    }
    else if(FCTools.ClassifyPage(Batch.Documents[i].Pages[0],Processing,true).MatchedSections == "Class2")
    {
        Batch.Documents[i].Pages[0].Picture.SaveAs("\\\\path\\Class2\\"+ i.ToString() + ".bmp", op);
    }
    else 
    {
        Batch.Documents[i].Pages[0].Picture.SaveAs("\\\\path\\Unclassified\\" + i.ToString()  + ".bmp", op);
    }
}

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

Пример скрипта:

Document.Properties.Set("Class", FCTools.ClassifyPage(Document.Pages[0], Processing, true).MatchedSections);

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

332 считают это полезным.
Была ли эта информация вам полезна?