Распознавание документов

Автор: jurist23rus
Версия: 1.0
Последнее обновление: от 24.10.2021 г.
Скачать
Обсудить на форуме

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

Позволяет пользователю упростить задачу внесения сведений в базу данных, путём распознавания сканов (фотографий) документов. Модуль знает несколько шаблонных документов, например, паспорт или водительское удостоверение (список постоянно дополняется), в которых он самостоятельно находит нужные сведения и записывает их базу данных. Для документов с фотографией, (например, паспорт) возможна обрезка фото и вставка его в поле формы «Изображение».

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

Принцип действия

Распознаёт изображение (скан) документа и сохраняет полученные данные в соответствующие поля формы, согласно таблице соответствия. Если для сохранения выбрана текущая форма (то есть форма из которой запускается модуль), то данные будут записаны в поля редактируемой вами записи . Если для сохранения выбрана другая форма (не текущая), то данные сохраняются в новой записи, которую модуль создаёт и сохраняет самостоятельно. Эту логику можно корректировать с помощью выражений. Поля документа, не внесённые в таблицу соответствия, пропускаются и никак не обрабатываются.

Особенности распознавания

  • В некоторых случаях (как правило, из-за плохого качества изображения) некоторые поля или фото могут быть не распознаны. Это нормально и не требует вмешательства пользователя, просто часть полей на форме будет не заполнена. Это не исключает возможности пользователя самостоятельно заполнить пропущенные поля.
  • Распознавание фотографии на документе сильно зависит от качества изображения документа и качества самого фото, например, чёрно-белые фотографии на паспортах, выданных в начале 2000-х не будут распознаны. При этом распознавание текста документа всегда на высоком уровне, даже при низком качестве изображения самого документа.
  • Качество распознавания лучше, если изображение документа правильно ориентировано.
  • Качество распознавание по чёрно-белой копии документа, как правило, хуже, чем распознавание оригинала, но тоже возможно.

Сценарии использования

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

1. Создайте форму с необходимыми полями под конкретный документ, например паспорт.
2. В расположенной на форме кнопке в редакторе действий определите алгоритм (порядок, последовательность) выполнения действий при её нажатии.
3. Задайте настройки для действия «Окно выбора файлов». Это действие позволит вам выбрать нужный файл изображения (документа) через стандартное диалоговое окно выбора файлов Windows. Результатом выполнения действия будет путь к выбранному файлу. Или пустая строка, если вы нажмёте кнопку Отмена в диалоговом окне.

4. Добавьте блок «Если» в редактор действий, чтобы проверить что возвращает «Окно выбора файлов» пустую строку или путь к файлу. В блоке «Если» пропишите следующее условие

Result <> ''

.

5. Настройте действие «Распознавание», задав правильные значения необходимым вам параметрам.

Настройка действия "Распознавание"

Ключ

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

Путь к файлу документа

Задаётся в виде выражения результатом вычисления которого будет строка, содержащая путь к файлу распознаваемого документа. Если вы используете данное действие вместе с действием «Сканировать» или «Окно выбора файлов», необходимо указать функцию Result.

Тип распознаваемого документа

Можно задать двумя способами. Первый. Выбрать в выпадающем списке. Второй. Задать в виде условного выражения. Второй способ может быть удобнее, когда вам требуется, чтобы пользователь менял тип документа самостоятельно, не переходя в дизайнер. В таком случае на форме можно разместить поле «Список» и указать там необходимые типы документов. В поле «Тип документа (выражение)» нужно записать выражение, которое вернёт нужный вам тип документа. Например:

iif([тип документа] == 'паспорт', 'Паспорт РФ', '')

Где [тип документа] - это поле формы; 'Паспорт РФ'- это значение типа понятное программе, которое будет возвращено если условие будет истинным. Если условие будет ложь, то выражение вернёт пустую строку и программа использует для анализа тип документа, заданный разработчиком в выпадающем списке. Тип документа, заданный выражением, имеет больший приоритет, чем тип, выбранный в списке.

Выбирайте подходящий тип к вашему документу. Несоответствие документа выбранному типу приведёт к непредсказуемым результатам распознавания.

Тип "Только текст"

Данный тип документа существенно отличается от других. Его установка переводит модуль в режим при котором он распознаёт текст на изображении документа и возвращает его (текст) в неизменном виде. Вы можете записать текст в базу данных. Для этого в таблице соответствия нужно создать строку и в графе «Поле документа» выбрать «Только текст (only_text)». Текст будет записан либо в выбранное поле формы, либо вы можете обрабатывать его по своему усмотрению с помощью выражений.

Помимо этого в данном режиме модуль может работать с именованными сущностями. Подробнее об этом в отдельной главе.

Форма для сохранения

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

Таблица соответствия

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

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

Поле формы

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

Поле документа

Данные из документа, которые будут сохранены в выбранное поле формы.

Выражение

Выражение, которое будет вычислено, а результат вычисления будет записан в соответствующее поле базы данных. С помощью него вы можете произвести необходимые манипуляции с данными, например: изменить регистр, обрезать ненужную часть текста, что-то добавить или убрать и любые другие операции, на которые способны выражения. Вы можете обратиться к данным через переменную c латинским именем, которая написана в графе «Поле документа» в круглых скобках, рядом с русским именем. Фамилия(surname) - surname служит именем переменной для использования в выражениях.

Выражения вычисляются в контексте выбранной вами формы (параметр «Форма для сохранения») .

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

Примеры выражений

Переменная citizenship хранит данные из документа в неизменном виде. Вы можете их изменять по своему усмотрению.

Upper(GetVar('citizenship'))
Trim(IFE(GetVar('gender'), "нет данных"))

Функция CONCAT сама преобразует null в пустую строку (''), поэтому использование функции NZ не требуется.

concat(GetVar('surname'), ' ', GetVar('name'), ' ', GetVar('middle_name'))

Следующий пример демонстрирует как можно записать данные в поле с помощью выражения. Например, когда параметр «поле базы данных» оставлен пустым, или вам нужно записать данные сразу в несколько полей одновременно. В этом выражении функция SetField запишет данные в поле 'имя', а второй GetVar возвратит строку, которая может быть записана в выбранное поле, согласно вашей таблицы соответствия. Таким образом, вы можете записать одни и те же данные как в одно, так и несколько полей базы данных по вашему желанию.

block(
SETFIELD('Имя', GetVar('name')),
GetVar('surname')
)

Такое выражение тоже допустимо, но имейте ввиду, оно не возвращает никакого значения.

SETFIELD('Имя', GetVar('name'))

Режим отладки

Бывает, что вы столкнулись с ошибкой в работе модуля или ваше изображение распознаётся не так как ожидалось. Именно для таких случаев создан режим отладки. Установить флажок в настройках модуля и попробуйте распознать изображение, при котором, как вам кажется, модуль ведёт себя некорректно. По завершению процедуры появится окно с надписью «Включён режим отладки» Это значит, что модуль отработал и режим отладки можно отключить.

Не забывайте снимать флажок «Режим отладки», иначе модуль не будет работать в штатном режиме.

Теперь в папке с программой обычно это

C:\Program Files (x86)\DataExpress

вы сможете найти файл с именем

OCRDebug.rq

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

Именованные сущности

Под именованной сущностью (named entity) следует понимать некоторый заранее зафиксированный набор — например, персоны, локации, организации, даты и так далее. Фактически именованная сущность это слово или словосочетание обозначающее предмет или явления определенной категории. Модуль находит и выделяет именованные сущности в тексте и возвращает их списком. Пользователь может использовать их по своему усмотрению. Самый логичный сценарий - это внесение сущностей в базу данных.

Зачем нужны именованные сущности?

На самом деле использование именованных сущностей может сильно экономить время и нервы пользователя. Ведь фактически - это очень удобный способ автоматизации внесения данных в базу. Наглядно это продемонстрировано в базе данных «Электронный архив». Вы просто сканируете документ, а многие важные его реквизиты типа: даты, люди, организации, суммы, находит модуль и записывает в базу данных. Это сильно облегчает задачу оператору, который, в противном случае должен будет заносить все эти данные вручную. Ведь без них теряется весь смысл электронного архива, вы не сможете нормально организовать поиск и выборку документов только по их сканам, так как сам по себе файл изображения не несёт никакой сущностной информации о документе.

Сущности, используемые в модуле

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

Все сущности разделены на группы.

Даты - список дат.

Персоны - список людей. В него включены: фамилия, имя, отчество, дата рождения, пол (определяется по ФИО).

Организации - список организаций. В него кроме наименования и организационно-правовой форма (ООО, ЗАО, СНТ …) включены реквизиты (инн, огрн, адреса и пр.). Для организаций-банков также указываются банковские реквизиты (БИК, р/с, к/с …). В эту же группу включены государственные учреждения и воинские формирования.

Uri - тоже список в котором могут быть: www, email, ISBN, УДК, ББК, ICQ; банковские реквизиты (бик, р/с, к/с …), реквизиты юр лица (инн, огрн …).

Телефоны - список телефонов.

Деньги - список денежных сумм с указанием валюты.

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

"persons" : 
	[
      {
        "attributes" : [
          {
            "name" : "SEX",
            "value" : "MALE"
          },
          {
            "name" : "LASTNAME",
            "value" : "КАРПЕНКО"
          },
          {
            "name" : "FIRSTNAME",
            "value" : "АЛЕКСАНДР"
          },
          {
            "name" : "MIDDLENAME",
            "value" : "ПЕТРОВИЧ"
          }
    ]
	
    "organizations" : 
	[
      {
        "attributes" : [
          {
            "name" : "TYPE",
            "value" : "ООО"
          },
          {
            "name" : "TYPE",
            "value" : "общество с ограниченной ответственностью"
          },
          {
            "name" : "NAME",
            "value" : "Рога и копыта"
          }
        ],
        "originText" : "ООО «Рога и копыта»"
      },
    ]

Вы можете заметить, что у «Персоны» есть атрибуты: пол, фамилия, имя, отчество, а у «Организации» атрибуты тип и имя. Это далеко не полный перечень возможных атрибутов. Он сильно изменяется от документа к документу и сильно зависит от типа сущности.

Сохранение сущностей в базу

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

Ячейки «Выражение сущности» и «Выражение атрибута» могут содержать выражения, которые отвечают за обработку того или иного элемента сущности. Выражение сущности будет вычисляться каждый раз, когда модуль нашёл в вашем документе сущность. Выражение атрибута будет вычисляться каждый раз когда модуль нашёл очередной атрибут у сущности.

Чтобы понять в каком порядке вычисляются выражения обратимся к приведённому выше примеру сущности «ООО Рога и копыта». У этой сущности есть всего три атрибута: два атрибута - тип и один - имя. Модуль, встретив данную сущность, сначала вычислит выражение сущности (ячейка «Выражение сущности»), затем три раза подряд вычислит выражение атрибута (ячейка «Выражение атрибута»). И так будет вычисляться каждая встреченная в тексте документа сущность. Если в таблице модуля «Именованные сущности» нет инструкций для какой-то категории сущности, то модуль просто проигнорирует её, даже если сущности этой категории найдутся в тексте распознаваемого документа.

Примеры работы с сущностями вы можете найти в демонстрационной базе «Именованные сущности».

Требования к изображению

Изображение документа должно соответствовать следующим требованиям:

  • Поддерживаемые форматы файлов: JPEG, PNG, PDF.
  • Максимальный размер файла: 1 МБ.
  • Размер изображения не должен превышать 20 мегапикселей (длина x ширина).

При работе с документом формата pdf фото не распознаётся и не загружается на форму.

Ошибки

При работе модуля могут возникать ситуации, требующие вашего вмешательства. В таком случае программа оповестит вас соответствующим сообщением, например

Как правило, из текста сообщения понятно, что требуется сделать. В приведённом примере программа сообщает, что модуль не смог авторизоваться и просит проверить корректность ввода ключа. В строке Request содержится идентификатор запроса, а в строке MoscowTime дата и московское время. Если вам самостоятельно не удалось устранить проблему, то передав (на электронную почту или на форуме) мне номер запроса и время я смогу вам помочь.

Нажав Ctrl+C при активном окне с ошибкой вы скопируете весь текст в окне в буфер обмена и сможете вставить его в любой документ (письмо) нажав Ctrl+V. Не нужно мучиться и перепечатывать текст из окна.

Получить ключ

Скачать