Как избежать искажения результатов с помощью инструмента OCR pdfsandwich?

1

Обычно отсканированные страницы должны быть выровнены до применения инструмента OCR. Здесь мой вход - это страница с прямым сканированием, а выходной сигнал OCR иногда искажается, по часовой стрелке или против часовой стрелки. В моем случае использования английской книги на 260 страниц это происходит на 14 страницах.

Пример: input.pdf: input.pdf

output.pdf output.pdf

Команда:

convert -density 300 -quality 100 input.pdf -level 0%,100%,4.0 -black-threshold 75% convert.pdf && pdfsandwich -noimage -coo "-normalize  -density 300 -black-threshold 75%" convert.pdf -o output.pdf

Как я могу избежать этого искажения вывода?

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

lalebarde
источник

Ответы:

0

Благодаря Реми Ф. я смог написать это решение с помощью этого файла LaTeX, который импортирует output.pdf и вращает его:

\documentclass{article} 
\usepackage[paperwidth=6.38in,paperheight=10.32in,bindingoffset=0in,top=-0.39in,bottom=0in,left=-0.29in,right=0in,footskip=0in]{geometry}
\usepackage{graphicx}

\begin{document}

\pagestyle{empty}
\begin{figure}[t]
    \includegraphics[scale=0.233,angle=-4]{output.pdf} 
\end{figure}

\end{document}

Затем:

pdflatex output_tex.tex

Создает output_tex.pdf: введите описание изображения здесь

Было бы неплохо иметь возможность автоматически настраивать масштаб и поля, чтобы можно было автоматизировать процесс.

РЕДАКТИРОВАТЬ: я сделал некоторые успехи, чтобы получить угол наклона автоматически:

angle=`convert output.pdf -deskew 40 -format "%[deskew:angle]" info:`

Если я автоматизирую, это приведет к:

#/bin/bash
name=${1%.*}
ext=${1##*.}
convert -density 300 -quality 100 ${name}.$ext -level 0%,100%,4.0 -black-threshold 75%  ${name}_convert.$ext
pdfsandwich -noimage -coo "-normalize  -density 300 -black-threshold 75%" ${name}_convert.$ext -o ${name}_ocr.$ext
angle=`convert ${name}_ocr.$ext -deskew 40 -format "%[deskew:angle]" info:`
angle=`echo "${angle}*-1" | bc`
echo "  angle = $angle"
sed -e "s/ANGLE/$angle/" -e "s/FILE/${name}_ocr.$ext/" /var/ocr/pdfrotate.tex > ${name}_ocr_straight.tex
pdflatex ${name}_ocr_straight.tex
rm ${name}_convert.$ext ${name}_ocr_straight.tex ${name}_ocr_straight.aux ${name}_ocr_straight.log

С /var/ocr/pdfrotate.tex:

\documentclass{article}
\usepackage[paperwidth=6.38in,paperheight=10.32in,bindingoffset=0in,top=-0.39in,bottom=0in,left=-0.29in,right=0in,footskip=0in]{geometry}
    \usepackage{graphicx}
    \begin{document}
    \pagestyle{empty}
    \begin{figure}[t]
        \includegraphics[scale=0.233,angle=ANGLE]{FILE}
    \end{figure}
    \end{document}

Шкала выглядит правильно и зависит от документа. Но, к сожалению, параметры геометрии сверху и слева, которые я настроил для пробной страницы, не подходят для других страниц. Я не знаю, как их автоматизировать. Возможно, стирая исходную страницу и страницу результатов, и выполняя оптимизацию их соотношения, с верхними и левыми параметрами.

lalebarde
источник
0

У меня также была эта проблема, это связано с одной из команд, которые запускает pdfsandwich: unpaper. Алгоритм увольнения в депапере не работает. Вы можете передать параметры на бумагу через ключ -unpo, например, -unpo "-dv 0"который должен отключить выравнивание. Если ваши страницы уже четкие и готовы к распознаванию, вы можете полностью отключить всю предварительную обработку с помощью-noprepro

EkriirkE
источник