В этой статье мы узнаем, как преобразовать изображение (содержащее простую форму) в HTML-форму с помощью Amazon Textract и NodeJS. Amazon Textract - это сервис, который автоматически извлекает текст и данные из отсканированных документов. Это оптическое распознавание символов (OCR) на базе искусственного интеллекта, которое упрощает точное извлечение содержимого из изображения.

Одна из сильных сторон Textract - способность идентифицировать форму на изображении и извлекать данные с соответствующими отношениями. Это означает, что если мы посмотрим на базовую форму:

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

Довольно круто, правда! Но получить желаемый объект JSON не так просто, как вызвать одну функцию из API Textract, и в этой статье мы рассмотрим упрощенное решение для этого.

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

Обзор:

  1. Загрузите изображение в хранилище S3
  2. Анализируйте документ прямо из корзины S3 с помощью Textract API
  3. Используйте AWS Textract Helper для извлечения данных формы в виде объекта JSON.
  4. Отображение результатов в форме HTML

1. Создайте простое приложение NodeJS:

Мы собираемся использовать генератор экспресс-приложений. Он автоматически создает проект с html-представлениями (используя pug) и системой маршрутизации. Таким образом, мы можем легко добавить функцию загрузки и опубликовать результат в другом представлении.

mkdir aws-textract-app
cd aws-textract-app
npx express-generator --view=pug
npm install

Мы просто создали папку и установили экспресс-генератор со всеми зависимостями npm. Вот как должна выглядеть структура вашего проекта:

2. Загрузите изображение в хранилище S3:

Для простоты мы будем использовать изображение, которое есть в начале статьи, которое содержит 4 поля (должность, имя, фамилия и адрес).

Во-первых, давайте добавим все необходимые элементы для загрузки файла в представление index.pug.

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

Теперь, когда у нас есть HTML-часть, давайте продолжим и начнем писать логику для загрузки файла.

Начнем с установки всех зависимостей, чтобы перехватить файл и загрузить его в хранилище S3.

npm i formidable
npm i fs
npm i aws-sdk

В папке маршрутов вы должны найти файл index.js, который уже имеет следующий код:

В тот же файл мы включим все зависимости, которые мы только что установили, и добавим новый почтовый маршрутизатор, который обрабатывает пост-действие «fileupload» в представлении index.pug.

А ниже мы добавим реализацию логики загрузки:

Краткое изложение того, что мы только что сделали:

  1. Разобрал форму с помощью грозного.
  2. Прочтите содержимое файла и присвойте его как значение свойству Body (вместе с другими обязательными свойствами) в параметрах загрузки AWS.
  3. Создана асинхронная функция «s3Upload», которая возвращает результаты в переменной «s3Content». Информация в этой переменной будет использована для чтения Textract на следующем шаге.

На этом этапе вы должны иметь возможность запустить приложение Node и загрузить изображение прямо в корзину S3. Хорошая работа!

3. Анализируйте документ прямо из корзины S3 с помощью Textract API.

Давайте создадим функцию под названием «documentExtract», которая принимает ключ объекта S3 в качестве параметра, а затем возвращает все данные, извлеченные из изображения.

Подобно процессу загрузки S3, который мы выполняли ранее, API Textract потребует информацию о вашем регионе, ключе доступа, имени сегмента ...

Вы заметите, что у нас есть свойство под названием «FeatureTypes» и значение «FORMS», это очень важно, поскольку оно позволяет Textract творить чудеса и возвращать наборы Key-Value, чтобы помочь нам связать поля ввода с соответствующими метками (например, «Программное обеспечение Разработчик »принадлежит« Позиции »,« Планета Земля »принадлежит« Адресу »и т. Д.)

Теперь давайте вставим эту функцию сразу после процесса загрузки S3 и зарегистрируем результаты. Наш код index.js пока должен выглядеть так:

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

Всякий раз, когда BlockType имеет значение KEY_VALUE_SET, это означает, что у него есть свойство отношения, которое связывает связанные объекты вместе. В этом конкретном блоке мы можем определить взаимосвязь между Должностью и Разработчик программного обеспечения, просмотрев Идентификаторы в объекте Взаимосвязи. Чтобы понять, как это работает более подробно, вы можете ознакомиться с Руководством для разработчиков Amazon.

4. Используйте AWS Textract Helper для извлечения данных формы как объекта JSON.

Чтобы упростить процесс поиска всех взаимосвязей и избавить вас от написания нескольких функций, я создал модуль AWS Textract Helper, который выполняет работу за одно нажатие.

Давайте установим модуль и включим его в наш файл index.js.

npm i aws-textract-helper

В API доступно несколько функций, но пока вам нужен только createForm. Он принимает два параметра: данные, которые мы получили от функции «documentExtract», и конфигурацию (необязательно), которая позволяет обрезать нежелательные символы в ключах формы, такие как двоеточие или дополнительный пробел.

5. Отображение результатов в форме HTML.

И последнее, но не менее важное: давайте визуализируем представление «загрузка файла» с данными, сгенерированными вспомогательной функцией textract. Наш окончательный код для функции загрузки должен выглядеть так:

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

Заключение:

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

Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы или отзывы, оставьте комментарий ниже.

Первоначально опубликовано на https://muhimasri.com 24 марта 2020 г.