LINUX.ORG.RU

ScanTailor 0.9.3

 , ,


1

0

Относительно недавно вышла очередная версия свободной кросс-платформенной программы для обработки отсканированных книг ScanTailor 0.93.

Всякий, сканировавший когда-либо книгу для перевода в djvu, знает, что чтобы получить хорошее качество, после сканирования книгу нужно специальным образом обработать. То есть, разрезать разворот на две страницы, удалить чёрные полосы по краям, выровнять строчки по горизонтали, удалить шум и перевести в ч/б. После такой обработки и читать приятно, и размер файлов значительно меньше.

ScanTailor — первая и пока единственная кросс-платформенная программа, обрабатывающая сканы для djvu в пакетном режиме, с графической оболочкой, выпущенная под свободной лицензией. Пока пакет scantailor есть только в ALT Sisyphus.

>>> Подробности

Идею одобряю, очень нужная софтина. Правда пока под линь альтернативы связке DjVU Express Ed + FineReader + DjVuOCR для создания качественных djvu нет, но может быть когда-нибудь...

petrosyan ★★★★★
()
Ответ на: комментарий от ip1981

#!/bin/bash

set -u
set -e

script=$(basename "$0")
outfile='auto'
debug='no'

usage()
{
    cat <<USAGE
Usage: $script [options] <directory>

Options (defaults are in bracket):

    -o file       Resulting DjVu file ($outfile)
    -d            Debug: do not remove temporary files ($debug)

    -h            This help message

    <directory>   Contains images (e. g. tiff's).
                  It must contain only image files
                  named in order of they must
                  appear in DjVu document.

USAGE
exit 0

}

error()
{
    echo "$@" >&2
    exit 1
}

while getopts ho:d opt; do
    case $opt in
        o) outfile=$OPTARG;;
        d) debug='yes';;
        *) usage;;
    esac
done
shift $(expr  $OPTIND - 1)

cwd=$(pwd)
for d in "$@"; do
    [ -d "$d" ] || error "No such directory: $d"
    dir=$(basename "$d")
    if [ "$outfile" == 'auto' ]; then
        out="$cwd/$dir.djvu"
    else
        out=$outfile
    fi
    echo -n "Making $out: "

    pushd "$d" >/dev/null
        files=$(ls)
        for f in $files; do
            djv=$(echo "$f" | sed 's,\..*$,.djvu,')
            echo -n "$djv "
            cjb2 -clean "$f" "$djv"
        done
        echo; echo

        djvm -c "$dir.djvu" $(ls -1 *.djvu | sort -n)
    popd >/dev/null

    mv "$d/$dir.djvu" "$out"

    if [ "$debug" != 'yes' ]; then
        pushd "$d" >/dev/null
            rm *.djvu
        popd >/dev/null
    fi

done



exit 0

ip1981 ☆☆
()
Ответ на: комментарий от ip1981

#!/bin/bash

shopt -s nullglob
set -e
set -u

VERBOSE=0
OUTDIR=$(mktemp -d -p /tmp/ djvu2img.XXXXXX)
FORMAT=pbm
ZEROS=4

usage()
{
    cat << EOF
Extract DjVu pages to image files.
Input: bundled or indirect DjVu files
Output: 001.$FORMAT, 002.$FORMAT and so on.

Usage:  $(basename "$0") [options] file.djvu [page list]

Options (defaults in brackets):
    -o dir    Output directory ($OUTDIR)
    -f fmt    Image format: pbm,pgm,ppm,pnm,rle,tiff ($FORMAT)
    -z num    Additional number of leading zeros ($ZEROS)
    -v        More verbose
    -h        This help message

EOF
    exit 0
}

[ "$1" == '' ] && usage

while getopts vho:f:z: opt; do
    case $opt in
        v) ((VERBOSE += 1));;
        o) OUTDIR=$OPTARG;;
        f) FORMAT=$OPTARG;;
        z) ZEROS=$OPTARG;;
        *) usage;;
    esac
done
shift $(expr  $OPTIND - 1)

if [ ! -d "$OUTDIR" ]; then
    echo "Directory $OUTDIR doesn't exist." >&2
    exit 1
fi

case $FORMAT in
     pbm|pgm|ppm|pnm|rle|tiff);;
     *) echo "Unknown image format ($FORMAT)"; exit 1;;
esac


f="$1"; shift
if [ ! -f "$f" ]; then
    echo "File $f doesn't exist." >&2
    exit 1
fi

pages="$*"
if [ -z "$pages" ]; then
    npages=$(djvudump "$f" |  grep -P '.+\.djvu?' | wc -l)
    pages=$(seq 1 $npages)
fi

((ZEROS +=1 ))

for p in $pages; do
    img=$(printf "%0${ZEROS}.0f.${FORMAT}" $p)
    [ "$VERBOSE" -gt 1 ] && echo -n "$img "
    ddjvu -format=$FORMAT -page=$p "$f" "$OUTDIR/$img"
done
    [ "$VERBOSE" -gt 1 ] && echo

exit 0

ip1981 ☆☆
()
Ответ на: комментарий от ip1981

#!/bin/bash

set -u
set -e

zeros=4
nstart=1
nstep=1
script=$(basename "$0")
action='no'

usage()
{
    cat <<USAGE
Usage: $script [options] file1 [ file2, ... ]

Options (defaults are in brackets):
    -s <number>      Starting number ($nstart)
    -i <number>      Increment number ($nstep)
    -z <number>      Additional number of leading zeros ($zeros)
    -A               Do the real job (actually move files)
    -h, -?           This help message

Example:
    $script -A -z 4 -s 1 -i 1 0027-1.pbm 0027-2.pbm
    will move this files to: 0001.pbm 0002.pbm

USAGE
exit 0

}

while getopts s:i:z:Ah? opt; do
    case $opt in
        s) nstart=$OPTARG;;
        i) nstep=$OPTARG;;
        z) zeros=$OPTARG;;
        A) action='yes';;
        *) usage;;
    esac
done
shift $(expr  $OPTIND - 1)

fformat="%0${zeros}.0f"
n=$nstart

for f in "$@"; do
    new=$(printf "$fformat" $n)
    ext=$(echo "$f" | grep -o '\.\w*$') || ext=''
    if [ "$action" == 'yes' ]; then
        mv "$f" "${new}${ext}"
    else
        echo "mv \"$f\" ${new}${ext}"
    fi
    ((n += nstep))
done

exit 0

ip1981 ☆☆
()
Ответ на: комментарий от ip1981

> unpaper

пасибо, не знал. Самому не надо, но есть кому порекомендовать.

firsttimeuser ★★★★★
()
Ответ на: комментарий от ip1981

>unpaper, imagemagic
ну это скорее для Ъ. Я конечно понимаю, что консоль рулит, но имхо для обработки графики она не удобна

petrosyan ★★★★★
()
Ответ на: комментарий от petrosyan

> консоль рулит, но имхо для обработки графики она не удобна

Уважаемый путает обработку с созерцанием. К тому же в данном случае суть обработки предельно ясна: чистка, выравнивание, нарезка.

ip1981 ☆☆
()
Ответ на: комментарий от ip1981

Выравнивание теста - да можно и скриптом сделать, разделить разворот книги - возможно, но не кропать скан 600-страничной книги, сделанный на бытовом сканере в половине случаев просто не реально, слишком уж много лишнего пообрезает, проще в ручную. Да и вообще проще "созерцать" сразу что происходит, чем потом разгребать то, что наделал скрипт. О чем говорю прекрасно знаю ибо сканирую не просто много, а ОЧЕНЬ много и перепробовал кучу разных способов обработки и консольных и графических.

petrosyan ★★★★★
()
Ответ на: комментарий от ip1981

Когда-нибудь приходилось разрезать книгу и убирать поля консольной утилитой? А лучшей программой для этой затеи - ScanKromsator'ом?

Разница в трудозатратах и геморрое колоссальная. Дело в том, что нет и видимо не будет хорошего обрезающего алгоритма, дающего 0 ложных срабатываний на 600-т страничной книге. А у unpaper и алгоритм говно, и результат видно через жопу - нет "превьюшки", где видно, обрезала unpaper номера страниц или их там вообще не было.

constRS
() автор топика

Прошу прощения, что раскрываю тему не в первом комментарии - пропустил момент выхода новости.

Обработка сканированной технической литературы - а это то, для чего предназначен ScanTailor - дело, В ПРИНЦИПЕ не автоматизируемое до конца. Поэтому умные люди делают "полуавтомат" - создают программу, пользуясь которой человек может максимально быстро и удобно резать, очищать и т.д.

Консольные программы тут не подходят совершенно, т.к. на среднего качества 300 страничной книжке их алгоритмы ошибаются на 50 страницах, разбросанных по книжке. И работа с, к примеру, unpaper - первичный прогон, затем выискивание дефектных страниц (не очень тривиальное дело) и траходром с gimpо-подобной программой.

В универсальном комбайне типа ScanTailor программа режет страницы по алгоритму аля unpaper и позволяет УДОБНО и БЫСТРО проконтролировать и изменить результат. Это НАШ выбор.

На данный момент наилучшей программой является небезызвестный ScanKromsator камрада Bolega. Именно им обработано подавляющее большинство книг библиотеки Колхоза. Однако:

1) Тексты его закрыты.

2) В нём есть глюки и непонятности.

3) Под wine он работает плохо.

Поэтому появление ScanTailor можно только приветствовать.

constRS
() автор топика

Автоматизация, однако. В принципе, да, нужно. Связка imagemagick+feh+bash затрахала, чессно. Еще на 1 томе Пезенти (800+ страниц :( )

ZloySergant
()

гентушники берут в оверлее arcon и ждут в основном дереве

prizident ★★★★★
()

Почему-то эта программа при обработке только лишь 2 страниц сожрала 1 гигабайт памяти. Это так должно быть?

karamba
()

Ниасилил сборку. В CMakeLists.txt сидят какие-то злые команды QT4_*. Авторам пожелание: или доведите до ума сборочный скрипт (чтобы он работал не только в вашем любимом дистре), или суньте в репу готовый Makefile. Хотя, конечно, использование cmake само по себе заставляет задуматься: а нужна ли прожка от таких граждан?

Rexy-Craxy
()
Ответ на: комментарий от karamba

> Почему-то эта программа при обработке только лишь 2 страниц сожрала 1 гигабайт памяти. Это так должно быть?

Пожелания и комментарии автору: http://apps.sourceforge.net/phpbb/scantailor/

Какие хоть страницы? Разворот 600 dpi, серая шкала - примерно пол гига и занимает. Если с промежуточными буферами - будет и больше.

constRS
() автор топика
Ответ на: комментарий от Rexy-Craxy

> Хотя, конечно, использование cmake само по себе заставляет задуматься: а нужна ли прожка от таких граждан?

Не нравится - не используй - чай демократия на дворе.

constRS
() автор топика
Ответ на: комментарий от Rexy-Craxy

> Ниасилил сборку.

Можешь комментировать не как сопливый пионер? Т.е. предварительно задумавшись, как другие дяди будут воспроизводить проблему?

Ответь на вопросы:

1) Твой дистрибутив. 2) Какими командами собирал? 3) Собирал из tgz или srpm? 4) На чём остановилась сборка?

constRS
() автор топика
Ответ на: комментарий от Rexy-Craxy

> Юмористы. А ключ от квартиры?

Ещё раз - детские вопли идут стройными рядами на юг. Можешь помочь - помоги, нет - не вякай.

constRS
() автор топика

>То есть, разрезать разворот на две страницы, удалить чёрные полосы по краям, выровнять строчки по горизонтали, удалить шум и перевести в ч/б.

Я одного не понял: а нафига djvu? У него как раз основное достоинство в минимальных телодвижениях при сканах. При обработке все же tiff+pdf будет получше.

x-com
()
Ответ на: комментарий от constRS

> 1) Твой дистрибутив. 2) Какими командами собирал? 3) Собирал из tgz или srpm? 4) На чём остановилась сборка?

1) Slackware-12.2

2) cmake .

3) tar.gz

4) CMake Error at CMakeLists.txt:178 (QT4_WRAP_UI): Unknown CMake command "QT4_WRAP_UI".

-- Configuring incomplete, errors occurred!

Разумно предположить, что в слаковской стандартной расфасовке cmake нет расширений для 4-й КуТэ, бо она в дистр не входит.

На всякий случай-1: qt4 в системе есть, нормальным прогам достаточно просто указать пути к хедерам-либам при сборке.

На всякий случай-2: доводилось быть мейнтейнером/сборщиком спец. LiveCD-дистров, в т.ч. под зоопарк deb/rpm/tgz. Поэтому если говорю: косяк в скриптах сборки -- значит косяк в скриптах сборки :P

Rexy-Craxy
()
Ответ на: комментарий от constRS

> детские вопли идут стройными рядами на юг

полегче на поворотах

Rexy-Craxy
()
Ответ на: комментарий от Rexy-Craxy

Вот теперь речь не мальчика, но мужа!

Спасибо, буду посмотреть, отпишу автору программы.

constRS
() автор топика
Ответ на: комментарий от HighwayStar

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

HighwayStar ★★★★★
()

Лучше бы дали машины с полноценными процессорами. Тогда была бы гарантия, что они не поставят туда венду.

Minoru ★★★
()
Ответ на: комментарий от HighwayStar

нашел иконку в resources/icons/aqua-sphere.svg

как сконвертировать ее в png разных размеров, 32,48,64 ?

при тупом convert resources/icons/aqua-sphere.svg aqua-sphere.png получается ерунда - картинка размером 744x1052

HighwayStar ★★★★★
()

Ну что-ж покритикую :) единственное чего мне не хватило это кнопки чтобы "Полезную область" можно было бы применить ко всем страницам. :( А так респект за полезную утилиту.

angel_il ★★★★
()
Ответ на: комментарий от HighwayStar

Лучше эту не использовать - она в программе применяется при указании/проверке угла поворота. На мой взгляд, лучше взять resources/icons/two_pages_selected.png

constRS
() автор топика
Ответ на: комментарий от HighwayStar

Я к тому, что aqua-sphere вообще не отражает цель программы. В идеале, на иконке должны быть сканер и книжка. Но её ведь рисовать придётся. А из поставки наиболее близкая - разворота в две страницы - типа их разрезаем.

Можно взять и resources/icons/right_page_plus_offcut_selected.png Рисунок простой, и по аналогии легко нарисовать любой размер подобного рисунка.

constRS
() автор топика
Ответ на: комментарий от TI_Eugene

> Для Suse 11.1 сейчас будет.
Для сусе пока не будет - надо проставить правильные категории в desktop.
Сейчас стоит Qt;Utility;
Идеи есть?

Сразу для тех, кто сначала пишет, потом думает - в OBS определенный, прибитый гвоздями список категорий.

TI_Eugene ★★
()

еще одна толковая программа в копилку линуксоида

bioreactor ★★★★★
()
Ответ на: комментарий от ip1981

ip1981, это звездец в чистом виде. Я никогда так заморачиваться не буду. Проще уж JPEG оставить, чем делать ЭТО. Про обычных смертных, которые не поймут это, я вообще молчу.

Если идти этим путём, то можно и Фотошоп/Gimp заменить на 100.000 скриптов, да, без созерцания, да, теоретически всё сделать можно. Но ни один человек в здравом уме это делать не будет.

DOKA
()
Ответ на: комментарий от Rexy-Craxy

>Я так скажу: а соберите-ка ее под Слакой (Qt4 собрать-установить по умолчанию под /usr/local)

Молодец, красноглазик, жалко Патрик о таком красивом и оригинальном решении не знает и собирает Qt4 какими-то хитрыми методами.

dn2010 ★★★★★
()

Хорошая штука.
ленивый вариант запустить под wine, не проканал, текст невиден.
Ждем ебилдов, а точнее deb.

Frolic
()
Ответ на: комментарий от x-com

> Я одного не понял: а нафига djvu? У него как раз основное достоинство в минимальных телодвижениях при сканах. При обработке все же tiff+pdf будет получше.

dfvu для хранения вообще-то используется

namezys ★★★★
()
Ответ на: комментарий от Rexy-Craxy

> Хотя, конечно, использование cmake само по себе заставляет задуматься: а нужна ли прожка от таких граждан?

Для тех, кто любит пожеще есть консоль :)

namezys ★★★★
()
Ответ на: комментарий от Rexy-Craxy

> На всякий случай-1: qt4 в системе есть, нормальным прогам достаточно просто указать пути к хедерам-либам при сборке.

В нормальной дистрибутиве если система сборки должна сама искать библиотеку, она ее и ищет

namezys ★★★★
()

Отличная новость. Удачи проекту!

MMouXe
()
Ответ на: комментарий от constRS

И я тоже не осили, походу ошибка не только для слаки, народ соберите кто нить deb.

1) kubuntu 8.10

2) cmake .

3) tar.gz

4) CMake Error at CMakeLists.txt:178 (QT4_WRAP_UI):
Unknown CMake command "QT4_WRAP_UI".



CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
JPEG_INCLUDE_DIR
used as include directory in directory /home/folic/scantailor-0.9.3
used as include directory in directory /home/folic/scantailor-0.9.3/boost
used as include directory in directory /home/folic/scantailor-0.9.3/boost/libs/test
used as include directory in directory /home/folic/scantailor-0.9.3/foundation
used as include directory in directory /home/folic/scantailor-0.9.3/imageproc
used as include directory in directory /home/folic/scantailor-0.9.3/imageproc/tests
used as include directory in directory /home/folic/scantailor-0.9.3/tests
JPEG_LIBRARY
linked by target "imageproc_tests" in directory /home/folic/scantailor-0.9.3/imageproc/tests
linked by target "tests" in directory /home/folic/scantailor-0.9.3/tests
PNG_INCLUDE_DIR
и т.д.

Frolic
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.