Russian (Русский) - Change language

Пример 4. Шаг 5.6 Описание поля Delivery Address, элементы grAddress, wgAddressAbove, DeliveryAddress

Местоположение поля Delivery Address мы решили искать:

  • справа и снизу от заголовка поля.
  • с помощью элемента White Gap – в качестве ограничителя снизу.
  • с помощью элемента типа Paragraph.

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

  1. В составе элемента InvoiceHeader создайте элемент grAddress (тип Group).
  2. Перейдите на вкладку Relations и задайте следующие условия поиска элементов группы:
    • Above элемента kwDeliveryAddress, Offset = -400
    • Left of правой границы элемента kwDeliveryAddress,Offset = -800, Reference boundary = Right.
    • Right of левой границы элемента kwDeliveryAddress, Offset = -50, Reference boundary = Left.
    • Below верхней границы элемента kwDeliveryAddress, Offset = -20, Reference boundary = Top.

      Показать пример

Для ограничения области поиска элемента DeliveryAddress снизу опишем горизонтальный просвет (White Gap).

Чтобы создать элемент wgAddressAbove:

  1. В составе элемента InvoiceHeader.grAddress создайте элемент wgAddressAbove (тип White Gap).
  2. Выберите вкладку White Gap.
  3. В группе Orientation выберите Horizontal. Минимальную высоту (Min height) поставьте равной 55.
    Замечание. При подборе значений для высоты/ширины просветов бывает полезно обратить внимание на геометрические свойства (границы и размеры) близлежащих объектов изображения в режиме просмотра результатов предраспознавания.
  4. Просвет мы будем искать среди текста, поэтому в группе Search among objects of type отметьте только опцию Text.
  5. В группе Rubbish установите следующие параметры для опций:
    • Lower threshold limit – 20;
    • Upper threshold limit – 80;
    • Threshold coefficient (%) – 10.

      Показать пример

Замечание. Значения свойств Lower threshold limit, Upper threshold limit и Threshold coefficient (%) подбираются опытным путем. Подбор значений рекомендуется начинать со значений по умолчанию, если же поиск со значениями по умолчанию приводит к неудовлетворительным результатам, тогда следует подобрать такие значения свойств, которые позволят найти искомый просвет на всех тестовых изображениях.

  1. Не накладывайте других ограничений на параметры элемента, оставьте значения по умолчанию.
  2. Перейдите на вкладку Relations.
  3. Поскольку просвет может находиться только снизу от ключевых слов заголовка kwDeliveryAddress, задайте следующее условие поиска:
    • Below элемента kwDeliveryAddress, Offset = 20
      Offset необходимо задать для того чтобы исключить нахождение просветов например между заголовком и текстом. Выберите вкладку Advanced.
  4. Поскольку поле DeliveryAddress может присутствовать на изображении, а может и нет, но при этом всегда присутствует вместе с заголовком, в поле Advanced pre-search relations задайте дополнительные условия поиска:Искать объект изображения, только если найден элемент kwDeliveryAddress . На языке описания FlexiLayout данное условие выглядит следующим образом:
    If InvoiceHeader.kwDeliveryAddress.IsNull Then DontFind;
  5. Протестируйте нахождение элемента wgAddressAbove на изображениях.
  6. Поскольку в заданной области поиска на некоторых изображениях программа находит несколько просветов и выбирает не тот, который нас интересует, необходимо задать дополнительные ограничения. Анализ показывает, что интересующий нас просвет – самый верхний в заданной области поиска. Поэтому в поле Advanced pre-search relations задайте дополнительные условия поиска:Искать объект изображения ближайший по вертикали к верхней границе первой страницы. На языке описания FlexiLayout данное условие выглядит следующим образом:
    NearestY: Page(1).RectGlobal.Top;
  7. Протестируйте изображения (временно исключите элемент InvoiceFooter).

Чтобы создать элемент DeliveryAddress:

  1. В составе элемента InvoiceHeader.grAddress создайте элемент DeliveryAddress (тип Paragraph).
  2. Перейдите на вкладку Relations.
  3. Поскольку DeliveryAddress может находиться только выше просвета wgAddressAbove задайте следующее условие поиска:
    • Above элемента wgAddressAbove, Offset = 0.
  4. Поскольку условие область поиска поля DeliveryAddress уже задано на уровне группы InvoiceHeader.grAddress, мы не будем его дублировать здесь.
  5. Выберите вкладку Advanced.
  6. Поскольку заголовок поля DeliveryAddress также находится в области поиска, нам необходимо исключить его, чтобы получить только значение DeliveryAddress. Кроме этого в области поиска также присутствуют разделители и мусор, которые тоже желательно исключить. Поэтому нам не подходит просто исключение региона элемента kwDeliveryAddress. В данном случае будет правильно за основу взять область региона элемента kwDeliveryAddress, расширить его так, чтобы в него попал весь мусор и исключить уже этот прямоугольник. Для этого в поле Advanced pre-search relations задайте дополнительные условия поиска:
    If InvoiceHeader.kwDeliveryAddress.IsNull Then DontFind;
    Else
    // опишем прямоугольник вокруг заголовка поля (задав некоторый отступ от границ)
    { Let Left = InvoiceHeader.kwDeliveryAddress.Rect.Left - 100dt;
    Let Top = InvoiceHeader.kwDeliveryAddress.Rect.Top - 100dt;
    Let Right = InvoiceHeader.kwDeliveryAddress.Rect.Right + 20dt;
    Let Bottom = InvoiceHeader.kwDeliveryAddress.Rect.Bottom;
    // исключим из области поиска нашего поля описанный прямоугольник
    ExcludeRect (Left, Top, Right, Bottom);
    }
  7. Протестируйте изображения (временно исключите элемент InvoiceFooter).
  8. Задайте местоположение блока DeliveryAddress в виде прямоугольника региона найденного элемента DeliveryAddress, упрощенного для улучшения визуального восприятия и увеличенного по высоте и ширине на 5 dot. Для этого выберите опцию Expression и задайте следующее выражение:
    Rect outputRect;
    OutputRegion = InvoiceHeader.grAddress.DeliveryAddress.SimplifiedRegion;
    IsNull = InvoiceHeader.grAddress.DeliveryAddress.IsNull;
    OutputRegion.Inflate (5dt, 5dt);

10.11.2020 12:08:08


Please leave your feedback about this article