LINUX.ORG.RU

Как отключить лампу на сканере во время сканирования? UMAX Astra 3400.


0

0

Здравствуйте господа!


Вот тут вопрос у меня есть несколько неожиданный... Дело в том, что мой сканер UMAX Astra 3400 несколько глючно работает под линухом. А точнее, сразу после включения, при первом сканировании, забывает включить лампу. А потом как повезет - или не будет при последущих сканированиях включать, или будет.

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

Так вот, как только я до этого додумался, собрал увеличитель, засунул в него сканер - глюк исчез! Теперь я не могу вообще добиться того, чтоб сканирование шло без включенной лампы.

Ранее, чтобы гарантированно включить лампу, я пользовался командой

scanbuttond -r 100000

Совершенно непонятно, как эта команда влияет на включение лампы (ведь это запуск демона следилки за нажатыми клавишами на сканере), но лампа включается, и обычное сканирование (с включенной лампой) идет нормально.


Теперь мне нужно сделать обратное действие - отключать лампу при сканировании. КАК ЖЕ ОТКЛЮЧАТЬ ЛАМПУ?

Я пробовал сканировать напрямую через scanimage (а не через XSANE) командой

scanimage --mode Color --depth 8 --resolution 200 --lamp-switch=yes --format tiff > file_01.tif

(Да, тут ошибки нет, параметр lamp-switch надо указывать со знаком равно). Пробовал этот параметр выставить в no. В любом случае лампа включается перед сканированием. Пробовал добавить опцию --lampoff-time 0, (и 1 и даже -1 пробовал..) лампа все равно горит при сканировании.

Заглядывал в /etc/sane.d/pulstek.conf (сканер определяется как plustek:libusb:001:003) и в umax.conf. Впринципе, все опции что там прописаны, можно выставлять как параметры scanimage. Так что эти файлы неинтересны.


ВОПРОС. Что еще можно сделать, чтобы сканировать с отключенной лампой? Сканер это может делать (когда что-то глючит), но мне нужно гарантировано управлять включением-выключением лампы. Залезать в сканер и отключить лампу - не предлагать, там все очень хрупкое, остаться без сканера не хочу. Кто в теме, хелп ми пожалусто.


Немного не по теме вопроса, но по теме затеи.

Сильно сомневаюсь, что яркости фотоувеличителя хватит для сканера. Кроме того, осмелюсь предположить, что (даже если хватило бы яркости) качество изображения "напросвет" на бумаге будет чуть хуже, чем никакое. Возможно, проще и лучше сфотать эту бумагу цифромыльницей, но сверху, со стороны увеличителя.

В принципе, от бумаги можно избавиться - просто не класть её и всё (как это ни странно). Правда, при этом останется изображение только там, где фотоувеличитель попадает в угловую апертуру датчика сканера, и, вероятно, это не много. Но плюс тот, что попробовать это можно, даже не отключая лампу (т.к. нет бумаги). И ещё плюс - яркость изображения от увеличителя в центре поля (там, где в апертуру всё же попали) будет даже выше, чем при использовании бумаги.

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

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

> Возможно, проще и лучше сфотать эту бумагу цифромыльницей, но сверху, со стороны увеличителя.

Пройденый этап это. Получаем трапецию тогда, ибо мыльницу по оси картинки не разместишь ибо мешает сам фотоувеличитель.


> В принципе, от бумаги можно избавиться - просто не класть её и всё (как это ни странно). Правда, при этом останется изображение только там, где фотоувеличитель попадает в угловую апертуру датчика сканера, и, вероятно, это не много. Но плюс тот, что попробовать это можно, даже не отключая лампу (т.к. нет бумаги). И ещё плюс - яркость изображения от увеличителя в центре поля (там, где в апертуру всё же попали) будет даже выше, чем при использовании бумаги.

Это пробовал в первую очередь, изображения без бумаги нет - сканируется спираль лампы, и все.


> Сильно сомневаюсь, что яркости фотоувеличителя хватит для сканера. Кроме того, осмелюсь предположить, что (даже если хватило бы яркости) качество изображения "напросвет" на бумаге будет чуть хуже, чем никакое. В общем, рекомендую попробовать без бумаги, не вырубая лампу. И если не подойдёт банально по яркости, то с лампой можно уже не заморачиваться.

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


Я тему на ixbt поднял, посмотрим что там ответят спецы.
http://forum.ixbt.com/topic.cgi?id=13:39975

Пока что я так понял, никто не знает, как управляется лампа на сканере - драйвером компа, или логикой сканера при начале сканирования. Есть подозрение, что именно компом, потому что в винде лампа горит всегда, а в линухе через sane - подглючивает как было написано выше.

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

Приделай где-нибуть на задней стенке выключатель для этой самой лампы.

Sherak ★☆
()


> Приделай где-нибуть на задней стенке выключатель для этой самой лампы.

Я же написал что внутрь сканера лезть не хочу.


Впрочем, я сделал то что хотел. Кратко по пунктам, что пришлось сделать. Записываю больше для себя чтоб не забыть.

1. Надо выяснить текущую весию SANE-бакэнда, который установленн в системе. Для этого заходим в /usr/lib/sane и смотрим, какие версии у большинства libsane-* so-файлов. В моем случае (Kubuntu 7.04) это 1.0.18.

2. Идем на сайт http://www.sane-project.org на страницу Download, потом переходим на зеркало, например http://alioth.debian.org/frs/?group_id=30186. Скачиваем исходники бакэнда нужной версии. В моем случае это sane-backends-1.0.18.tar.gz

3. Распаковываем исходники в отдельный каталог. В этом каталоге даем команды configure и make. Make install не делаем! Убеждаемся что все компилируется, компиляция не вываливается с ошибкой.

4. Находим в исходниках файлы бакэнда для своей модели сканера. У меня сканер UMAX, определяется как plustek (можно увидеть это через команду scanimage -L -v), так что искал именно файлы для plustek.

5. Исходные файлы с бакэндом для plustek находятся в подкаталоге /backend, и называются

-rw-r--r-- 1 xi xi 82148 2006-07-03 01:32 c.c
-rw-r--r-- 1 xi xi 13459 2006-05-31 20:31 plustek.h
-rw-r--r-- 1 xi xi 41413 2008-04-03 01:33 plustek-usb.c
-rw-r--r-- 1 xi xi 39846 2006-06-11 15:10 plustek-usbcal.c
-rw-r--r-- 1 xi xi 22154 2006-06-11 15:10 plustek-usbcalfile.c
-rw-r--r-- 1 xi xi 97690 2006-05-31 20:31 plustek-usbdevs.c
-rw-r--r-- 1 xi xi 23277 2006-05-31 20:31 plustek-usb.h
-rw-r--r-- 1 xi xi 46310 2008-04-03 02:02 plustek-usbhw.c
-rw-r--r-- 1 xi xi 48229 2006-05-31 20:31 plustek-usbimg.c
-rw-r--r-- 1 xi xi 8764 2006-05-31 20:31 plustek-usbio.c
-rw-r--r-- 1 xi xi 6351 2006-05-31 20:31 plustek-usbmap.c
-rw-r--r-- 1 xi xi 47590 2006-05-31 20:31 plustek-usbscan.c
-rw-r--r-- 1 xi xi 92572 2006-05-31 20:31 plustek-usbshading.c

Там же еще будут конфигурационные файлы и файлы для осуществления автоматической сборки, но они нам неинтересны, нам нужны только исходники *.h и *.c. Там же будут файлы с названием plustek-pp.*, эти файлы тоже рассматривать не стоит, они нужны для сканеров, подключаемых по LPT порту, а у нас USB сканер.

6. Делаем пробное сканирование с получением полного дампа отладки, чтобы знать что примерно искать, и есть ли в этом дампе хоть какие упоминания о включении/выключении лампы. Пробное сканирование делается в моем случае двумя командами

export SANE_DEBUG_PLUSTEK=255
scanimage --mode Color --depth 8 --resolution 300 --format tiff >scanfile01.tif 2>dbg.log

После их выполнения, получим в текущем каталоге кучу *.raw файлов, файлов результатов калибровки сканера, и среди этой кучи будет текстовый файл полного лога сканирования dbg.log

7. Делаем поиск по логу по подстроке "lamp" чтобы понять если там какие-то упоминания о управлении лампы. Видим, что есть нечто

[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] LAMP-STATUS: 0x00000000
...
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000
...
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000
[plustek] Switching Lamp on
[plustek] usb_switchLampX(ON=0,TPA=1)
[plustek] Switch Lamp: 0, regs[0x5b] = 0x74
[plustek] usb_switchLampX(ON=1,TPA=0)
[plustek] Switch Lamp: 1, regs[0x5a] = 0x4d
[plustek] REG[0x5a] = 0x4d (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000001
...
[plustek] usb_switchLampX(ON=0,TPA=0)
[plustek] Switch Lamp: 0, regs[0x5a] = 0x45
...
[plustek] usb_switchLampX(ON=1,TPA=0)
[plustek] Switch Lamp: 1, regs[0x5a] = 0x4d
...
[plustek] sane_close
[plustek] sane_exit
[plustek] Shutdown called (dev->fd=-1, libusb:001:003)
[plustek] Waiting for scanner-ready...
[plustek] Switching lamp off...
[plustek] REG[0x5a] = 0x4d (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000001
[plustek] Switching Lamp off
[plustek] usb_switchLampX(ON=0,TPA=0)
[plustek] Switch Lamp: 0, regs[0x5a] = 0x45
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000

8. Начинаем изучать исходники, чтобы понять как там все устроено. Быстро выясняем, что записи в логе вида usb_switchLampX(...) - это вызов функции с таким именем. Эта функция лежит в файле plustek-usbhw.c. Она вызывается только из функции usb_switchLamp(). Смотрим логику, как usb_switchLampX() вызывается из usb_switchLamp(). Понимаем, что usb_switchLamp() - это основная функция, используемая в коде, и она принимает два значения - идентификатор девайса, и булевое значение - включить или выключить лампу. А функция usb_switchLampX() выбирает внутри себя, какую конкретно лампу включать - обычную или лампу слайдадаптера (которого у меня нет).

9. Нам нужно сделать по-быстрому библиотеку, которая бы тупо не включала ни одну лампу вообще. Для этого, в начале функции usb_switchLamp() принудительно изменяем принятый ею параметр на "выключено"

on=SANE_FALSE;

10. Пробегаем исходники на предмет обнаружения прочих функций, работающих с лампой. В том же файле plustek-usbhw.c находим функцию usb_LampOn(...), которая включает-выключает лампу, вызывая внутри себя usb_switchLampX(...), но помимо этого что-то пишет в какие-то управляющие регистры сканера. С этой функцией поступаем точно так же, в начале функции принудительно изменив принимаемый ею параметр

fOn=SANE_FALSE;

11. Возвращаемся в корневой каталог, куда были размещены исходники, и снова даем команду make. Будет пересобран только файл libsane-plustek.so.1.0.18, который лежит в подкаталоге /backend/.libs

12. Сохраняем файл библиотеки

/usr/lib/sane/libsane-plustek.so.1.0.18

в укромное место, и под правами рута заменяем его на файл

каталог_с_исходниками/backend/.libs/libsane-plustek.so.1.0.18


Все! Теперь, если начать сканирование, лампа включаться не будет.


О результатах сканирования проецируемого изображения напишу пожже, пока скажу что они неудовлетворительные. А на стекло сканера положить пленку, сверху прижать матовым стеклом, и светить яркой лампой, то качество гораздо лучше. Этакий бесплатный слайдадаптер получается. Но разрешение полученного изображения не то, какое бы хотелось. Да и полюбому готовый слайдадаптер дает более хорошую картинку. А картинка, снятая с подоного настоящего слайд адаптера, меня тоже не удовлетворяет. Так что надо делать как-то по-другому.

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

А почему нельзя скорректировать пост-обработкой трапецию, полученную при пересъёмке на фотоаппарат?
Кстати, если оптическую ось фотика направлять вертикально, как и ось увеличителя, то, по идее, для хорошего объектива, никакой перспективы вообще возникать не должно, только площадь кадра будет использоваться не полностью.

Ещё, наверное, можно взять хороший фотоаппарат с хорошей макросъёмкой (у меня таких не было), и снять прямо с плёнки (на просвет, прижав плёнку к стеклу).

Ещё вариант (с потерей динамического диапазона и, возможно, с искажением цветов) - отпечатать с плёнки фотографии (пусть даже если негатив) и посканить уже их.

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