Извлечение отдельных вопросов из pdf и преобразование в изображения

Я хочу извлечь изображение для каждого вопроса в .pdf (экзаменационная работа , подобная этой ), чтобы они были разделены следующим образом:

пример изображения вопроса

Так, например, q1.png для вопроса 1, как указано выше, и снова для вопроса 2, 3 и т. д.

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

Есть ли какое-нибудь программное обеспечение, которое может помочь мне в этом? Или хитрый метод или облегчение?

Adobe Acrobat DC позволяет мне обрезать все страницы до нужной ширины и расстояния от верхней части каждой страницы, и я могу сохранить их все как отдельные файлы .jpeg — это почти то, что мне нужно, за исключением того факта, что высота вопросов различается. .

Ответы (2)

Вы можете использовать различные распространенные инструменты Unix для манипулирования данными, хотя усилия могут не стоить того, если исходные PDF-файлы сильно различаются. Я пробовал следующее:

Преобразуйте pdf в PostScript, которым проще манипулировать, используя pdf2ps (часть ghostscript):

pdf2ps Question-paper.pdf out.ps

Просматривая этот файл, вы можете увидеть, как горизонтальные линии (на которых нужно написать ответ) нарисованы строкой подчеркивания: (_____________________________________________________________________________)

Используйте sed для преобразования подчеркиваний в пробелы:

sed <out.ps '/^(___________________________________________/s/_/ /g' >out2.ps

(Я попытался удалить строку, но код PostScript немного неясен и больше не работает, так что это проще всего). Теперь у нас есть страницы, которые мы можем преобразовать в изображения png с помощью ImageMagick:

convert -background white -alpha remove out2.ps -crop 450x500+40+40 -trim pic%02d.png

Это создает файлы pic01.png и т. д., по одному на страницу, обрезая их до прямоугольника размером 450x500 и смещением xy +40+40, а затем обрезая пробелы. Это оставляет видимым только вопрос или на странице продолжения остается только текст: «вопрос N продолжается». Вы можете обнаружить эти нежелательные изображения и удалить их по их небольшому размеру, который вы можете получить из

identify pic*.png

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

ЕСЛИ во всех документах есть только номер вопроса в определенном диапазоне, скажем, первые 50 пикселей при преобразовании в изображение, тогда вы можете использовать ImageMagick и, возможно, немного сценариев (я бы использовал python ) , чтобы:

  1. Преобразуйте PDF в последовательность изображений (по одному на страницу), а затем
  2. Для каждого изображения создайте полосу, которая должна содержать только номера вопросов.
  3. Создайте гистограмму этой полосы и определите, как далеко находится что-то в этой полосе (возможно, с минимальной высотой для подсчета). Это даст вам строку, в которой начинается вопрос.
  4. Затем вы можете использовать эти числа и предпочтительную ширину, чтобы разрезать изображения на вопросы.
  5. Вам также может понадобиться сложить изображения, где вопрос начинается на одной странице и продолжается на следующей, вы можете идентифицировать их с тем фактом, что на странице что-то есть (снова гистограмма, но на этот раз по всей ширине страницы). изображение), то есть над номером первого вопроса на этой странице, как указано выше .

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

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

В этой статье также рассматривается ряд инструментов Python, которые вы также можете использовать, или вы можете просто разделить свои документы на страницы в виде изображений и использовать numpy/scipy , чтобы найти начало/конец.

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