Navegación

domingo, 16 de febrero de 2014

Mejorar un PDF escaneado de varias páginas con software libre exclusivamente

Pasos que di para mejorar un PDF escaneado

Me encontré ante un PDF originalmente escaneado, probablemente en forma automática y sin ninguna mejoría de las imágenes (salvo alinearlas). Tenía un fondo muy visible y poco contraste con el texto.
Decidí que iba a mejorarlo con software libre exclusivamente, en Linux Mint para ser específico.

Ya conocía el uso de scantailor, así que lo abrí. Para mi desconsuelo, no aceptaba archivos PDF como fuente. Tenía que encontrar la forma de transformar el PDF (de más de 300) páginas en imágenes.

Probé primero con pdftoimage pdftoimage https://code.google.com/p/pdf2image/
Usándola así:
pdf2image libro.pdf -compress -dev png16m

Esta y otras combinaciones me producían varias imágenes por página. Una para la porción color/grayscale de la página, donde estaba el fondo (que yo quería eliminar) y las imágenes (que yo quería mantener) y otra para lo que sería el texto, aparentemente superpuestos en el pdf, que llegaban en forma invertida (de negativo). Claramente esto no me iba a servir para, finalmente, reconstruir un PDF más nítido, porque o perdería las imágenes, o perdería el texto.

Llegué, indagando un poco, a la siguiente herramienta, que hizo exactamente lo que yo necesitaba:

pdftoppm -png -r 300 libro.pdf libro
Me produjo imágenes png de cada página, llevadas a 300dpi, numeradas.

Finalmente entré en scantailor http://scantailor.sourceforge.net/

Para no irme del tema general, resumo:
Elegí un area manual y la apliqué a todo (para que no hiciese autoarea en cada página)
Elegí como tipo de imagen combinado (entre color/grayscale y monochrome) con el umbral en el medio Márgenes de 2 por cada lado
Apliqué una rotación manual de 0 grados (para que no autorotase ninguna página)
En la parte de división forcé manualmente a 1 sola página por imagen escaneada y lo apliqué a todo. Autodeformación apagada y eliminar manchas encendido en su mínima expresión

El resultado fue un nuevo conjunto de imágenes (en tif esta vez) donde se leía en blanco sobre negro el texto, y las imágenes se veían bien.

Ahora tocaba hacer un pdf a partir de todas esas imágenes

Utilicé el comando convert... de imagemagick http://www.imagemagick.org/ de la siguiente forma:
convert *.tif libro.pdf

Pero llenaba al 100% el procesador, la máquina no responde hasta que uno logra hacer ctrl-c (el mouse se mueve, se puede cambiar el foco o cerrar cosas, pero no abren otros terminales, ni el administrador de procesos).
Si uno observa el archivo pdf que se está compilando, crece lentamente, y nunca llegué a ver si terminaba.

Me puse a investigar cómo controlar la intensidad con la que se ejecuta ese comando (o cualquier otro) y fui a dar con varias opciones:

nice -n 19 convert...   usar nice
http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=10847

agregar -limit memory 1mb -limit map 2mb
http://totaki.com/poesiabinaria/2011/04/limitando-recursos-en-imagemagick/

Incluso en algunas páginas recomendaban usar otro comando llamado ionice (para graduar el flujo de entrada y salida del proceso)

También encontré cómo identificar un proceso que ya se está comiendo al procesador, y regularlo usando cpulimit, incluso tutoriales sobre cómo dejar un demonio de cpulimit monitoreando que ningún proceso supere el 20& del cpu
http://www.maketecheasier.com/limit-cpu-usage-of-any-process-in-linux

de la siguiente fomra:
ps aux | grep convert
sudo cpulimit -p PID -l CPU%

Pero terminé utilizando un enfoque distinto para convert... que es convertir cada imagen en un pdf (cosa que se puede ejecutar en paralelo con cada nucleo del procesador)... eso fue mucho más rápido, y luego utilizar pdftk para unir los pdfs en uno solo.

en vez de convert *.tif blah.pdf usar find . -iname '*.tif' | xargs -I% convert % %.pdf
luego pdftk *.pdf cat output merged.pdf (sudo apt-get install pdftk)
http://askubuntu.com/questions/221378/how-do-i-throttle-a-command-in-a-terminal-window

Terminé con un nuevo PDF impecable de aspecto, aunque algo pesado... probablemente no optimizado.

Buscando la forma de comprimirlo pasé por 2 secuencias
Una asi: qpdf --linearize stbk.pdf tbk2.pdf (http://qpdf.sourceforge.net/)
que redujo en un 20% el archivo

Y la otra que es básicamente convertir el pdf en ps y luego el ps en pdf
pdf2ps libro.pdf libro-pesado.ps
ps2pdf libro-pesado.ps libro-liviano.pdf

Todavía pienso que se puede optimizar más, usando alguna otra utilidad como pdfopt.

En definitiva, fueron varios pasos y varios tutoriales que tuve que seguir para lograrlo, supongo que existen herramientas que acortan pasos, scripts que automatizan un poco más, etc.

Los comentarios son bienvenidos!

viernes, 14 de febrero de 2014

Cómo ejecutar scripts o aplicaciones en un pendrive FAT16/32 desde linux

Encontré hurgando por aquí y por allà distintas formas:

En algunos casos se puede abrir un terminal e intentar hacer sudo ./script-o-aplicación en el pendrive

Si no funciona, se puede intentar hacer bash o sh ./script-o-aplicación en el pendrive (con o sin sudo)

Pero una forma definitiva, que funciona en linux mint / ubuntu, es el siguiente cambio:

sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks/udisks-daemon

Se recomienda hacer backup de udisks-daemon por las dudas... este cambio sobrevive al reset, y muestra como ejecutables los scripts o aplicaciones de linux directo en el pendrive.

Fuente: http://ubuntuforums.org/showthread.php?t=1665289&p=10359798#post10359798

lunes, 3 de febrero de 2014

Cómo respaldar los secretos del Google Authenticator

Seguí los pasos indicados en este blog, específicamente los que se hacen con consola adb o desde un shell. Fallaban, así que exploré yo mismo los paths y vi que hay que escribir authenticator2 en vez de authenticator (el path ha cambiado). Me imagino que depende de la versión de android y de la version del Google Authenticator.

Una vez copiada la base de datos a mi PC, utilicé una aplicación llamada SQLite Database Browser que está disponible para Linux Mint en su repositorio.

Pude comprobar que están correctos usando la versión offline del Google Authenticator para html5, que se puede descarga en este repo de github.

Uno nunca sabe cuándo puede perder su teléfono y quedarse sin sus secretos y sin acceso a sus cuentas.

jueves, 28 de noviembre de 2013

Hosting gratuito sin anuncios

http://byethost.com
  • 1GB de espacio
  • 50GB Ancho de banda
  • 5 Dominios, 5 Subdominios, 5 Pointers
  • 5 MySQL Databases
  • Creador de sitios web
  • Libre de por vida







  • 2GB de espacio
  • 10GB Ancho de banda
  • 5 Dominios, 5 Subdominios, 5 Pointers
  • 2 Bases de datosMySQL
  • Soporte comunitario
  • Creador de sitios web







http://www.000webhost.com
  • 1.5GB de espacio
  • 100GB Ancho de banda
  • Dominios Ilimitados
  • 2 MySQL Databases
  • cPanel
  • Creador de sitios web






Iré editando esta lista.

TLD Gratis

Existen algunas opciones de dominios top level gratis, entre las cuales .tk es probablemente la más conocida.

.cf http://www.dot.cf/en/index.html?lang=en
.ml http://www.point.ml/en/index.html?lang=en
.za http://nom.za/registration.html
.tk http://www.dot.tk/es/index.html?lang=es

Respecto a la iniciativa .free actualmente uno puede pre-registrar hasta 25 dominios gratis, pero es sólo un pre-registro. Cuando el servicio funcione habrá que ver si el verdadero registro de cada dominio tendrá costo o no. Más información en http://www.dotfree.com/

miércoles, 27 de noviembre de 2013

Agregar un PPA a ubuntu-server 12.04

Descubrí con sorpresa que en el VPS recién instalado con ubuntu server 12.04 no podía agregar PPAs. Por suerte google es tu amigo y me topé con la solución aquí. Consiste simplemente en agregar el siguiente paquete (que provee entre otras cosas add-apt-repository)

sudo apt-get install python-software-properties

Yvoilá!