Преобразование таблицы слов из изображения в текст Vision API - PullRequest
0 голосов
/ 04 сентября 2018

Example table

Итак, используя Google Vision API, я пытаюсь преобразовать эту таблицу с помощью Nodejs. Было бы лучше, если бы результатом был массив типа [hi: bonjour, bye: au revoir ...]. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я получаю слова и их координаты от Google только при загрузке этого изображения. Используя какое-то хакерское решение, мне удалось объединить слова. Например: мне удалось объединить «au» и «revoir» в «au revoir», но решение, которое у меня есть, абсолютно не основательно.

У кого-нибудь есть простое решение этой проблемы? Боюсь, я думаю, что слишком сложно, но я не могу найти много примеров в Интернете.

Любая помощь будет принята с благодарностью.

Мой текущий код: https://pastebin.com/jY5jDrqD (да, это беспорядок и не очень солидно)

1 Ответ

0 голосов
/ 05 сентября 2018

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

Способ подойти к этому:

  1. Возьмите вашу коллекцию сущностей и разбейте их на строки
  2. Для каждой строки отсортируйте их по позиции x
  3. Определите, какие объекты являются частью ключа, а какие - частью значения

Разделение их на ряды, вероятно, будет самой сложной частью.

Я бы предложил подойти к нему следующим образом:

  1. Возьмите вашу первую сущность, вычислите среднюю точку между ее верхним и нижним значениями y и ее общей высотой, поместите ее в первую группу строк
  2. Возьмите вторую сущность и вычислите ее среднюю точку, затем для каждой группы строк проверьте, находится ли средняя точка второй сущности внутри нее. (Я бы предложил сделать группу строк классом, который содержит сущности в массиве внутри нее и может сообщать общее верхнее и нижнее значение y для этой строки на основе уже существующих в ней сущностей. Вы можете найти средние точки усреднения сущностей и высота лучше всего подходит для этого, или, возможно, просто взять максимум и мин, или, возможно, какой-то более сложный подход)
  3. Если ваша вторая сущность выпадает наружу, она помещается в новую группу строк
  4. Повторите это со всеми последующими объектами, пока все они не будут помещены в разные группы строк
  5. Вы могли бы рассмотреть возможность сделать второй проход, чтобы проверить, требуют ли слияния некоторые группы строк

Вещи, которые вам, возможно, придется остерегаться - знаки препинания, распознаваемые как их собственная сущность и падающие по краям двух групп строк.

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

...