Використання usb сканера в linux

Комп'ютер із сучасною версією Linux можна використовувати не тільки в якості інтернет-сервера, але і як робочу станцію для графічних робіт (наприклад, з використанням Gimp). Для цього, зокрема, необхідна можливість отримувати зображення за допомогою сканера (ви ж не будете купувати окремий комп'ютер і ставити на нього MS Windows тільки для сканування?).

Тепер ви зрозуміли, як я мучився вибираючи сканер? На щастя, все набагато простіше - подивіться список сканерів з інтерфейсом USB і порівняйте зі списком сучасних сканерів, що продаються в місцевому магазині. У перетині списків виявиться всього кілька моделей. Подальший вибір можна провести виходячи з особистих уподобань і оглядів в журналах.

Seiko Epson Perfection 1650 Photo (GT-8200UF):
  • Виробник: Seiko Epson (сайт підтримки. Український сайт Seiko Epson. Український сайт підтримки).
  • Ціна: близько $ 250.
  • Область сканування: A4 (216x297mm).
  • Датчик: CCD (2 лінії на колір).
  • Планшетний з кришкою, 4 кнопки.
  • Вбудований пасивний адаптер (EU-54) для сканіровная 35мм плівок (вертикально розташована лампа з матовим склом). Область сканування 48.26x231.1mm (? 36x226mm). Плівку треба класти блискучою стороною вниз. Дві точки фокусування: на скло і 2 mm над ним (плівка в тримачі).
  • Апаратний інтерфейс: USB 1.1, гніздо типу B (глибоке, так що USB кабель з обмежувачем глибини не підійшов), Full Speed ​​mode (12Mbits / sec), підключати до кореневого концентратора або концентратора першого рівня з блоком живлення. Видає про себе наступну інформацію (трохи не вистачає в modules.usbmap, в ядрі 2.4.18 - RH 8.0 - вже є):
    • string description: manufacturer: "EPSON", product: "EPSON Scanner"
    • Device Class: ff
    • Device Subclass: ff
    • Device Protocol: ff
    • Vendor Id: 0x04b8
    • Product Id: 0x0110
    • Revision Number: 1.10
  • Драйвера для Linux:
    • сторінка на сайті Epson про драйвери сканерів для Linux
    • Image Scan! for Linux від Epson Kowa
    • SANE EPSON Backend
    • SANE EPSON Backend (дзеркало)
  • Оптична роздільна здатність: 13600 елементів (1600 dpi). Механічне дозвіл 3200 dpi (користі від сканування з роздільна здатність 3200 dpi немає).
  • Глибина кольору: 16 біт на колір внутрішніх і зовнішніх (схоже, що молодші 8 біт вигадуються firmware).
  • Діапазон оптичної щільності: 3.2 D (в деяких текстах - 3.0 D, при самостійному тестуванні виходить 2.4 D, лінійна частина - до 1.7 D).
  • Швидкість (повна область сканування: 215.9mm x 297.18mm):
    • preview 8 біт - 10 секунд
    • preview 16 біт - 15 секунд
    • scanimage --mode Color --depth 8 --resolution 50 (10.5 секунд)
    • scanimage --mode Color --depth 16 --resolution 50 (10.5 секунд)
    • scanimage --mode Color --depth 8 --resolution 100 (10.5 секунд)
    • scanimage --mode Color --depth 16 --resolution 100 (13.5 секунд)
    • scanimage --mode Color --depth 8 --resolution 200 (21 секунда)
    • scanimage --mode Color --depth 16 --resolution 200 (37.5 секунд)
    • scanimage --mode Color --depth 8 --resolution 400 (71 секунда)
    • scanimage --mode Color --depth 16 --resolution 400 (159 секунд)
    • scanimage --mode Color --depth 8 --resolution 600 (150 секунд)
    • scanimage --mode Color --depth 16 --resolution 600 (300 секунд)
    • scanimage --mode Color --depth 8 --resolution 800 (293 секунди)
    • scanimage --mode Color --depth 16 --resolution 800 -x 172.7 (413 секунд, PNM створюється з помилкою, а в TIFF немає останнього рядка)
    • scanimage --mode Color --depth 8 --resolution 1600 -x 172.7 (833 секунди)
  • Додаткові можливості:
    • command level: ESC / I-B8, FS
    • 7 рівнів яскравості (реалізовано програмно, а не збільшенням яскравості лампи)
    • line art: fixed threshold, text enhancement technology
    • halftone: auto area segmentation, 3 режими error diffusion, 4 шаблону dither, 2 завантажуються шаблону (bi-level і quad-level)
    • гамма корекція: 2 типу для CRT, 3 типу для друку, 1 завантаження
    • корекція: 1 для CRT, 3 для принтера, 1 загружаемая
    • Джерело живлення: DC 24V, 0.8A (15W / 6W)

Я використовую Red Hat 7.2 з ядром 2.4.9-13. USB-контролер: UHCI (chipset Intel BX).

Так як ядро ​​2.4.9 нічого не знає про Epson Perfection 1650 (в 2.4.18 все в порядку), то треба додати в /etc/modules.conf рядок:

Може виникнути проблема із занадто маленьким часом очікування підтвердження в драйвері. Стандартний час очікування (в /usr/src/linux/drivers/usb/scanner.h) дорівнює 10 секундам. Для Epson цього мало, особливо в режимі TPU і в великих дозволах. У старому ядрі доводилося міняти scanner.h і збирати заново ядро. Потім у модуля scanner з'явився параметр read_timeout (тільки задавати його треба не в секундах, як написано в документації, а в тиках - 1/100 секунди). Зараз драйвер сканера самостійно збільшує цей параметр до 40 секунд для сканерів Epson. У новій версії драйвера також прибраний ефект "тормознутости" - додаток можна було зняти в перебігу цих самих 40 секунд.

При приєднанні сканера в syslog приходять повідомлення від ядра:

Oops! Ядро 2.4.9 (в 2.4.18 все в порядку) нічого не знає про цей пристрій. Беремо відповідну строчку з /etc/hotplug/usb.distmap від іншого сканера Epson:

Копіюємо її в /etc/hotplug/usb.handmap (не треба в /lib/modules/2.4.9-13/modules.usbmap, тому що він формується при кожному завантаженні), замінивши ідентифікатор пристрою на 0x110. Переподсоедіняем сканер - тепер hotplug щасливий (lsmod показує завантажений модуль scanner):

Те ж саме можна зробити вручну:

Залишилося переконатися, що права до пристрою / dev / usb / scanner0 достатні для користувача, який буде сканувати.

Якщо сканер довго не використовувати, то він відключається, а модуль вивантажується з пам'яті. В результаті автоматичний пошук пристрою не працює. Можна або перекрутити пристрій, перезавантажити драйвер вручну або вказувати ім'я пристрою явно.

Переконавшись, що при приєднанні сканера автоматично завантажується модуль scanner, переходимо до наступного етапу. Справа в тому, що USB драйвер Linux забезпечує тільки транспортний рівень протоколу, тобто він вміє передавати / приймати байти, але не розуміє їх значення. Для роботи з конкретною моделлю сканера (або серією сканерів, якщо вони використовують загальний командний мову) необхідна програма, яка вміє спілкуватися саме з цією моделлю сканера. Найбільш популярним комплектом таких програм є SANE.

SANE є API, який забезпечує доступ до скануючого обладнання стандартизованим чином і бібліотеку модулів для конкретних моделей сканерів. Підтримуються не тільки USB сканери, але SCSI-сканери, пристрої, що підключаються до паралельного порту, цифрові камери з комплекту gphoto2 і інші пристрої. Забезпечується мережева робота (я не пробував).

На додаток до бібліотеки (backends), до складу пакету входять програми для сканування (frontends): scanimage, xcam, xscanimage. scanimage - це консольна програма і користуватися нею можна, але незручно. xcam і xscanimage - убогі і глючний, так що краще користуватися xsane.

Отримати SANE можна
  • разом з Red Hat 7.2: пакети sane-frontends-1.0.5, sane-backends-1.0.5 і sane-backends-devel-1.0.5
  • перевстановити (rpm -Uvh) нові версії (1.0.6) з RawHide (вони тягнуть за собою libusb-0.1.4-1.i386.rpm)
  • зібравши їх самостійно (видаливши попередньо стару версію і пакети, які від неї залежать):
    • ./ configure
    • make
    • make install
    • додати в /etc/ld.so.conf директорії / usr / local / lib, / usr / local / lib / sane і запустити / sbin / ldconfig (тому що самозбірних SANE (встановлюється в / usr / local, замість / usr )

Редагуємо список пристроїв у файлі /etc/sane.d/dll.conf (/usr/local/etc/sane.d/dll.conf, якщо збирали SANE самостійно): всі зайві пристрої треба закоментіровать - автопроба неправильного драйвера може привести пристрій або всю систему в неробочий стан.

У /etc/sane.d/epson.conf додати:

Тестуємо список доступних пристроїв:

Серед розпізнаних пристроїв повинно бути:

Тестуємо працездатність вийшла системи (вельми поверхнево):

Подивимося які можливості сканера доступні за допомогою SANE:

Схоже версія 1.0.6 витягує з апаратури все, що тільки можна:
  • --mode Binary | Gray | Color
  • --depth 8 | 16
  • --halftoning (все що обіцяно апаратурою)
  • --dropout None | Red | Green | Blue
  • --brightness -4..3 (не сумісний з гаммакоррекціей)
  • --sharpness -2..2
  • --gamma-correction апаратна гаммакоррекція, в т.ч. завантажуються криві окремо по кожному кольору
  • --color-correction (ці параметри вручну точно не поставиш;)
  • --resolution 50 | 60 | 72 | 75 | 80 | 90 | 100 | 120 | 133 | 144 | 150 | 160 | 175 | 180 | 200 | 216 | 240 | 266 | 300 | 320 | 350 | 360 | 400 | 480 | 600 | 720 | 800 | 900 | 1200 | 1600 | 1800 | 2400 | 3200
  • --threshold 0..255
  • --mirror [= (yes | no)]
  • --speed [= (yes | no)]
  • --auto-area-segmentation [= (yes | no)] (картинки halftoned, текст навпаки)
  • --zoom 50..200
  • --wait-for-button (1.0.8)
  • --preview [= (yes | no)]
  • --preview-speed [= (yes | no)]
  • геометрія: -l, -t, -x, -y (mm)
  • --source Flatbed | Transparency Unit
  • --film-type Positive Film | Negative Film
  • --focus-position Focus on glass | Focus 2.5mm above glass

Встановивши змінну оточення SANE_DEBUG_EPSON (від 1 до 128) можна отримати отладочную друк в разі ускладнень. Ось що пристрій повідомляє про себе:

До речі, в комплекті є модуль для захоплення зображень з video4linux (наприклад, v4l: / dev / video0), який працює з моєї AverMedia TVPhone98.

Отримати xsane можна
  • разом з Red Hat 7.2: пакети xsane-0.77-4 і xsane-gimp-0.77-4 (але це дуже стара версію з величезною кількістю помилок, наприклад в деяких режимах PNG зберігається з помилками)
  • перевстановити (rpm -Uvh) нові версії (0.82-3) з RawHide (чомусь немає українських меню)
  • зібравши їх самостійно (видаливши попередньо стару версію і пакети, які від неї залежать, не забудьте про plugin для GIMP:
/.gimp-1.2/pluginrc!):
  • ./ Configure (іноді доводиться давати --disable-sanetest)
  • make
    • в RH 7.1 помилка gcc-2.96-81 при компіляції xsane.c: 4501 (xsane_mail_dialog), про що чесно попереджається в xsane.INSTALL (мабуть силоньок бракує скомпілювати 260КБ з -O2). Зменшення рівня оптимізації дозволяють завершити збірку.
    • в RH 7.2 потрібно встановити пакет libusb-devel на додаток до libusb, який потрібен був оновленим sane
  • make install
    • / Usr / local / share / sane / xsane
    • / Usr / local / share / locale
    • / Usr / local / man / man1
    • / Usr / local / share / sane

Ось і все: запускаємо командою xsane або xsane epson: / dev / usb / scanner0. якщо не спрацьовує автоматичне розпізнавання. Після цього треба обов'язково включити відображення всіх вікон і погуляти по конфігурації.

Гаммакоррекція схоже в xsane-0.82 тільки програмна.

Замінює libsane-epson.so в / usr / lib / sane на свою реалізацію libsane-epsonkw.so (є модифікацією однієї з ранніх версій libsane-epson). Єдине помічене мною відмінність - з'явилася гаммакоррекція - 1.8. Встановлюється бібліотека libesmod.so в / usr / lib і графічний інтерфейс до SANE - iscan. Його також можна використовувати як plugin для gimp.

Інтерфейс простіше, ніж xsane. З'явилися криві гамма і кольорокорекції, але немає можливості керувати апаратними функціями, білої і чорної точок, гістограми, 16 бітних кольорів, як в xsane. Загалом, я не зрозумів навіщо це потрібно.

Обмеження на розмір рядка сканування в 32 КБ залишилося :(

Сканування 3200 dpi. Помітна явна смугастість зображення - або хтось плутає парні і непарні рядки, або CCD не встигає "відпочити" за півкроку.

Спроба багаторазового сканування однієї фотографії (c ідеєю подальшого усереднення за допомогою convert -depth 16 -average) і наступне порівняння їх (composite -depth 16 -compose difference) наводить на думку, що молодші 8 біт на колір генеруються датчиком випадкових чисел (а на кордоні світлого і темного - все 10;).

Схожі статті