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

Пример 4. Шаг 9.2 Описание поля Total Amount, элемент TotalAmount

Поле TotalAmount будем одновременно искать как справа от заголовка, так и под заголовком.

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

  1. В составе элемента SumGroup создайте элемент TotalAmount (тип Character String).
  2. Выберите вкладку Character String.
  3. Задайте алфавит
    ',-.0123456789OSZosz
  4. Задайте значение параметра Percentage of non-alphabet characters равным 30%.
  5. В поле Character count задайте нечеткий интервал {-1, 1, 20, INF}, оценивающий длину цепочки символов. Предполагаем, что все возможные значения будут находиться в интервале от 1 до 20 символов. Любая гипотеза, выходящая за рамки данного интервала, будет штрафоваться.
  6. Не накладывайте других ограничений на параметры элемента, оставьте значения по умолчанию.
  7. Перейдите на вкладку Search Constraints и исключите из области поиска элемента регион гипотезы элемента kwTotal.
  8. Выберите вкладку Advanced.
  9. В поле Advanced pre-search relations задайте дополнительные условия поиска: если найден заголовок kwTotal, то задайте область поиска поля массивом прямоугольников:один справа от заголовка, другой - под заголовком с некоторым отступом, иначе объект изображения не искать. На языке описания FlexiLayout данное условие выглядит следующим образом:
    If not kwTotal.IsNull Then
    // если найден заголовок kwTotal
    {
    WholeWordMOde: true;
    MaxGapInLine: 30dt;
    RectArray DataRegion;
    Let r1= Rect (kwTotal.Rect.Right, kwTotal.Rect.Top -20dt, kwTotal.Rect.Right + 1800dt, kwTotal.Rect.Bottom + 50dt);
    // ограничим область поиска прямоугольником справа от заголовка поля
    Let r2 = Rect (kwTotal.Rect.Left - 100dt, kwTotal.Rect.Bottom, kwTotal.Rect.Right + 100dt, kwTotal.Rect.Bottom + 200dt);
    // ограничим область поиска прямоугольником снизу от заголовка поля
    DataRegion = RectArray (r1);
    DataRegion.Add (r2);
    RestrictSearchArea (DataRegion);
    }
    else Dontfind();
    // иначе объект изображения не искать
    Замечание. При подборе значений для отступов (offset) бывает полезно обратить внимание на геометрические свойства (границы и размеры) опорных и искомых объектов изображения в режиме просмотра результатов предраспознавания. Значения для отступов (offset) подбираются опытным путем.
  10. Область поиска значения поля обозначена двумя прямоугольниками – справа от заголовка и под ним. Причем, если значение поля располагается справа от его заголовка, то на большинстве тестовых изображений под заголовком присутствует какой-то текст. Так как на большинстве изображений этот ненужный текст попадает в область поиска поля TotalAmount, программа создаст для него гипотезу. Чтобы повлиять на качество такой гипотезы (занизить ее качество), в поле Advanced post-search relations задайте дополнительные параметры проверки:чем значение поля ниже заголовка, тем сильнее штрафовать гипотезу. На языке описания FlexiLayout данное условие выглядит следующим образом:
    If not IsNull then
    {FuzzyQuality: 400dt - width, {-50000,0,0, 50000}*dt;
    //максимальное качество будет у гипотез элементов, ширина региона которых равна 400dot
    if width < 50dt then Quality: 0;
    // элементы ширины меньше 50 dot не будем рассматривать
    if Top > kwTotal.Rect.Top then
    { FuzzyQuality: Top - kwTotal.Rect.Top, {0,0,0, 20000}*dt;
    }
    }
    //такая проверка означает, что чем больше разница, тем выше штрафующий коэффициент
    Замечание. Для описания положения объектов на странице и расстояний между ними используется двумерная система координат с горизонтальной и вертикальной осями. Точка отсчета (0, 0) координатных осей расположена в левом верхнем углу изображения. Положительное направление оси абсцисс - слева направо, оси ординат - сверху вниз.
  11. Протестируйте изображения и убедитесь, что программа верно находит элемент на всех изображениях, где он присутствует.
  12. Задайте местоположение блока TotalAmount в виде прямоугольника региона элемента TotalAmount, увеличенного по высоте и ширине на 5 dot. Для этого выберите опцию Expression и задайте следующее выражение:
    Rect outputRect;
    outputRect = SumGroup.TotalAmount.Rect;
    IsNull = SumGroup.TotalAmount.IsNull;
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);

11/10/2020 12:08:08 PM


Please leave your feedback about this article