Решил рассказать как в одной рабочей группе был организован «быстрый» перевод бумажного документа в цифровой вид.
Для начала расскажу что есть. А есть рабочая группа (около 10 компьютеров) во главе с отдельно стоящим системным блоком, гордо именуемым «сервер». На сервере установлена 64-разрядная Ubuntu Server с настроенным Samba.
Как раньше сканировали менеджеры: включался компьютер, к которому был подключен планшетный сканер HP ScanJet 2400 (если не был включен) и сканировался документ постранично с указанием места сохранения файла.
Очевидные недостатки: необходимо было включать компьютер (а затем его выключать), тратилось время на ожидание загрузки ОС, программы, долгий разогрев сканера перед первым сканированием.
Как это стало: менеджер подошел к сканеру, вставил документы пачкой (до 20 листов), нажал кнопку на сканере, забрал документы. Пока вернулся на своё место сканы уже в шаре.
Время получения цифровой копии уменьшился в десятки раз.
Реализация
Необходим был недорогой документ-сканер с возможность подключения к linux. Выбор пал на модель ADS-2100 фирмы Brother.
Итак, подключаем сканер 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. Сделаем скрипт для периодической чистки директории сканирования
#! /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/
Добавить комментарий