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

Пример 3. Шаг 25. Поиск полей TotalQuantity и TotalAmount, элементы TotalQuantity и TotalAmount

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

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

  1. В составе элемента Footer создайте элемент grTotal (тип Group).
  2. Отметьте не заданный по умолчанию пункт Optional element на вкладке General(поскольку мы решили не искать элементы данной группы в случае отсутствия заголовка поля на форме).
  3. Выберите вкладку Advanced.
  4. Поскольку поля Total Quantity и Total Amount присутствуют на изображении только вместе с заголовком Footer.kwTotal, в поле Advanced pre-search relations задайте дополнительные условия поиска:Если элемент Footer.kwTotal не найден, то не искать объекты изображения.На языке описания FlexiLayout данное условие выглядит следующим образом:
    If Footer.kwTotal.IsNull Then DontFind;

Поле Total Quantity располагается на пересечении строки с заголовком Total и столбца Quantity. Первое условие уже задано на уровне группы, а для задания второго условия мы воспользуемся предварительно найденным заголовком столбца в качестве опорного элемента (reference element).

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

  1. В составе элемента grTotal создайте элемент TotalQuantity (тип Character String).
  2. Выберите вкладку Character String.
  3. В поле Character count задайте нечеткий интервал { -1, 1, 10, INF }, оценивающий длину цепочки символов. Предполагаем, что все возможные значения будут находиться в интервале от 1 до 10 символов. Любая гипотеза, выходящая за рамки данного интервала, будет штрафоваться.
  4. Не накладывайте других ограничений на параметры элемента, оставьте значения по умолчанию.
  5. Перейдите на вкладку Relations.
  6. Поскольку поле Total Quantity всегда находится на одном уровне с ключевыми словами заголовка Footer.kwTotal, либо несколько ниже, добавьте следующие условия поиска:
    • Above элемента Footer.kwTotal, Offset = -200, Reference boundary = Bottom.
    • Below элемента Footer.kwTotal, Offset = -20, Reference boundary = Top.

Замечание. При подборе значений для отступов (offset) бывает полезно обратить внимание на геометрические свойства (границы и размеры) опорных и искомых объектов изображения в режиме просмотра результатов предраспознавания. Подбор значений для отступов (offset) является творческим процессом и осуществляется путем проб и ошибок.

  1. Выберите вкладку Advanced.
  2. Поскольку поле Total Quantity может находиться на изображении, а может и нет, но при этом всегда присутствует только вместе со столбцом Quantity, под заголовком столбца с небольшим запасом, в поле Advanced pre-search relations задайте дополнительные условия поиска:Искать объект изображения, только если найден элемент TableHeader.kwQuantity, при этом искать не левее чем 50 dot от левой границы заголовка и не правее чем 50 dot от правой границы заголовка столбца.На языке описания FlexiLayout данное условие выглядит следующим образом:
    If Not (TableHeader.kwQuantity.IsNull) Then
    {
    LeftOf: TableHeader.kwQuantity.Right, -50 * dot;
    RightOf: TableHeader.kwQuantity.Left, -50 * dot;
    }
    Else DontFind;
  3. Протестируйте изображения и убедитесь, что программа верно находит элемент на всех изображениях, где он присутствует.
  4. Выберите в качестве описания местоположения блока TotalQuantity опцию Source element. В качестве source element укажите элемент TotalQuantity, нажав кнопку " ".

Поле Total Amount располагается на пересечении строки с заголовком Total (футера таблицы) и столбца таблицы Total. Напомним, что первое условие уже задано на уровне группы. Для задания второго условия мы воспользуемся предварительно найденными заголовками столбцов в качестве опорного элемента (reference element).

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

  1. В составе элемента grTotal создайте элемент TotalAmount (тип Character String).
  2. Выберите вкладку Character String.
  3. В поле Character count задайте нечеткий интервал { -1, 1, 20, INF }, оценивающий длину цепочки символов. Предполагаем, что все возможные значения будут находиться в интервале от 1 до 20 символов. Любая гипотеза, выходящая за рамки данного интервала, будет штрафоваться.
  4. Не накладывайте других ограничений на параметры элемента, оставьте значения по умолчанию.
  5. Перейдите на вкладку Relations.
  6. Поскольку поле Total Amount всегда находится на одном уровне с ключевыми словами заголовка Footer.kwTotal, добавьте следующие условия поиска:
    • Above элемента Footer.kwTotal, Offset = -20, Reference boundary = Bottom.
    • Below элемента Footer.kwTotal, Offset = -20, Reference boundary = Top.
  7. Выберите вкладку Advanced.
  8. Поскольку поле Total Amount может находиться только непосредственно под заголовком столбца Total (с некоторым запасом) по вертикали, другими словами между заголовков столбцов UnitPrice и Sales по вертикали, тоже с небольшим запасом, в поле Advanced pre-search relations задайте дополнительные условия поиска:Если найден элемент TableHeader.kwTotal, то искать объект изображения не правее чем 70 dot от правой границы элемента TableHeader.kwTotal и не левее чем 50 dot левой границы элемента TableHeader.kwTotal; иначе если найдены элементы TableHeader.kwUnitPrice и TableHeader.kwSales, то искать объект изображения не правее чем 40 dot от левой границы элемента TableHeader.kwSales и правее правой границы элемента TableHeader.kwUnitPrice;иначе объект изображения не искать.На языке описания FlexiLayout данное условие выглядит следующим образом:
    If Not (TableHeader.kwTotal.IsNull) Then
    {
    LeftOf: TableHeader.kwTotal.Right, -70 * dot;
    RightOf: TableHeader.kwTotal.Left, -50 * dot;
    }
    Else
    If Not (TableHeader.kwUnitPrice.IsNull) and Not (TableHeader.kwSales.IsNull) Then
    {
    LeftOf: TableHeader.kwSales.Left, -40 * dot;
    RightOf: TableHeader.kwUnitPrice, 0 * dot;
    }
    Else DontFind;
    Замечание. При подборе значений для отступов (offset) бывает полезно обратить внимание на геометрические свойства (границы и размеры) опорных и искомых объектов изображения в режиме просмотра результатов предраспознавания. Подбор значений для отступов (offset) является творческим процессом и осуществляется путем проб и ошибок.
  9. Протестируйте изображения и убедитесь, что программа верно находит элемент на всех изображениях, где он присутствует.
  10. Выберите в качестве описания местоположения блока TotalAmount опцию Source element. В качестве source element укажите элемент TotalAmount, нажав кнопку .

11/10/2020 12:08:08 PM


Please leave your feedback about this article