извлечение данных флажков из PDF-файлов с помощью Azure Read / OCR API - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть тысячи форм опросов, которые мне нужно отсканировать, а затем загрузить в мою систему C #, чтобы извлечь данные и ввести их в базу данных. Опросы представляют собой смесь рукописных 1) текстовых полей и 2) флажков. В настоящее время я использую Azure Read Api для извлечения рукописного текста, который должен работать нормально, например, вопрос № 4 ниже возвращает «Python» и «coding».

Итак, мой вопрос;даст ли какой-либо API Azure (чтение или распознавание текста и т. д.) возможность извлекать данные, для которых установлен флажок? например, см. вопрос № 1 ниже - мне нужна строка, возвращающая «не согласен», возможно ли это с любым API Azure или мне нужно искать в другом месте? Если да, то какой API или библиотеку я могу использовать для получения рукописных данных флажков?

Может ли кто-нибудь с iText7 или IronOCR сказать мне, позволят ли эти библиотеки извлечь данные флажков ниже?

Пример опроса:

enter image description here

1 Ответ

1 голос
/ 11 ноября 2019

Ответ на этот вопрос не слишком прост и включает создание собственного кода для самостоятельного анализа PDF-файла через стороннюю библиотеку.

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

public class CheckboxData {
    public int startX { get; set; }
    public int startY { get; set; }
    public int endX { get; set; }
    public int endY { get; set; }
    public bool IsChecked { get; set; }
}

Я бы порекомендовал использовать IronOCR до растеризация PDF в изображение.

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

Для флажков в стиле радио вам, вероятно, потребуется другой объект данных и сохраните центральный пиксель круга. Для кругов вы должны сохранить значения centreX и centreY вместе с радиусом круга и использовать алгоритм круга Брезенхема , чтобы узнать, какие пиксели вокруг него нужно проверить.

Ниже приведен пример получения координат пикселей в GIMP для местоположения курсора. Getting pixel coordinates of image file

...