Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Linux - разное -> Сканирование из конс...

Сканируем из консоли Linux

Почему из консоли? Ведь есть XSANE!
-Потому, что в консоли можно организовать конвейер!

Скрипт обновлён 16.01.2016
Статья обновлена 28.01.2014 - в конце статьи добавил вариант решения проблемы некорректной работы convert.im6.

Приступим.

Считаем, что сканер уже установлен...

Устанавливаем необходимые приложения (если сканер установлен, то эти приложения тоже должны стоять):

apt-get install sane sane-utils

Устанавливаем совершенно ненужное приложение beep (я его буду использовать для озвучки)

apt-get install beep

Далее ставим imagemagick (пригодится для манипуляций с графическими файлами)

apt-get install imagemagick

Собственно, это всё, что необходимо!

Теперь немного автоматизации, дабы не щёлкать кучу кнопок до начала сканирования...
А именно, предлагаю вот такой баш-скрипт (не для консоли, но всё же):

#! /bin/bash
# Данный сценарий предназначен для упрощённого сканирования.
# Скрипт нужно разместить в любом доступном для пользователя каталоге и сделать его исполнимым
# После этой процедуры можно добавлять кнопку запуска на панель GNOME или MATE если в этом есть необходимость.
# Скрипт "заточен" под сканер EPSON PREFECTION V10/100, т.е конвейер ищет epkowa
# Для использования скрипта с вашим сканером необходимо в строке
# device=$(scanimage -L | awk '{print $2}' | grep epkowa | sed "s/[\`']//g");
# заменить epkowa на вашу модель
# Чтобы узнать модель вашего сканера, дайте в консоли команду scanimage -L | awk '{print $2}'
#
# Разрешение в скрипте вписано исходя из возможностей сканера
# Узнать разрешение можно командой scanimage -d ваш_сканер --help
# соответственно, необходимо исправить скрипт в строке выбора зарешений


# Проверка наличия изпользуемых в скрипте приложений
if [[ ! -f $(which scanimage) ]] || [[ ! -f $(which convert) ]]; then

    zenity --error --title="Скрипт сканирования" --text="Не установлено приложение sane или imagemagick\n\nПопробуйте установить из репозитория\nнеобходимые приложения и повторите попытку\!" --timeout="5" &
    exit 0;

fi

zenity --info --title="Скрипт сканирования" --text="Ищу сканер\!" --width 250 & pid=$!

device=$(scanimage -L | awk '{print $2}' | grep epkowa | sed "s/[\`']//g");

# Убиваем zenity по PID
kill -9 $pid

if [[ $device != "" ]]; then

# Выбор разрешения (dpi)
    dpi=$(zenity --title "Скрипт сканирования" --text "Выбери разрешение изображения (dpi)\n" --height 230 --list --radiolist --column "Выбор" --column "dpi" True 300 False 600 False 800 False 1200);

    if [[ "$dpi" = "" ]]; then
        exit 0;
    fi

    if [ ! -d $HOME/scan_images ]; then
        mkdir $HOME/scan_images ;
    fi

# Циклическое сканирование
    iter=0;
    while [ $iter == 0 ]; do
        file_time=$(date +%d-%m-%Y_%H-%M-%S) ;

        scanimage --mode Color --resolution $dpi --device-name=$device > $HOME/scan_images/$file_time.pnm ;

        zenity --question --title="Скрипт сканирования" --text="Продолжить сканирование?" --width 320;
        iter=$?;

    done

# Выводим сообщение об этапе выполнения задания, чтобы не скучно было
    zenity --info --title="Скрипт сканирования" --text="Поиск и конвертирование отсканированных файлов\!" --width 320 & pid=$!

# Конвертирование всех pnm из каталога $HOME/scan_images/ в jpg
    find $HOME/scan_images/ -maxdepth 1 -name "*.pnm" | while read ifile; do convert $ifile ${ifile%%.pnm}.jpg; done

# Удаляем все pnm в кателоге $HOME/scan_images
    rm $HOME/scan_images/*.pnm ;

# Убиваем сообщение zenity по PID для вывода следующего сообщения
    kill -9 $pid

# Сообщаем о том, где будут лежать отсканированные файлы
    zenity --info --title="Скрипт сканирования" --text="Все файлы сохранены в\n\n$HOME/scan_images" --width 320 --timeout="5" &

else

# Если сканер не обнаружен
    zenity --error --title="Скрипт сканирования" --text="Сканер не подключен\!" --width 280 --timeout="5" &

# Ни и для шику пищим системным биппером (необходимо установленное приложение beep)
    if [[ -f $(which beep) ]]; then
        beep -f 440,00 -l 100 ;
        beep -f 391,99 -l 100 ;
        beep -f 261,63 -l 100 ;
        beep -f 1 -l 1000 ;
    fi
fi
exit 0 ;

Что он делает?

Сначала проверяет наличие используемых приложений
За тем, проверяет наличие сканера.
Если он не подключен, то выводит соответствующее сообщение и благополучно завершает свою работу.
Если сканер подключен, то выводится запрос на ввод DPI (по умолчанию устанавливается 300dpi - оптимально для распознавания в Debian-6 c cuneiform-1.1.0). После этого создаётся каталог "scan_images" в домашней директории текущего пользователя (если его ещё нет).
Далее запускается программа scanimage - сканирует и сохраняет полученный файл в созданный каталог.
Файл сохраняется в формате pnm, что не совсем удобно для дальнейшего использования, поэтому
заставляем приложение convert преобразовать pnm в jpg. И сохраняем полученное изображение в тот же каталог,
но с именем, которое соответствует текущим дате и времени. Затем "подчищаем хвосты" - удаляем ненужный
файл pnm. Ну и последнее - это выводим сообщение о завершении работы и озвучиваем финал.

Как пользоваться скриптом?

Сохраняем скрипт в любом доступном месте с любым именем.
Делаем его исполнимым.
Запускаем из консоли или создаём кнопку запуска сценария.
Вот собственно и всё!

PS: Забыл важную вещь!
Дать права на выполнение скрипта можно из консоли скомандовав вот так:

chmod 755 /путь/к_скрипту

Теперь можно сканировать с минимальным нажатием кнопок!

Скрипт для сканера EPSON PERFECTION V10 можно скачать здесь. При небольшой доработке его можно использовать и для других сканеров.


Что делать если после сканирования имеем пустой каталог ~/scan_images



В Debian-7.3 Wheezy замечена некорректная работа утилиты convert (версию imagemagick сейчас сказать не могу - работаю в Debian-6).
Проверьте из косоли дав команду:

convert /путь_к_файлу.pnm /путь_к_выходному.jpg

если выдаст ошибки очень похожие на эти:

convert.im6: unable to read image data `tmp.pnm' @ error/pnm.c/ReadPNMImage/907.
convert.im6: missing an image filename `tmp.png' @ error/convert.c/ConvertImageCommand/3016.

 то нужно в скрипте заменить строку

convert  ~/scan_images/tmp.pnm ~/scan_images/$file_time.jpg ;

на

pnmtojpeg ~/scan_images/tmp.pnm ~/scan_images/$file_time.jpg ;

Так будет работать - проверил!



Опубликовано: foxadmin, Автор/источник: Сакрюкин К.В. 30 Январь 2012 21:00:38

Комментировать

Вы не залогинены! Регистрация

Комментарии

Страницы: 
[01:00:14 04.07.2017] Опубликовано Константин
foxadmin
Доброго здоровья, Александр!
Извините, что отвечаю не сразу - сейчас редко бываю на своём сайте в силу некоторых причин.
Однако, Ваш скрипт под Ваши задачи я с удовольствием опубликую здесь.
Перешлите на whitepost с подробным описанием и я его закину в раздел bash-скриптов, а ссылку с описанием дам в этой статье.
[20:29:06 23.06.2017] Опубликовано Александр
No avatar
Мне очень помогла Ваша статья. Задача была сделать пропускной пункт со сканированием паспортов, водительских удостоверений или других документов посетителей и ведением простейшей базы данных. Я допилил скрипт под задачу. Теперь сканер находится и запоминается, что сокращает время сканирования, а если меняется имя сканера - автоматически корректируется, распознаётся фамилия и подставляется в окно zenity а также удаляются сканы двухмесячной давности, чтобы хоть как-то соблюсти закон о персональных данных. Планирую ввести распечатку бланка (чека на подпись) для получения согласия с обработкой персональных данных. В блоке, где задаются параметры, описаны варианты для сканирования паспорта РФ, прав новых и старых. Скрипт отправлю на электронный адрес. Если заинтересует, разместите на сайте - вдруг кому пригодится, а то коммерческие решения весьма дороги. У меня уже функционирует на КПП неделю, выявляю недостатки.
Страницы: 

Афоризмы, мысли

"Что нашим врагам нравится, то нам вредно!"

/Сталин И.В./

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов1150 
Сегодня хитов1150 
Сегодня хостов215 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 1.01
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!