Archivo de la etiqueta: sane

Script para crear un documento djvu

A veces le echo un vistazo a las estadísticas de este sitio Web, para ver qué es lo que busca la gente por este antro de perdición.

Lo cierto es que la inmensa mayoría de los usuarios sois sin duda gente que le ha preguntado a Google cosas sobre el hardware o sobre Linux (y siempre hay unas cuantas preguntas también sobre OS/2). Pero dentro de los linuxeros, hay un porcentaje no pequeño de gente que viene buscando cómo crear ficheros djvu o interesados en la gestión documental en general. Y es un porcentaje lo bastante alto como para llamarme la atención. Y ahí es donde quería yo llegar.

Bueno, la verdad es que también me sorprende ver siempre una cierta cantidad de gente preguntándole a Google por mí, con nombre y apellidos. Supongo que son todo aficionados a la Ciencia Ficción en busca de su autor favorito. Así que un saludo, ¿ein?. ;-)

Vale, pues al grano. El caso es que en su dia dejé un artículo en el que hablaba de la creación de ficheros djvu, pero lo que contaba estaba muy personalizado para mi uso y disfrute y dudo mucho de que le resulte útil a nadie, más que como una aportación general de ideas. Así que, dado que hay mucho interés por vuestra parte, y como soy así de majete, pues os he hecho justo lo que estabais buscando: un programilla script escrito en Perl que escanea un documento y lo convierte enterito a formato djvu multipágina. De nada. Ha sido divertidísimo escribirlo. :-)

Os lo podeis bajar pulsando con el botón derecho del ratón aquí, y para ser sinceros, la verdad es que tampoco inventa la rueda: echa mano de lo que hay disponible en casi todas las distribuciones Linux y se limita a servir de front end, de tal forma que se haga todo de la manera más automática posible y sin complicaciones, sea cual sea el ordenador en que se ejecuta. Obviamente, para que funcione debereis tener instalado SANE y DJVU, pero eso ya lo suponíais, ¿verdad?.

La primera vez que se ejecuta, el script buscará qué escaners hay disponibles. Si teneis más de uno os preguntará cual quereis usar para gestión documental. En cualquier caso, la configuración solo se necesita la primera vez, porque el programa recordará todos los ajustes y no volverá a preguntaros. Aún así, si ejecutais la opción «–ajuste», podeis reconfigurarlo todo de nuevo si os apetece o si cambia vuestro hardware. También teneis una opción «–ayuda» que os mostrará la sintaxis del comando, y algún detalle relevante.

Y alguna que otra virguería que me he permitido el lujo de meter. Por ejemplo, si creais un fichero que ya existe, el escaneo no destruye nada sino que añade nuevas páginas a lo ya existente. O por ejemplo, que utilizará el ADF, en caso de que tengáis un escaner con alimentador automático de hojas (lo que es bastante fundamental para hacer gestión documental en serio).

Y más cosillas que dejo que descubrais por vosotros mismos. El script, por supuesto, ha de considerarse bajo Dominio Público, así que es un regalo que os hago. ;-)

Eso sí, un consejo: quizás tengais la tentación de escanearlo todo en color. No lo hagais. La mejor forma es usar Lineart (blanco y negro puro) porque, en gestión documental, lo que interesa es casi siempre el texto puro, no las fotos ni los gráficos complejos. Muy raramente necesitareis algo más complicado que eso, pero si lo necesitais bastará con escanear en escala de grises. Nunca o casi nunca he usado color. Os lo digo porque en Lineart el escaneo es rapidísimo y los ficheros ocuparán solo un puñado de Kb. Aún así, el programa admite la opción de escanear en grises y en color, todo el documento o también solo algunas páginas concretas, aunque esta opción solo está disponible si escaneais sin ADF (lógicamente: con el ADF os irá tragando todas las páginas una tras otra).

Estoy depurando errores y metiendo algunas opciones más. Consulta la ayuda con «escaneo –ayuda». Versión actualizada a fecha 29/01/2009. Si te lo bajaste antes de esa fecha, vuelve a bajártelo, anda.

Disfrutadlo mucho. ;-)

¿Funcionará ese scanner Canon Lide 30 en mi Linux?

Sí. Perfectamente. Solo necesitas instalar la última versión de los sane-backends. Con la 1.0.15 o superior será reconocido sin problemas, así que muy viejo tiene que ser tu sistema para no soportarlo. Eso sí, hay algunas cosas a tener en cuenta:

En el caso de Gentoo, tienes que hacer:

[root@claudia:~]# emerge sane-backends sane-frontends xsane 
[root@claudia:~]# emerge libusb hotplug

Sin embargo, debes añadir la opción «usb» a tu /etc/make.conf, en el apartado USE, o será incapaz de reconocerlo.

Y sea cual sea la distribución Linux que uses, también tendrás que tener soporte para USB, claro. No es imprescindible que tengas USB 2.0, pues funcionará incluso con USB 1.1, pero irá lentiiiiisimo. Te recomiendo encarecidamente USB 2.0. Y tendrás que cargar los módulos adecuados para activar el soporte, o recompilar tu kernel, si no los tienes. Estos módulos son usbcore, uhci-hcd (para 1.1) y ehci-hcd (para 2.0, pero necesita también el otro). Dmesg te dirá cómo reconoce al escaner:

hub 1-0:1.0: state 5 ports 4 chg fff0 evt 0002
ehci_hcd 0000:00:09.2: GetStatus port 1 status 001002 POWER sig=se0  CSC
hub 1-0:1.0: port 1, status 0100, change 0001, 12 Mb/s
hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002
uhci_hcd 0000:00:09.0: port 1 portsc 008a,00
hub 3-0:1.0: port 1, status 0100, change 0003, 12 Mb/s
usb 3-1: USB disconnect, address 4
usb 3-1: usb_disable_device nuking all URBs
usb 3-1: unregistering interface 3-1:1.0
usb 3-1:1.0: hotplug
usb 3-1: unregistering device
usb 3-1: hotplug
hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100
hub 1-0:1.0: state 5 ports 4 chg fff0 evt 0002
ehci_hcd 0000:00:09.2: GetStatus port 1 status 001803 POWER sig=j  CSC CONNECT
hub 1-0:1.0: port 1, status 0501, change 0001, 480 Mb/s
hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501
ehci_hcd 0000:00:09.2: port 1 full speed --> companion
ehci_hcd 0000:00:09.2: GetStatus port 1 status 003801 POWER OWNER sig=j  CONNECT
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002
uhci_hcd 0000:00:09.0: port 1 portsc 0093,00
hub 3-0:1.0: port 1, status 0101, change 0001, 12 Mb/s
hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101
usb 3-1: new full speed USB device using uhci_hcd and address 6
usb 3-1: ep0 maxpacket = 8
usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: default language 0x0409
usb 3-1: Product: CanoScan
usb 3-1: Manufacturer: Canon
usb 3-1: hotplug
usb 3-1: adding 3-1:1.0 (config #1, interface 0)
usb 3-1:1.0: hotplug
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002

Ahora podemos usar dos comandos que nos mostrarán que SANE también detecta el escaner:

[15:12:01/0][root@claudia:~]# sane-find-scanner
  # No SCSI scanners found. If you expected something different, make sure that
  # you have loaded a SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04a9 [Canon], product=0x220e 
	[CanoScan], chip=LM9832/3) at libusb:003:006
found USB scanner (vendor=0x05e3, product=0x0502 
	[USB Host To Host Bridge]) at libusb:003:005
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

  # Not checking for parallel port scanners.

  # Most Scanners connected to the parallel port or other proprietary ports
  # can't be detected by this program.
[15:12:01/0][root@claudia:~]# scanimage -L
device `plustek:libusb:003:006' is a Canon N1240U/LiDE30 USB flatbed scanner

Si ahora ejecutamos «xsane plustek» deberíamos poder escanear sin más problemas. Al menos como root.

Pero no como usario normal. Habitualmente, al instalar los backends de SANE, Gentoo crea un grupo especial que se llama «scanner». Podemos añadir ese grupo a los usuarios que queramos conceder permiso para usar el scanner. Para ello solo teneis que editar el fichero /etc/group y donde pone:

	scanner:!:501:

Debe poner:

	scanner:!:501:lacofi,maria

Los nuevos grupos y permisos de acceso solo estarán disponibles la próxima vez que nos logemos. Y solo queda un detalle: hay que poner en marcha el servicio hotplug. En el caso de gentoo:

[root@claudia:~]# /etc/init.d/hotplug start
[root@claudia:~]# rc-update add hotplug default
 * hotplug added to runlevel default
 * Caching service dependencies...
 * rc-update complete.