Оптимизация сканирования в небольшом офисе

от автора

Доброе время суток, сообщество!

Решил рассказать как в одной рабочей группе был организован «быстрый» перевод бумажного документа в цифровой вид.

Для начала расскажу что есть. А есть рабочая группа (около 10 компьютеров) во главе с отдельно стоящим системным блоком, гордо именуемым «сервер». На сервере установлена 64-разрядная Ubuntu Server с настроенным Samba.

Как раньше сканировали менеджеры: включался компьютер, к которому был подключен планшетный сканер HP ScanJet 2400 (если не был включен) и сканировался документ постранично с указанием места сохранения файла.
Очевидные недостатки: необходимо было включать компьютер (а затем его выключать), тратилось время на ожидание загрузки ОС, программы, долгий разогрев сканера перед первым сканированием.

Как это стало: менеджер подошел к сканеру, вставил документы пачкой (до 20 листов), нажал кнопку на сканере, забрал документы. Пока вернулся на своё место сканы уже в шаре.
Время получения цифровой копии уменьшился в десятки раз.

Реализация

Необходим был недорогой документ-сканер с возможность подключения к linux. Выбор пал на модель ADS-2100 фирмы Brother.
image
Итак, подключаем сканер usb-кабелем к серверу и настраиваем.

1. Смотрим, подключен ли сканер

lsusb 
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 004: ID 03f0:3817 Hewlett-Packard LaserJet P2015 series Bus 001 Device 002: ID 04f9:60a1 Brother Industries, Ltd Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2. Заходим на сайт производителя www.brother.ru/ и по ссылкам переходим на страницу welcome.solutions.brother.com/bsc/public_s/id/linux/en/index.html для загрузки драйверов и программ для Linux
Ищем Download → Scanner Driver /ADS Driver / Scan-Key-Tool → for ADS models файл brscan4 64bit формата deb, а также файл scan-key-tool 64bit такого же формата
Я качал драйвера с рабочего компьютера, потом просто закинул их в шару на сервере и оттуда устанавливал.

3. Переходим в директорию со скачанными файлами и устанавливаем драйвер сканера

dpkg -i brscan4-0.4.1-3.amd64.deb
Выбор ранее не выбранного пакета brscan4. (Чтение базы данных ... на данный момент установлено 108594 файлов и каталогов.) Распаковывается пакет brscan4 (из файла brscan4-0.4.1-3.amd64.deb)... Настраивается пакет brscan4 (0.4.1-3) ... This software is based in part on the work of the Independent JPEG Group.

4. Даем разрешения для сканирования под обычным пользователем
Открываем файл /lib/udev/rules.d/40-libsane.rules и до комментария "# The following rule will disable USB autosuspend for the device" добавляем

# Brother scanners ATTRS{idVendor}=="04f9", ENV{libsane_matched}="yes"

5. Перезагружаем сервер

6. Аналогично п.3 устанавливаем Scan-key-tool

dpkg -i brscan-skey-0.2.4-0.amd64.deb
Выбор ранее не выбранного пакета brscan-skey. (Чтение базы данных ... на данный момент установлено 108623 файлов и каталогов.) Распаковывается пакет brscan-skey (из файла brscan-skey-0.2.4-0.amd64.deb)... Настраивается пакет brscan-skey (0.2.4-0) ...

7. Исправляем конфигурационные файлы. При нажатии определенной клавиши запускается команда. Это прописано в /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0.cfg
Его содержимое:

password= IMAGE="sh  /opt/brother/scanner/brscan-skey/script/scantoimage-0.2.4-0.sh" OCR="sh  /opt/brother/scanner/brscan-skey/script/scantoocr-0.2.4-0.sh" EMAIL="sh  /opt/brother/scanner/brscan-skey/script/scantoemail-0.2.4-0.sh" FILE="sh  /opt/brother/scanner/brscan-skey/script/scantofile-0.2.4-0.sh" SEMID=b

На сканере три кнопки: включение/выключение сканера, запустить сканирование и сканирование на флешку.
Опытным путем было выяснено, что за кнопку сканирования отвечает переменная FILE=
Изменяем её на

FILE="sh  /home/admin/file.sh"

Создаем скрипт /home/admin/file.sh

Скрипт

#! /bin/sh set +o noclobber # #   $1 = scanner device #   $2 = friendly name #  ## разрешение сканирования resolution=300  device=$1  ## создаем временную директорию для сканирования temp_dir=/tmp/scan_"`date +%Y-%m-%d-%H-%M-%S`" mkdir -p $temp_dir  cd $temp_dir  ## это было в скрипте производителя if [ "`which usleep  2>/dev/null `" != '' ];then     usleep 10000     else         sleep  0.01         fi  ## сканируем ## число раз сканирования =40 ## сканирование с двух сторон ## координаты для сканирования А4 ## устройство сканирования ## разрешение сканирования сделано через переменную, в примере было так ## получаемый файл в формате tiff <u>scanimage</u> --batch-count=40 --source 'Automatic Document Feeder(centrally aligned,Duplex)' -x 210 -y 297 --device-name "$device" --resolution $resolution –format=tiff  ## конвертируем все tif-ы в jpg-и с качеством 90% <u>convert</u> -quality 90% *.tif im.jpg  ## удаляем все tif-ы из директории rm *.tif  ## переименовываем jpg-и <u>exiftool</u> -d %Y-%m-%d_%H.%M-%S%%-c.%%e "-filename<FileModifyDate" $temp_dir  ## файлы больше 111 кбайт перемещаем в шару для сканированных документов ## т.о. отсеиваем листы без информации ## предел подбирается опытным путем find . -size +111k -exec mv {}  /srv/scan \;  ## удаляем директорию с оставшимися файлами rm -r $temp_dir  ## собственником скан-файлов делаем saned ## можно и не делать, тогда владелец будет root cd /srv/scan chown saned:saned *.jpg

В скрипте я подчеркнул, то чего не было в системе. Доустановим/создадим:
а) для scanimage

apt-get install libsane sane-utils 

б) для convert

apt-get install imagemagick 

в) для exifrool

apt-get install libimage-exiftool-perl 

г) создаем шару /srv/scan видную в локальной сети как //server/scan для чтения всем пользователям

Выставляем права на скрипт 600

8. Не обязательный шаг. Я изменил скрипт запуска демона для отслеживания состояния клавиш сканера /opt/brother/scanner/brscan-skey/brscan-skey следующим образом:

Было

#! /bin/sh  if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then   if [ "$2" = "2" ];then     echo '   no option                :register all MFCs'     echo '   -t (--terminate)         :terminate this tool'     echo '   -a (--add MFC)           :register the specified MFC'     echo '   -d (--delete) MFC        :exclude the specified MFC'     echo '   -p (--passwd) PASSWORD   :set the password'     echo '   -u (--username) USERNAMR :set the user name'     echo '   -l (--list)              :list the available MFCs'     echo '   -m (--mailto)            :mail address (scan to e-mail)'     echo '   --refresh                :refresh setting'     echo '   --reset                  :reset the configuration file'     echo '   --diagnosis              :print diagnosis data'     echo '   -h --help                :help'   fi   echo '   Copyright 2007-2012 Brother Industries, Ltd'   exit 0 fi  if [ "$1" = "-l" ] || [ "$1" = "--list" ]; then         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $*         exit 0 fi  if [ "$1" = "-f" ];then         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $* else         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $*& fi 
Стало

#! /bin/sh  if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then ##  if [ "$2" = "2" ];then     echo '   no option                :register all MFCs'     echo '   -t (--terminate)         :terminate this tool'     echo '   -a (--add MFC)           :register the specified MFC'     echo '   -d (--delete) MFC        :exclude the specified MFC'     echo '   -p (--passwd) PASSWORD   :set the password'     echo '   -u (--username) USERNAMR :set the user name'     echo '   -l (--list)              :list the available MFCs'     echo '   -m (--mailto)            :mail address (scan to e-mail)'     echo '   --refresh                :refresh setting'     echo '   --reset                  :reset the configuration file'     echo '   --diagnosis              :print diagnosis data'     echo '   -h --help                :help' ##  fi   echo '   Copyright 2007-2012 Brother Industries, Ltd'   exit 0 fi  if [ "$1" = "-l" ] || [ "$1" = "--list" ]; then         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $*         exit 0 fi  if [ "$1" = "-f" ];then         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $* else         /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0 $*& fi

Просто я не понял зачем нужен второй аргумент.
Добавляем этот скрипт в автозагрузку. Добавим в /etc/rc.local

/opt/brother/scanner/brscan-skey/brscan-skey

И можно его запустить:

brscan-skey

Что бы остановить демон

brscan-skey -t

9. Сделаем скрипт для периодической чистки директории сканирования

/home/admin/del.sh

#! /bin/sh  work_dir=/srv/scan archiv_dir=/srv/scan/Архив  mkdir -p $archiv_dir  ## перемещаем файлы в архив, вдруг кто-то забыл забрать документ cd $work_dir mv *.jpg $archiv_dir ## find -maxdepth 1 -type f -mtime +1 -exec mv {}  $archiv_dir \;  ## файлы старше 7 дней удаляем cd $archiv_dir find . -type f -mtime +7 -delete

Права на скрипт выставляем 740

С помощью cron можно назначить переодичность выполнения скрипта очистки. Но так как каждый день сервер после рабочего дня выключается коротким нажатием на кнопку питания, то в файл /etc/acpi/powerbtn.sh я добавил

## удаление старых сканов /home/admin/del.sh

Короткое видео, демонстрирующее работу сканера.

Спасибо за внимание!

ссылка на оригинал статьи http://habrahabr.ru/post/187168/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *