-
Notifications
You must be signed in to change notification settings - Fork 0
/
ScanManualA5.tex
1799 lines (1273 loc) · 207 KB
/
ScanManualA5.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% ------------------------------------------------------------------------------
% --------------------------------- LICENSE ----------------------------------
% ------------------------------------------------------------------------------
% Except where otherwise noted, this work by Noita Enola is licensed under CC BY-SA 4.0. You can check a copy of the license by looking at the LICENSE.md file, or at <https://creativecommons.org/licenses/by-sa/4.0>.
% ------------------------------------------------------------------------------
% --------------------------------- CLASS ---------------------------------
% ------------------------------------------------------------------------------
\documentclass[%
a5paper,
10pt,
twoside,
openright,
% draft,
final,
]{memoir}
% ------------------------------------------------------------------------------
% --------------------------------- PACKAGES ---------------------------------
% ------------------------------------------------------------------------------
\input{headers/h_gen.tex}
\input{headers/h_fig.tex}
\input{headers/h_math.tex}
\input{headers/h_misc.tex}
\input{headers/title.tex}
% ------------------------------------------------------------------------------
% --------------------------------- COMMANDS ---------------------------------
% ------------------------------------------------------------------------------
\input{headers/commands.tex}
% ------------------------------------------------------------------------------
% ------------------------------- DOCUMENT -------------------------------
% ------------------------------------------------------------------------------
\begin{document}%
% This should be defined in h_misc, but for the moment has to be done here. See: https://github.com/tweh/menukeys/issues/62
\renewmenumacro{\menu}[>]{menus}
% ------------------------- Intentionally blank pages -------------------------
\newpage\null\thispagestyle{empty}\newpage
\newpage\null\thispagestyle{empty}\newpage
% ------------------------------- Front matter -------------------------------
\frontmatter
\thispagestyle{empty}\pdfbookmark{Portadilla}{halftitlepage}%
\halftitleTH%
\cleardoublepage%
\thispagestyle{empty}\pdfbookmark{Portada}{titlepage}%
\titleTH%
\clearpage%
\thispagestyle{empty}\pdfbookmark{Legales}{copyrightpage}%
\emph{ScanManual/Guía para aprender a escanear} \textcopyright 2019-2020 Noita Enola está bajo licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional. Para ver una copia de la licencia, puede visitar el sitio \url{https://creativecommons.org/licenses/by-sa/4.0/deed.es} \cite{CC-BY-SA-4.0}.
\vfill
\license
\chapter{Prólogo} El objetivo de esta guía es enseñar a digitalizar documentos impresos, especialmente libros, de forma de lograr un resultado que sea fiel al original, más accesible, que facilite su diseminación y permita su preservación a largo plazo.
No pretende ser la referencia definitiva, sino solamente ampliar el panorama, sintetizando algunos procedimientos válidos y que en mi opinión alcanzan buenos resultados.
A lo largo de diez años de escaneo aficionado fui aprendiendo, perfeccionando el proceso y tomando algunas notas. Últimamente he estado pensando que los conocimientos que he adquirido podrían llegar a ser de utilidad para otras personas. De mi propia experiencia y de aquellas notas es que surge esta guía, y de estas cavilaciones mi voluntad de compartirla. Espero que le sea de utilidad.
{\raggedleft Noita Enola\par}\cleardoublepage
\tableofcontents
% ------------------------------- Main matter --------------------------------
\mainmatter
% ------------------------------------------------------------------------------
% --------------------------------- PART I ---------------------------------
% ------------------------------------------------------------------------------
\part{Preliminares}
\chapter{Introducción} Bienvenido. En esta introducción comienzo con algunos comentarios generales, luego explico como está organizada la guía y que alcance tiene, y hago un breve esbozo sobre los formatos de archivo.
Mucha de la información que aquí recopilo proviene de fuentes en ruso.\footnote{Para entenderlas sugiero hacer amistad con el traductor de Google.} Desconozco las razones, pero parecería que allí hay muchas más personas interesadas en el arte del escaneo de libros que en los países de habla hispana o inglesa. Las principales que conozco son Djvu-Soft \cite{DjvuSoft} y OCR Forum \cite{OCRForum}. Por supuesto existen otros sitios y personas que iré mencionando a medida que avancemos.
Otros materiales de referencia similares a este son \cite{WikimediaCreatingDjVu, ScanAndShare2008, HowToMakeDjVu, rutrackertwdragon, ALinuxGuideToBookScanning, LIBRITOS, DjVuHuTutorial}.
\section{Organización} He decidido dividir la guía en tres partes:
\paragraph{Parte I} La primera cubre los requisitos de software y hardware para comenzar a escanear. Hay una larga lista de programas con sus descripciones y una discusión sobre los distintos tipos de escáneres.
\paragraph{Parte II} La segunda es la más extensa y contiene propiamente el procedimiento de digitalización, desde el escaneo pasando por la limpieza, ajuste y reconocimiento del texto, hasta la producción final de los documentos en los distintos formatos. Expongo con cierto detalle cada paso y explico algunas alternativas de trabajo, tratando de resaltar las ventajas y desventajas de cada una.
\paragraph{Parte III} Para la última parte dejé los apéndices. Hacia aquí trasladé algunas discusiones que considero útiles pero que pienso hubieran entorpecido el flujo del proceso. También coloqué las referencias, listas, historial de cambios y cambios y mejoras pendientes.
\section{Alcance de la guía\label{sec:scope}} El método que presento funciona bien con impresos de texto y diagramas en negro sobre papel claro, con fotos ya sea a color o escala de grises.
Algunas características que tal vez no sea posible reproducir de forma balanceada simplemente siguiendo esta guía son:
\begin{itemize}[noitemsep]
\item texto en múltiples colores (todo se pasará a negro);
\item páginas con fondo de color (si es suficientemente claro se convertirá en blanco, de lo contrario dará problemas); y
\item páginas con imágenes de fondo (parecido al caso anterior, pero peor).
\end{itemize}
Estas limitaciones son muy reales, especialmente en la digitalización de folletos, revistas, cómics o libros a todo color. Para aquellos casos, espero que esta guía pueda ser un buen punto de partida desde el que cada uno pueda desarrollar sus propias técnicas y decidir si un procedimiento es más satisfactorio que otro en función de la calidad, el tamaño final del archivo, el esfuerzo requerido, etc. En el apéndice~\ref{sec:complexScans} esbozo un procedimiento simple para tratar este tipo de materiales.
En el caso de los libros, que es el que más nos ocupa, existen multitud de publicaciones que aún no han sido digitalizadas y que caen dentro del alcance de esta guía, y desde allí pienso que esta puede ser un aporte valioso. Para muchos otros existen versiones digitales nativas (\pdf vectorial), por lo que no tiene sentido escanearlos.
\section{Sobre los formatos} Si todo sale bien, al final del proceso de digitalización deberíamos tener una reproducción digital fidedigna del material físico pero, ¿en qué formato?.
\paragraph{\texorpdfstring{\pdf}{PDF}} La realidad es que desde hace ya muchos años el formato dominante para esta aplicación ha sido el \pdf. No me detendré a analizar las razones de esto, simplemente diré que, a pesar de que funciona bien, \emph{no} es el formato más adecuado para esta aplicación.\footnote{Se ha desarrollado un formato estándar basado en \pdf para la creación e intercambio de conjuntos de imágenes de páginas llamado \pdf/raster \cite{PDFraster}. Se puede consultar una breve introducción en \cite{PDFrasterOverview}. A mi criterio no cambia la situación.} Principalmente porque no fue diseñado para esto. Su principal ventaja es su soporte prácticamente universal. Sus desventajas son que para una calidad similar los archivos son algo más grandes y la visualización en pantalla es sensiblemente más lenta. Esto podría cambiar en el futuro a medida que se incorporen nuevos algoritmos de compresión y que las computadoras se vuelvan más rápidas.
\paragraph{\texorpdfstring{\djvu}{DjVu}} El formato \djvu fue diseñado específicamente para el almacenamiento y distribución de documentos escaneados e imágenes de alta resolución \cite{WhatIsDjVu}. Utiliza el modelo \textsc{mrc} (\emph{mixed raster content} o contenido rasterizado mixto), definido en el estándar \textsc{iso/iec~16485} \cite{iso16485}. Simplificando un poco,\footnote{Para más información pueden consultarse las secciones 3.1 y ss. de \cite{DjVuReference}.} en este modelo la imagen se descompone en capas de primer plano y fondo, y se aplican distintas técnicas de compresión optimizadas para cada una. Sus ventajas incluyen la sencillez del formato,\footnote{70 páginas en la referencia de \djvu \cite{DjVuReference} contra 750 páginas en la de \pdf \cite{iso32000}.} el reducido tamaño de los archivos resultantes (para una misma calidad) y la alta velocidad de visualización. Las desventajas principales son la poca aceptación que ha tenido \cite{FutureofDjVu} y la escasez de herramientas para la creación y edición de archivos.
Por supuesto estas ventajas y desventajas dependen de muchos otros factores, algunos de ellos subjetivos, por lo que no pretendo zanjar aquí la cuestión. Personalmente prefiero \djvu para documentos escaneados, aunque siempre genero también el \pdf, por el poco esfuerzo extra que conlleva. Por más información se pueden consultar \cite{LeonBottouPublications, YannLeCunPublications, DjVuTechnology, WikisourceDjVuFiles, DjVuResources, WikisourceDjVuVsPDF, DjVuHu, UDCPDFvsDjVu} y cualquier buscador en línea.
\section{Conclusiones} Esta guía está organizada en tres grandes partes, siendo la segunda la más sustanciosa. El alcance de los procedimientos descriptos tiene algunas limitaciones que podrían subsanarse en el futuro.
Existen dos formatos útiles para guardar el resultado del procesamiento. No es necesario seguir todos los pasos de la guía para obtener los documentos en ambos formatos. Podría producirse solo el \djvu y luego convertirlo a \pdf con alguna herramienta (o viceversa), aunque creo que de esta manera se obtendrían \emph{peores} resultados que partiendo de los originales.
\chapter{Requisitos} Los requisitos de software y hardware varían según el resultado que se esté buscando. A continuación se listan más o menos exhaustivamente, aunque algún que otro ítem podría ser opcional de acuerdo a las necesidades.
Además, existe un cierto prerrequisito humano: es necesario saber desenvolverse con cierta soltura frente a un \textsc{pc}. Esta guía trata de ser completa, pero siempre surgirán problemas, casos no previstos, incompatibilidades, etc. Cuando esto suceda relea la guía, lea la documentación relacionada con lo que no está saliendo bien, pida ayuda en internet. ¡No se desanime, estimado lector!.
\section{Requisitos de software\label{sec:softRequirements}} Primero que nada, soy un usuario de Windows de toda la vida, por lo que todo el trabajo lo hago sobre Windows 7. Muchos de los programas que siguen tienen versiones para Linux o pueden ser ejecutados en Wine, aunque tal vez no todos.\footnote{Aún más importante, no todos son software libre \cite{WikipediaFreeSoftware}. Esto es así porque cuando comencé a desarrollar las notas en las que esta guía se basa no existían aún alternativas libres para cada uno, o al menos alternativas que a mi criterio produjeran un resultado de igual calidad (o yo no las conocía). Pienso que en la actualidad esto ya no es cierto.}
La lista de programas que sigue es bastante extensa por la razón de que he querido mencionar las distintas alternativas disponibles. Ciertamente no será necesario instalarlas todas.
\subsection{Variable \texttt{PATH}} Recomiendo instalar todos los programas en una carpeta de fácil acceso, por ejemplo \typesetFolder{C\,\faCaretRight\,SOFT}. Además, como invocaremos varios programas usando scripts, será importante que la carpeta donde se instaló cada uno esté incluida en la variable \menu{PATH} del sistema \cite{WikipediaVariableDeEntorno, SuperUserEnvironment}.
\subsection{Generales} Estos son programas de uso general. Algunos asociados con el correcto funcionamiento de diferentes aplicaciones y otros con el manejo de archivos de todo tipo.
\paragraph{\textsc{VirtualBox}} Software de virtualización. Principales funciones bajo licencia GPLv2. Se trata de un programa completamente opcional, pero no es mala idea tener todo el flujo de trabajo encapsulado en una máquina virtual. En caso de usarse, todo el software siguiente se instalaría en la VM creada.
\paragraph{\textsc{Drivers}} Drivers del escáner correctamente instalados y funcionando \cite{VirtualBox}.
\paragraph{\textsc{.NET Framework Runtime}} No sabría definirlo. Licencia MIT. Es necesario para correr algunos programas, en particular \dexpress. Podría ser opcional si no se instala este último \cite{dotNET}.
\paragraph{\textsc{Java}} Ídem anterior. Freeware. Necesario si se va a usar \textsc{veraPDF} \cite{Java}.
\paragraph{\textsc{Python 3}} Lenguaje de programación sencillo (para lo que lo vamos a usar). Licencia PSFL (estilo BSD). Necesario para ejecutar los scripts que tengo preparados \cite{Python3}.
\paragraph{\szip} Archivador de ficheros. GPLv2+BSD. Buena alternativa a \textsc{WinZip} y \textsc{WinRAR}. Desde que lo empecé a usar no he mirado atrás \cite{7zip}.
\paragraph{\textsc{Advanced Renamer}} Renombrador de archivos masivo. Freeware. Podría no llegar a necesitarse. Hay mil alternativas \cite{ARen}.
\paragraph{\textsc{HEXelon MAX}} Calculadora, conversor de unidades y monedas, etc. Freeware. Alternativa a la calculadora de Windows. Hay otras. Podría sustituirse por una calculadora de escritorio \cite{HEXelonMAX}.
\subsection{Visualizadores de documentos} Programas para visualizar archivos de texto, imágenes y documentos. También nos servirán para escanear nuestro material.
\paragraph{\notepad} Editor de texto y código fuente. Licencia GPLv2. Adiós Notepad de Windows \cite{Notepad}.
\paragraph{\irfanview} Visor de imágenes freeware. Será utilizado para la adquisición de imágenes desde el escáner \cite{IrfanView}.
\paragraph{\textsc{XnView}} Visor de imágenes freeware. Es con el que me siento cómodo para visualizar imágenes en general. Existen muchas alternativas disponibles (por ejemplo, \irfanview) \cite{XnView}.
\paragraph{\textsc{SumatraPDF}} Un buen visualizador de documentos multiformato. Licencia GPLv3. Para ver los \pdf y \djvu que vamos a generar \cite{SumatraPDF}.
\paragraph{\textsc{WinDjView}} Visualizador de archivos \djvu. GPLv2. \textsc{sumatraPDF} lo suple en general bien, pero este muestra alguna información adicional específica que puede sernos útil \cite{WinDjView}.
\subsection{Procesadores de imágenes} Se trata de software para procesar las imágenes escaneadas, realizar algún retoque o edición por lotes.
\paragraph{\scantailorAdvanced} Herramienta interactiva para el posprocesamiento de las páginas escaneadas. Licencia GPLv3. Núcleo de todo el proceso. Con este software se enderezarán y binarizarán las páginas, ajustarán los márgenes, separarán las imágenes, etc. Es un fork del original \scantailor (\cite{ScanTailor}), prácticamente abandonado desde el 2012. Existe otro fork similar y aún mantenido: \textsc{\scantailor Universal} (\cite{ScanTailorUniversal}). No tengo experiencia con este último. Siempre que hablamos de \scantailor nos estaremos refiriendo a \scantailorAdvanced \cite{ScanTailorAdvanced}.
\paragraph{\textsc{ScanKromsator}} Alternativa a \scantailor con muchas más opciones. Freeware. Por lo que entiendo existe desde bastante antes y es muy usado en Rusia. Lamentablemente posee escasa documentación y ésta es poco actualizada. Puede ser difícil conseguir información o soporte en otro idioma que no sea ruso \cite{ScanKromsator}.
\paragraph{\gimp} Programa de edición de imágenes. Licencia GPLv3. Es una alternativa libre a Photoshop. Lo usaremos para retocar detalles de las páginas escaneadas \cite{GIMP}.
\paragraph{\imagemagick} Conjunto de utilidades para manipular y convertir imágenes. Licencia Apache 2.0. Lo usaremos para procesar imágenes por lotes \cite{ImageMagick}.
\subsection{Generadores de \texorpdfstring{\ocr}{OCR}} Este será el software que utilizaremos para reconocer el texto en nuestros documentos escaneados.
\paragraph{\textsc{ABBYY \abbyy}} Aplicación de software de \ocr (reconocimiento óptico de caracteres). Software propietario y de pago. Lo usaremos para insertar una capa de texto seleccionable a nuestros documentos finales.
\paragraph{\textsc{tesseract}} Motor de \ocr libre para varias plataformas. Licencia Apache 2.0. Hay varias interfaces gráficas disponibles. No tengo experiencia con él. Para usarlo habría que hacer adaptaciones a todo el flujo de trabajo \cite{tesseract}.
\paragraph{\textsc{Nuance Omnipage}} Alternativa propietaria y paga. Más bien orientada al reconocimiento en serie de grandes volúmenes de documentos. Tampoco la he probado. No estoy seguro de que maneje archivos \djvu \cite{Omnipage}.
\subsection{Productores de documentos} Este software es el que nos permitirá generar y editar nuestros documentos a partir de las imágenes procesadas.
\paragraph{\textsc{Adobe} \acrobat} Permite visualizar, crear y modificar archivos \pdf. También hace \ocr. Software propietario y de pago. Lo usaremos para personalizar los marcadores, los números de página, insertar las imágenes (opcionalmente) y generar documentos \pdfa, para el guardado a largo plazo de documentos electrónicos. Las versiones anteriores también servirán, salvo quizás para el paso de insertar imágenes (se requiere la ejecución de javascripts de Adobe, que no he probado con estas). Dependiendo del resultado que busquemos, podría ser opcional \cite{Acrobat}.
\paragraph{\djvulibre} Implementación libre del formato \djvu. Incluye visor, decoder, algunos encoders simples y otras herramientas varias. Licencia GPLv2. Si bien podría emplearse para generar nuestros documentos \djvu, de este paquete usaremos casi exclusivamente las herramientas de manipulación (\typesetExe{djvused.exe}, \typesetExe{djvm.exe}, etc.) \cite{DjVuLibre}.
\paragraph{\textsc{LizardTech DjVu Document Express Enterprise}} Aplicación comercial para la generación de archivos \djvu. Software propietario y de pago. Discontinuado en 2006.\footnote{AT\&T es dueña de varias patentes relativas al formato. (Para más información, ver \cite{DjVuLicensing, DjVuOpenSourceLicensing}.) Desde hace algunos años los derechos de uso comercial de estas se han ido transfiriendo a diferentes compañías: LizardTech (ahora Extensis), Celartem (que adquirió estas dos) y Cuminas. Esta última ofrece un producto con el mismo nombre pero completamente distinto.} La alternativa libre es \djvulibre. Sin embargo, la calidad de los encoders de LizardTech es superior salvo, tal vez, para la codificación de fotos.\footnote{De la web de \djvulibre: «The compressors provided here are slower, produce larger files (sometimes with lower image quality) than the commercial compressors, but they do the job».} Si bien hay versiones más recientes, la v5.1.0 (b946 o b973) funciona bien. No lo usaremos directamente, por lo que no hay necesidad de obtenerlo.
\paragraph{\textsc{LizardTech} \djvueditor} Creador y editor de ficheros \djvu. Software propietario y de pago. Tiene una interfaz amigable que permite insertar páginas en un documento, así como crear hipervínculos. Incluye \ocr. Opcional.
\paragraph{\djvusmall} Interfaz de usuario para las aplicaciones de línea de comandos \typesetExe{djvudecode.exe} y \typesetExe{documenttodjvu.exe} de \dexpress (v5.0.0.973). La licencia de la \textsc{gui} es GPLv2, pero las aplicaciones que controla son comerciales. Su autor es \mondaytwothousand. Sigue muy vigente a pesar de que se dejó de desarrollar en 2006 \cite{DjVuSmall}.\footnote{El autor ofrece por un lado los fuentes, que son libres, y por otro los binarios, que ya incluyen las aplicaciones comerciales. En particular, \typesetExe{documenttodjvu.exe} fue modificada para funcionar sin licencia y redirigir ciertos mensajes internos hacia la consola, lo que permite visualizar el proceso de codificación en tiempo real.}
\paragraph{\djvusmallmod} Fork de \djvusmall desarrollado por \textsharik a partir del 2011. Es un proyecto bastante más ambicioso, que ya incluye la funcionalidad de \djvuimager, la separación automática o semiatomática en capas,\footnote{No la cubro en esta guía.} agrega varias modificaciones más a \typesetExe{documenttodjvu.exe} (por ejemplo, procesamiento multihilos) e incluye ejecutables de versiones más nuevas de \dexpress (para convertir de \djvu a \pdf). Licencia GPLv2. Incluye completa documentación en ruso. Usando un traductor como el de Google se logra entender bastante bien \cite{DjVuSmallMod}.
\subsection{Herramientas varias} Sobre todo para el formato \djvu, existen varias herramientas que vamos a necesitar en los distintos pasos.
\paragraph{\qpdf} Aplicación de línea de comandos que hace transformaciones estructurales y que preservan el contenido de archivos \pdf. Licencia Apache~2.0. Lo usaremos para insertar las imágenes en nuestro documento \pdf \cite{QPDF}.
\paragraph{\djvuimager} Herramienta para pegar imágenes en archivos \djvu. Licencia GPLv2. La necesitaremos si vamos a utilizar el método de la sección~\ref{sec:SToutputPictureZones} \cite{DjVuImager}.
\paragraph{\textsc{PdgCntEditor}} Editor de marcadores para \pdf y \djvu. Freeware para uso no comercial. Brinda una cantidad de herramientas para la generación y edición de marcadores en estos dos formatos \cite{PdgCntEditor}.
\paragraph{bookm} Herramienta desarrollada por \mondaytwothousand. A partir de un archivo de marcadores convencional genera otro con la estructura necesaria para usar con \typesetExe{djvused.exe} \cite{bookm}.
\subsection{Verificadores} En el caso del formato \pdf, existe un software que permite verificar que nuestro documento cumple con el estándar \pdfa de almacenamiento de largo plazo.
\paragraph{\veraPDF} Herramienta de validación de documentos \pdfa. Licencia GPLv3 o MPLv2. La usaremos para verificar el \pdfa que hayamos creado \cite{veraPDF}.
\section{Requisitos de hardware} Los requisitos de hardware son bastante más modestos, pero hay una discusión interesante sobre el escáner.
\subsection{Material para digitalizar} Esta guía está enfocada en la digitalización de libros, pero su lectura podría resultar útil para la digitalización de otro tipo de documentos.
\subsection{Regla de longitud suficiente} Precisión a gusto del usuario. Es un elemento opcional que usaremos para hacer coincidir las medidas reales del impreso físico con las del documento final. Debe poder medir al menos la dimensión más larga del material. Puede omitirse en caso de que esta coincidencia no sea de interés.
\subsection{Escáner} Respecto al escáner, existen multitud aspectos a tener en cuenta. El correspondiente artículo de la Wikipedia \cite{WikipediaImageScanner} es un buen punto de partida. A continuación se esbozan algunas características de las principales tecnologías. Por supuesto, existen otras.
\subsubsection{Escáner de libros} Para la digitalización «profesional» de documentos existen multitud de opciones, sobre todo orientadas a bibliotecarios y archivistas. Son los así llamados \emph{book scanners}, \emph{large format scanners}, \emph{document cameras}, etc. Consisten generalmente en una superficie sobre la que se coloca la obra a digitalizar, iluminación adecuada y una o más cámaras en la parte superior, que van tomando fotografías de alta resolución. Luego, mediante software incluido realizan correcciones a las imágenes, reconocen el texto, generan documentos en varios formatos, etc. Todo esto de manera rápida, automática o semiautomática, pues están pensados para el procesamiento de grandes volúmenes de ejemplares.
Son aparatos generalmente costosos y voluminosos. En la figura~\ref{fig:scannerbookScanners} se ilustran algunos ejemplos \cite{ScanSnap, ET16}.
\begin{figure}
\subcaptionbox{ScanSnap SV600, de Fujitsu}{\includegraphics[width=.44\linewidth]{scannerScanSnap}}\hfill
\subcaptionbox{ET16/ET18, de CZUR}{\includegraphics[width=.54\linewidth]{scannerET16}}
\caption{Dos ejemplos de \emph{book scanners}\label{fig:scannerbookScanners}}
\end{figure}
Es de destacar la labor que desde hace años viene realizando la comunidad \emph{DIY Book Scanner} \cite{DIYBookScanner}, fundada por Daniel Reetz \cite{danreetz}, para desarrollar soluciones de escaneo accesibles para cualquiera. El sitio y sus foros contienen cantidad de información útil sobre cada etapa tanto de la construcción de un escáner (fig.~\ref{fig:scannerArchivist}) como del posprocesamiento de las imágenes, entre muchos otros temas relacionados.
\begin{figure}
\centering
\includegraphics[width=.7\linewidth]{scannerArchivist}
\caption[The Archivist Book Scanner]{The Archivist Book Scanner. Desarrollado por Daniel Reetz con la colaboración de la comunidad \emph{DIY Book Scanner}\label{fig:scannerArchivist}}
\end{figure}
Otros proyectos similares y aún en desarrollo son \emph{Libreflip} \cite{Libreflip}, de Ijon Berlin, y \emph{Linear Book Scanner} \cite{LinearBookScanner}, de Dany Qumsiyeh.
\subsubsection{Escáner de cama plana} Estos son los más comunes y económicos. Existen básicamente dos tecnologías: \textsc{cis} y \textsc{ccd}. Hay una cantidad interesante de detalles técnicos, pero básicamente la tecnología \textsc{ccd} es un poco mejor aunque algo más cara. En mi experiencia, cualquiera de los dos funciona suficientemente bien con una gama amplia de materiales mientras se acerque lo suficiente la página al vidrio del escaner \cite{CCDvsCIS}.
Este tipo de escáneres son los que ofrecen las impresoras multifunción, aunque también se venden por separado.
Existe una subvariedad en esta categoría, diseñada específicamente para escanear libros. La característica saliente es que el vidrio del escáner llega casi al borde del aparato, lo que permite alcanzar fácilmente el espacio en donde se unen las páginas. Ver ejemplo en la figura~\ref{fig:scannerOpticBook3800} \cite{OpticBook3800}.
En esta guía utilizo un escáner de cama plana para digitalizar el material. Si se usa otro tipo se deberá hacer algunos ajustes al procedimiento de digitalización.
\begin{figure}
\subcaptionbox{Vista general}{\includegraphics[width=.48\linewidth]{scannerOpticBook3800-1}}\hfill
\subcaptionbox{Detalle. El vidrio casi alcanza el borde}{\includegraphics[width=.48\linewidth]{scannerOpticBook3800-2}}
\caption[OpticBook 3800]{OpticBook 3800, de Plustek\label{fig:scannerOpticBook3800}}
\end{figure}
\subsubsection{Escáner con \texorpdfstring{\textsc{adf}}{ADF}} \textsc{Adf} significa alimentador automático de documentos (\emph{automatic document feeder}, en inglés). Estos escáneres son muy prácticos, pues toman cada hoja de una pila y la escanean sin necesidad de intervención humana, algunos inclusive por ambas caras. La desventaja es que las hojas a escanear deben estar sueltas. Son muy comunes en las oficinas. Algunos ejemplos en la figura~\ref{fig:scannerADF} \cite{Workforce, ScanJetPro2500}.
\begin{figure}
\hspace*{\fill}
\subcaptionbox{Workforce DS-410, de EPSON}{\includegraphics[width=.4\linewidth]{scannerWorkforce}}\hfill
\subcaptionbox{ScanJet Pro 2500, de HP}{\includegraphics[width=.45\linewidth]{scannerScanJet}}%
\hspace*{\fill}
\caption{Escáneres con \textsc{adf}\label{fig:scannerADF}.}
\end{figure}
\section{Conclusiones} Los requisitos de software son bastante extensos. La utilidad de cada uno se irá entendiendo a medida que se avance con la guía. Para el hardware existe una variedad importante de opciones de adquisición de imágenes. Dependiendo de cual tengamos a mano será posible usar la guía tal cual o habrá que hacerle modificaciones al flujo de trabajo.
En el próximo capítulo hablaremos brevemente sobre la estructura que tendrán los archivos de nuestro proyecto.
\chapter{Estructura del proyecto} Los archivos de nuestro proyecto estarán estructurados en un árbol de carpetas como el de la figura~\ref{fig:projectStructure}. Habrá una carpeta base llamada \typesetFolder{Project}, dentro de la que iremos creando las siguientes. Esta carpeta base puede estar en cualquier lugar de nuestro \textsc{pc}. Normalmente la coloco en la raíz del disco \typesetFolder{C:}, pero los scripts que utilizaremos deberían funcionar sin importar donde esté ubicada, mientras se respete la estructura del árbol.\footnote{Hay excepciones que se mencionan específicamente.}
\begin{figure}
\hspace*{\fill}
\begin{forest}
for tree={font=\sffamily, grow'=0,
folder indent=.9em, folder icons,
edge=densely dotted}
[Project
[ABBYY]
[Batches]
[djv]
[SCAN]
]
\end{forest}\hfill
\begin{forest}
for tree={font=\sffamily, grow'=0,
folder indent=.9em, folder icons,
edge=densely dotted}
[SCAN
[foreground]
[background]
[out]
]
\end{forest}%
\hspace*{\fill}
\caption{Árbol de directorios del proyecto\label{fig:projectStructure}}
\end{figure}
En \typesetFolder{SCAN} irán nuestras exploraciones hechas con el escáner. Dentro de esa carpeta tendremos \typesetFolder{out}, donde \scantailor guardará las imágenes procesadas. A su vez, podrían estar \typesetFolder{foreground} y \typesetFolder{background}, donde se guardarán respectivamente las imágenes con la capa de texto y de fotos.
En \typesetFolder{Batches} guardaremos los scripts y algunos archivos asociados a ellos.
En la carpeta \typesetFolder{ABBYY} irá nuestro proyecto de \abbyy. Dentro de esa carpeta el programa creará muchas otras, con la estructura que se describe en el apéndice~\ref{sec:abbyyProjectStructure}.
En \typesetFolder{djv} guardaremos varios documentos \pdf y \djvu, que corresponderán a las distintas etapas de procesamiento.
% ------------------------------------------------------------------------------
% --------------------------------- PART II ---------------------------------
% ------------------------------------------------------------------------------
\part{Procedimiento}
\chapter{Introducción\label{sec:procedure}} En esta parte se explica cada paso del proceso hasta la producción de los archivos digitales.
Como ejemplo vamos a utilizar un libro de instrumentación y medidas de B.~A. Gregory \cite{GregorySpringer}.\footnote{Para más información, ver el apéndice~\ref{sec:aboutGregory}.}
Comenzaremos explicando los trabajos de escaneo del material original: preparación del escáner, preparación del material, configuración del software, proceso de escaneo y posibles complicaciones.
Luego pasaremos al procesamiento de las imágenes adquiridas, para el que utilizaremos fuertemente el software \scantailor.
El siguiente paso será reconocer el texto con \abbyy. Para ello deberemos configurarlo adecuadamente y habrá una cantidad de obstáculos que tendremos que evitar.
Por último crearemos los documentos finales en formato \pdf y/o \djvu. Deberemos agrupar las imágenes en estos archivos y agregarles el texto reconocido, las imágenes, los marcadores, etiquetas de páginas y metadatos.
Sin más dilaciones: ¡comencemos!.
\chapter{Escaneo\label{sec:scanning}} La regla número uno para obtener un buen resultado es comenzar con buen material de base. En el caso que nos ocupa necesitaremos imágenes de buena calidad, es decir: de adecuada resolución, almacenadas en el formato adecuado, usando el algoritmo adecuado, sin artefactos, etc. En esta sección veremos algunas recomendaciones para conseguirlas. Recomiendo antes visitar \cite{ScanTips}.
\section{Estado del aparato\label{sec:scanningState}} Lo primero que debemos hacer es revisar el escáner que vayamos a usar. Para ello puede ser útil tener a mano una linterna. El vidrio debe estar limpio, libre de grasa, vellos, polvo y cualquier otro tipo de suciedad. Lo mismo la parte interna de la tapa del escáner, pues aunque muchas veces no se use podría dejar caer suciedad sobre el vidrio. Si no lo están, deben primero limpiarse según las especificaciones del fabricante. En caso de que no existan, un paño de microfibra o papel absorbente apenas humedecido con agua (o mejor aun alcohol isopropílico) podría funcionar. Si el vidrio se encuentra rayado conviene hacer alguna exploración de prueba para ver si la afecta apreciablemente.\footnote{Sobre una página completamente blanca se aprecia bien.} De ser así deberemos evitar esa zona del escáner y, en caso de no poder hacerlo, procurar otro aparato.
Además, deben haberse instalado correctamente los drivers y el software de digitalización. En caso de tener problemas con esto, lo mejor será consultar en la web del fabricante o algún foro de soporte en internet.
\section{Preparación del material\label{sec:scanningPreparingMaterial}} ¡¿Hay que preparar el libro?! Bueno, eso dependerá de varias cosas.
Lo primero que debemos preguntarnos es que valor (sentimental o material) tiene lo que vamos a escanear, y cuanto de ese valor estamos dispuestos a sacrificar o a poner en riesgo.
Si estamos hablando de un libro barato o al que no nos sentimos apegados, la opción más eficiente es cortarle el lomo en una guillotina\footnote{O cortar sus páginas de una, para los que tengan paciencia.} y colocarlo en un escáner \adf. Si no tenemos ese tipo de escáner, de todas formas es más fácil colocar las hojas sueltas en uno de cama plana y conseguir digitalizaciones de muy buena calidad. Luego de esto se pueden tirar las hojas o, si vale la pena, enviarlas a reencuadernar.
Si el material no puede ser destruido, debemos preguntarnos si aún así no puede ser abusado. Es decir, ¿podemos permitirnos abrirlo 180\textdegree\ y apretarlo con fuerza contra el vidrio del escáner? He escaneado muchos libros de esta manera y salvo algunas excepciones nunca han perdido páginas ni quedado con daños permanentes, pero esa evaluación la debe hacer cada persona. %your mileage may vary
Aún si estamos dispuestos, podría ocurrir que no logremos buenos resultados en la parte donde se unen las hojas (fig.~\ref{fig:epsonScan}). Para estar seguros podemos hacer algunas previsualizaciones de prueba.
Si seguimos sin encontrar la solución, debemos considerar adquirir otro tipo de escáner. O tal vez otro ejemplar de la obra que tenga menos valor y permita estos abusos.
Los productos que fabrica para esto Plustek funcionan bastante mejor, pero igual se debe hacer algo de presión sobre el lomo para que toda la imagen sea clara, sobre todo en volúmenes muy gruesos.
Luego están los \emph{book scanners} comerciales, pero por estar pensados para materiales que no pueden ser abusados, dependen mucho del software que traen para corregir las aberraciones ópticas que tiene la imagen, producto de que la página nunca se encuentra plana respecto a las cámaras.
Un punto intermedio es el Archivist o similares, que abren los libros solo unos 135\textdegree\ y suavemente presionan una cuña de vidrio para aplanar las páginas.
No se desanime si su caso no está cubierto en estas líneas. Piense, experimente, pregunte. Esta guía no no lo cubre todo y la solución que necesita para su proyecto puede estar a la vuelta de la esquina.
\subsection{¿Qué partes escanear?\label{sec:scanningWhatToScan}} Antes de continuar hay un aspecto importante que no quisiera dejar de resaltar. En general, pero sobre todo si se trata de un libro publicado, escaneémoslo de principio a fin, sin dejar fuera absolutamente nada: ni sobrecubiertas, ni solapas, ni cubiertas, ni páginas en blanco (llamadas de respeto o de cortesía), ni páginas de legales (copyright), ni apéndices, ni índices, ni lomo\... Todo tiene su razón para estar allí y hace a la calidad de la publicación (y, por ende, de la digitalización), por lo que no hay motivo para excluir ninguna parte.
\subsection{Fotos\label{sec:scanningPhotos}} A lo largo de la guía usaremos el vocablo «fotos» para referirnos a las ilustraciones o fotografías, a color o en escala de grises, impresas en el material que estamos digitalizando. Esto para distinguirlas de otras ilustraciones o diagramas simples, impresos con la misma tinta que el resto del texto, que no requieren del tratamiento especial que se describe la sección «Picture zones» (sec.~\ref{sec:SToutputPictureZones}).
\section{Configuración del software\label{sec:scanningSoftware}} El paso siguiente es configurar el software de escaneo. Generalmente, este viene pensado para que se pueda usar sin pensar demasiado y que aún así puedan obtenerse buenos resultados. Por ello ya se incluyen cantidad de herramientas de posprocesado (mejora de la nitidez, desinclinación, balance de blancos, separación de varias imágenes, entre muchas otras). Debemos desactivarlas todas. Tengamos en cuenta que de ser necesarias algunas de estas correcciones podremos realizarlas más adelante y con mucho más control utilizando programas adicionales.
\subsection{\irfanview} Abrimos \irfanview y elegimos \menu{File > Acquire/Batch Scanning\...} obteniendo el cuadro de diálogo de la figura~\ref{fig:scanningIrfanViewBatch}. Debemos seleccionar \menu{\typesetDotCircle{Multiple images (Batch mode)}}, luego en \menu{Output file name > SCAN\_}, en \menu{Number of digits > 3}\footnote{o \menu{4} si nuestro proyecto contiene 1000 páginas o más.} y en \menu{Destination directory > C:\textbackslash Project\textbackslash SCAN}. Es conveniente activar \menu{\typesetCheckbox{Skip existing files}} y \menu{\typesetCheckbox{Remember last scan counter}}.
\subsubsection{Formatos\label{sec:scanningSoftwareFormats}} En este punto debemos elegir el formato de archivo para guardar las exploraciones. \irfanview ofrece muchos, pero los dos que funcionan mejor son \tiff y \png.\footnote{En el resto de la guía asumiremos que se usó \tiff.}
Para \tiff elegimos la opción \menu{TIF - Tagged Image File Format} del menú \menu{Save as} y presionamos \keys{Options}. Allí aparece el cuadro de la figura~\ref{fig:scanningIrfanViewBatchTIF}, donde se debe seleccionar el tipo de compresión. Sin entrar en más detalles, elegimos \menu{\typesetDotCircle{LZW}}, pues no tiene pérdidas (\emph{lossless}) y ofrece un grado razonable de compresión. Otras alternativas sin pérdidas son \menu{\typesetCircle{ZIP}}, que alguna vez me dio problemas con \scantailor y \menu{\typesetCircle{Packbits}}, que no he probado. Por ninguna razón elegir \menu{\typesetCircle{JPEG}}, pues introduce pérdidas (\emph{lossy}) o \menu{\typesetCircle{None}} (sin compresión) porque genera archivos enormes.\footnote{Nuestro proceso contendrá muchos archivos temporales de gran tamaño que al final terminarán en un documento de tamaño razonable. Estos archivos temporales podrán ser borrados al terminar, pero si de todas formas pudiéramos ahorrar algo de espacio durante el proceso lo haremos.}
La alternativa a \tiff es \png. El algoritmo de compresión de \png es siempre sin pérdidas. Elegimos \menu{PNG - Portable Network Graphics} y presionando en \keys{Options} vemos el cuadro de la figura~\ref{fig:scanningIrfanViewBatchPNG}, donde ingresamos \menu{Compression level > 9}. Activando la casilla \menu{\typesetBox{Use PNGOut PlugIn}} podemos mejorar ligeramente la compresión pero a un costo computacional muy alto, que no vale la pena, por lo que la dejamos desactivada.
\begin{figure}
\centering
\subcaptionbox{Menú \menu{Acquire/Batch Scanning\...}\label{fig:scanningIrfanViewBatch}}{\includegraphics[width=\linewidth]{scanningIrfanViewBatch}}\\
\subcaptionbox{Opciones del formato \menu{TIF}\label{fig:scanningIrfanViewBatchTIF}}{\includegraphics[width=.49\linewidth]{scanningIrfanViewBatchTIF}}\hfill
\subcaptionbox{Opciones del formato \menu{PNG}\label{fig:scanningIrfanViewBatchPNG}}{\includegraphics[width=.49\linewidth]{scanningIrfanViewBatchPNG}}
\caption{Ajustes de escaneo de \irfanview\label{fig:scanningIrfanView}}
\end{figure}
\subsection{\epsonscan} Luego de elegir las opciones presionamos \keys{OK} y si el escáner está bien configurado debería iniciarse el software correspondiente. Como ejemplo usaremos el programa \epsonscan (v5.7.9.3). En la figura~\ref{fig:epsonScan} se muestra la ventana principal. Podemos ver que se ofrecen varios \menu{Modos}: \menu{Automático}, \menu{Fácil}, \menu{Oficina} y \menu{Profesional}. Por supuesto elegimos \menu{Profesional}.
Comenzamos por colocar una página representativa\footnote{Elegí una donde haya tanto texto como fotos.} del material a escanear y luego presionamos \keys{Previsualización}, lo que nos dará un resultado como el de la fig.~\ref{fig:epsonScan}. En caso de que la región a escanear no ocupe toda la superficie del escáner, conviene seleccionarla dibujando un rectángulo en la pestaña de \menu{Previsualización}, de esta forma se agilizan un poco los tiempos de escaneo. \label{pag:scanningRegionSelection} Para que esta opción funcione bien cada página a escanear debe ser colocada dentro de la misma zona seleccionada. De lo contrario podría quedar contenido fuera.
\begin{figure}
\includegraphics[width=\linewidth]{epsonScan}
\caption[Ventana principal de \epsonscan]{Ventana principal de \epsonscan. Se previsualizaron dos páginas representativas\label{fig:epsonScan}}
\end{figure}
En nuestro caso las opciones \menu{Tipo Documento(Y)} y \menu{Origen Documento} no se pueden modificar. \menu{Tipo Auto Exposición} se explica más abajo.
En \menu{Tipo de imagen} elegimos \menu{Color 24-bit} o \menu{Grises 8-bit}, dependiendo de si la página es a color o no. Se ofrecen también \menu{Suavizado de Color} y \menu{Ninguno}. Según la documentación de EPSON la primera es para «gráficos a color, como un diagrama o un gráfico». La segunda no tiene un nombre muy explícito pero significa bitonal. Es decir, blanco o negro. Esta opción puede ser tentadora porque generalmente produce un tamaño de archivo más pequeño. Sin embargo, se pierde muchísima información de la página (fig.~\ref{fig:epsonScanBitonal}). Nuestro resultado final será en general bitonal, pero luego de todo el procesamiento tendremos imágenes de excelente calidad e ínfimo tamaño. Por todo esto, no debe usarse ninguna de estas dos opciones u otras similares que puedan ofrecer las aplicaciones de los distintos fabricantes.
\begin{figure}
\includegraphics[width=\linewidth]{epsonScanBitonal}
\caption[Páginas representativas escaneadas en bitonal]{Páginas representativas escaneadas seleccionando la opción \menu{Tipo de imagen > Ninguno} (bitonal). Nótese que las fotos están arruinadas y que el texto se vuelve ilegible\label{fig:epsonScanBitonal}}
\end{figure}
La \menu{Resolución} es uno de los parámetros más importantes. La óptima es de 300\,dpi (ppi o ppp) y es la que usaremos en esta guía. Así se obtiene un buen resultado final y no se hace eterno el tiempo que se está presionando el libro contra el escáner. 600\,dpi sería aún mejor, pero en los escáneres comunes cada exploración toma mucho más tiempo. Valdrá la pena solo para páginas con un nivel muy alto de detalles. Si bien la elección final dependerá de cada caso, escanear a menos de 300\,dpi será siempre un desperdicio, por la cantidad de detalles que se perderán.
\menu{Tamaño de Documento} se ajustará a la región que hayamos seleccionado (si lo hicimos) y \menu{Tamaño de Destino(Z)} debe decir \menu{Original}.
Como se muestra, recomiendo la desactivación de todas las casillas: \menu{\typesetBox{Desenfocar máscara(K)}}, \menu{\typesetBox{Destramado}}, \menu{\typesetBox{Restauración de Color}},\\\menu{\typesetBox{Corrección claroscuro(B)}}, \menu{\typesetBox{Eliminación del Polvo}} y cualquier otra que ofrezca el software que estemos usando, por las razones aducidas al principio de esta sección.
En la parte de \menu{Ajustes} hay una serie de íconos que representan distintos tipos de ajustes que se pueden aplicar. Al presionar \keys{Previsualización} o cambiar el área seleccionada se activa automáticamente el primero, que es el de \menu{Autoexposición}. Este ajusta a todos los demás en función del contenido previsualizado (o el área seleccionada) y la opción \menu{Tipo Auto Exposición} elegida.
A veces no utilizo la opción de \menu{Autoexposición} sino que presiono \keys{Reiniciar} y dejo todos los valores por defecto. Otra alternativa, que es la que empleé en esta guía, es realizar un autoajuste con una página representativa y usarlo para todas las demás. En caso de dudas lo mejor es experimentar.
\section{A escanear} Una vez preparado todo, podemos comenzar a escanear. Para ello presionamos \keys{Escanear}. El equipo hará una exploración e \irfanview irá mostrando y guardando las imágenes de acuerdo a las opciones seleccionadas. Lo hará usando el nombre base (\menu{Output file name}) y aumentando la numeración. Es importante que el orden creciente de las páginas del libro corresponda con el orden creciente de los números de los archivos, para que no haya confusión a la hora de compaginar todo. Además, algunos scripts y aplicaciones que usaremos luego dependerán de que esta numeración sea consistente a lo largo de todo el proyecto para funcionar correctamente.
Si el libro es suficientemente pequeño podremos ir escaneando de a dos páginas a la vez, de lo contrario será de a una.\footnote{Sobre todo si es la primera vez que se utiliza esta guía recomiendo escanear de a una página, puesto que hacerlo de a dos complica el proceso como se explica en la sección~\ref{sec:scanningTwoPages}.}
Luego de un rato trabajando veremos que el proceso transcurre prácticamente sin pensar. Llegado ese punto yo aprovecho para paralelamente mirar televisión, escuchar música o meditar sobre lo humano y lo divino.
Conviene que las páginas estén rectas respecto a los bordes de la superficie de exploración, pero sin necesidad de perfección. Durante el procesamiento podremos corregir algunas desviaciones.
Es buen momento para poner sobre la mesa de cuanto tiempo estamos hablando. En el caso de este libro usé un escáner OpticBook~3800 configurado en 300\,dpi y grises~8-bit. Escaneé las primeras 200 páginas de un tirón (una página por exploración y habiendo seleccionado la región en el área de \menu{Previsualización}), lo que me llevó unos 40~minutos. Estamos hablando entonces de un promedio de 5\,pág/min. El libro tiene unas 450 páginas por lo que en total debería llevar al menos 90 minutos. Por supuesto que luego hay que revisar y reescanear las que no hayan quedado bien.
Al finalizar deberíamos contar con tantos archivos como páginas tiene el libro salvo que hayamos adquirido de a dos, en cuyo caso serán aproximadamente la mitad de archivos (cubierta, contracubierta y lomo se adquieren de una). Conviene hacer una inspección visual de cada imagen para ver si alguna no quedó del todo bien y necesita escanearse de nuevo. A continuación veremos algunos de los problemas con los que nos podríamos enfrentar y como remediarlos.
\subsection{Páginas faltantes} Siempre habrá que ir chequeando que no se nos pase por alto alguna página, y si ocurre remediarlo acomodando los nombres de los archivos, de forma de que aquel que haya sido salteado quede intercalado correctamente. Para esto puede ser útil \textsc{Advanced Renamer}.
En el ejemplo que estamos trabajando, la página 10 del libro corresponde al archivo \typesetFile{SCAN\_022.tif}, es decir que hay un desfasaje de 12 páginas. Un forma rápida de chequear que no falte ninguna es ver que el archivo \typesetFile{SCAN\_112.tif} corresponda con la página 100, el \typesetFile{SCAN\_212.tif} con la 200, y así\...
De esta forma descubrí que me faltó escanear la página 99 (+12 = archivo 111). Usando \textsc{Advanced Renamer} desplacé los nombres de los archivos así: \typesetFile{SCAN\_112.tif} \faLongArrowAltRight\ \typesetFile{SCAN\_113.tif}, \typesetFile{SCAN\_111.tif} \faLongArrowAltRight\ \typesetFile{SCAN\_112.tif}, \...\footnote{Por si no quedó claro, el programa permite renombrar fácil e instantáneamente todos los archivos de la manera que el usuario elija. \emph{No} se hizo uno por uno.} De esta forma quedó el nombre \typesetFile{SCAN\_111.tif} libre para la página que faltaba. Entonces la escaneé y le puse ese nombre.
En cualquier momento podemos reiniciar el proceso de escaneo a partir del número de página que elijamos.
\subsection{Curvatura y contenido fuera del área} Si no presionamos bien el lomo sobre el vidrio del escáner, obtendremos imágenes con sombras y distorsiones cerca del margen interior, debido a que el papel no está plano respecto al sensor. Ver un ejemplo en la figura~\ref{fig:scanningIrfanView}.
\begin{figure}
\subcaptionbox{Curvatura y sombra}{\includegraphics[width=.49\linewidth]{distortionCurveShadow}}\hfill
\subcaptionbox{Contenido fuera del área}{\includegraphics[width=.49\linewidth]{distortionCut}}
\caption{Distorsiones y sombras sobre el margen interior\label{fig:distortion1}}
\end{figure}
Si la sombra es pronunciada podría dar problemas durante la binarización. A su vez, si los contenidos están deformados no preservaremos exactamente el material original y probablemente dificultemos el proceso de \ocr.
Por otra parte, si no colocamos correctamente el material, podría ocurrir que parte del contenido de interés quedase fuera del área de exploración (fig.~\ref{fig:distortion1}).
En todos estos casos, la mejor solución será escanear de nuevo estas páginas.\footnote{Deberemos escanear de nuevo solamente si estas distorsiones afectan al texto o las imágenes. Si apenas caen dentro del blanco de página podremos ignorarlas.}
\subsection{Distorsiones trapezoidal y por movimiento} La distorsión trapezoidal, llamada en inglés \emph{keystone effect}, es prácticamente inexistente en los escáneres de cama plana, pero se trata de la número uno en los basados en cámaras fotográficas. Es una deformación que se produce por no estar el material perfectamente perpendicular al sensor de la cámara. El ejemplo de la figura~\ref{fig:keystone} fue tomado con la cámara de un teléfono celular. Si no puede corregirse ajustando el hardware, existen algunas soluciones de software que funcionan si la distorsión es moderada. En particular, \scantailor tiene la pestaña \menu{Dewarping} en el paso 6, pero aún se considera experimental y no tengo experiencia con ella.
También podría ocurrir que el material se moviera mientras el sensor del escáner avanza, provocando compresión o estiramiento de las líneas si es en la misma dirección del avance, o deformación lateral si es en la dirección perpendicular (fig.~\ref{fig:movimiento}). En este caso también deberá escanearse de nuevo.
\begin{figure}
\subcaptionbox{Trapezoidal. Se dibujó el trapecio\label{fig:keystone}}{\includegraphics[width=.59\linewidth]{distortionKeystone}}
\subcaptionbox{Movimiento\label{fig:movimiento}}{\includegraphics[width=.4\linewidth]{distortionMovement}}\hfill
\caption{Distorsiones trapezoidal y por movimiento\label{fig:distortion2}}
\end{figure}
\subsection{Transparencia de páginas\label{sec:transparency}} Dependiendo del tipo de papel y la tinta que se hayan usado puede ocurrir que sobre cada página se transparenten los contenidos de las contiguas. Normalmente este es un inconveniente que desaparece durante la binarización, pero en el caso de las fotos o imágenes complejas es más persistente y en algunos casos es fácil de tratar.
Ampliando en la figura~\ref{fig:distortion1} vemos que es posible distinguir el texto y los diagramas de las páginas contiguas. En la figura~\ref{fig:transparencyText} se muestra con más detalle.
Para disminuir el efecto de las transparencias en las fotos (fig.~\ref{fig:transparencyPhoto}) puede colocarse un papel de color negro\footnote{Usé una hoja impresa en negro por las dos caras. Según el caso, podría funcionar mejor otro color.} entre la página que se va a escanear y la siguiente (o anterior; fig.~\ref{fig:transparencyPaper}). Es decir que tendríamos el vidrio del escáner, luego la página que estamos escaneando, luego el papel negro y finalmente las demás hojas. El resultado se ve en la figura~\ref{fig:transparencyPhotoFix}.
Si esta medida no fuera suficiente, se podrían atenuar utilizando algún software. Si no fueran muchas páginas, podría usarse \gimp en cada una. De lo contrario, habría que buscar algún ajuste que diera resultados aceptables para aplicar por lotes, o dejarlas como están.
\begin{figure}
\includegraphics[width=\linewidth]{transparencyText}
\caption[Transparencia sobre texto y diagramas]{Transparencia sobre texto y diagramas (se ha acentuado para que se distinga con claridad)\label{fig:transparencyText}}
\end{figure}
\begin{figure}
\subcaptionbox{Transparencias sobre fotos\label{fig:transparencyPhoto}}{\includegraphics[width=\linewidth]{transparencyPhoto}}\par\medskip
\subcaptionbox{Mitigadas usando un papel negro por debajo\label{fig:transparencyPhotoFix}}{\includegraphics[width=\linewidth]{transparencyPhotoFix}}\par\medskip
\subcaptionbox{Colocación del papel negro\label{fig:transparencyPaper}}{\includegraphics[width=\linewidth]{transparencyPaper}}
\caption{Detalle de transparencias sobre fotos\label{fig:transparency}}
\end{figure}
\section{Respaldo de los originales\label{sec:scanOriginalBackup}} Al terminar es buena idea hacer un respaldo de las imágenes escaneadas, porque a veces las modificaremos directamente, y podremos evitarnos un disgusto si algo sale mal. Generalmente utilizo \szip para generar un archivo de respaldo con todas. Para hacerlo seleccionamos todos los archivos, hacemos \menu{\rightclick > \szip > Add to archive\...} y elegimos las opciones que deseemos.\footnote{Las opciones por defecto deberían bastar.} El archivo comprimido con los originales podemos guardarlo en la misma carpeta \typesetFolder{SCAN}.
\section{Conclusiones} En esta sección hemos visto como preparar el escáner y como configurar el software para escanear nuestro material. Se ha usado como ejemplo el software de EPSON, pero el aprendizaje debería ser fácilmente trasladable al que tengamos disponible. También vimos como preparar el material a escanear.
Luego aprendimos sobre el proceso de escaneado en sí, algunos problemas que se pueden presentar y como resolverlos.
En la sección siguiente veremos como procesar los archivos, separando el texto de las fotos, de forma de obtener imágenes binarizadas aptas para realizar \ocr.
\chapter{Limpieza y ajuste\label{sec:cleanAdjust}} Siendo esta la etapa crucial del procesamiento, la presento de la manera más exhaustiva posible. Sin embargo, el detalle que queramos prestarle a cada etapa del procesamiento dependerá de nuestro tiempo, habilidad y paciencia. Algunos de los pasos que siguen podrían ser salteados y aún así obtener resultados aceptables. He tratado de indicarlo cuando así sea.
\section{Dimensiones\label{sec:cleanAdjustDimensions}} Lo primero que vamos a hacer es medir las dimensiones del libro usando una regla.\footnote{Si el encuadernado fuera de tapa dura tal vez habría un tamaño para las cubiertas y otro para las páginas. Será nuestra decisión si preservamos esas diferencias o no.} En este caso el ejemplar es de tapa blanda y mide 15,5\,cm de ancho, 23,5\,cm de alto y 2,5\,cm de espesor. Al final obtendremos imágenes de 600\,dpi, por lo que podemos convertir entre cm y pixeles usando alguna de las siguientes fórmulas para estimar las dimensiones finales de nuestras páginas procesadas:\footnote{En el apéndice~\ref{app:conversion} se presentan las correspondientes fórmulas en pulgadas.}
\[
\text{pix} = \frac{\text{cm} \times \text{dpi}}{\text{2,54}}\hspace{3em} \text{cm} = \frac{\text{pix} \times \text{2,54}}{\text{dpi}}
\]
Resumo los resultados en el cuadro~\ref{tab:bookDimensions}.
\begin{table}
\centering
\caption{Dimensiones del libro a escanear (en cm) y dimensiones estimadas de imagen a 600\,dpi (en pix)\label{tab:bookDimensions}}
\begin{tabular}{rccc}
\toprule
(600\,dpi) & ancho & alto & espesor \\
\midrule
cm & 15,5 & 23,5 & 2,5 \\
pix & 3661 & 5551 & 591 \\
\bottomrule
\end{tabular}
\end{table}
\section{Orientación de páginas\label{sec:fixOrientation}} De acuerdo a como hayamos colocado el material en el escáner, es posible que las páginas pares o las impares estén rotadas 180\textdegree. Siempre es una buena idea, pero especialmente si estamos pensando en corregir frecuentemente los errores que vayamos encontrando, como se explica en la sección~\ref{sec:SToutput}, que la orientación de todas las páginas originales sea corregida antes de ingresarlas a \scantailor.
En nuestro caso de ejemplo son las páginas pares las que requieren ajuste. Para hacerlo ejecutamos el script~\ref{scr:orientationOddEven} de Python que invoca el comando \texttt{mogrify} de \imagemagick sobre las páginas de interés. Este nos preguntará por las páginas a corregir (\mintinline{python}|'Rotate odd or even pages?'|): deberemos ingresar \texttt{even} para rotar las pares y \texttt{odd} para las impares. Téngase en cuenta lo dicho en la sección~\ref{sec:scanOriginalBackup} sobre el respaldo de los originales, puesto que con este script los estaremos modificando.
\pythonScript{orientationOddEven.py}{Rotación de las páginas\label{scr:orientationOddEven}}
\section{Procesamiento con \scantailor} Este software es muy completo e incluye una gran cantidad de opciones en sus distintos pasos. La realidad es que al momento de escribir esta guía aún se encuentra pleno en desarrollo, por lo que no existe documentación suficiente que las explique todas en profundidad. Además, algunas son de carácter experimental o directamente no funcionan bien (la función \menu{Dewarp}, por ejemplo). Quien esto escribe no las ha probado todas. Por ello recomiendo al lector que busque la información que necesite en internet\footnote{El autor del fork original tiene una wiki con información y videos \cite{ScanTailorWiki}.} y que no tenga miedo de experimentar.\footnote{\scantailor \emph{no} modifica los archivos originales.} Tal vez esta guía esté sugiriendo algún procedimiento manual tedioso para una tarea que ya está cubierta por una nueva opción. La misma recomendación vale para todo otro software que se utilice.
\subsection{Creación de un proyecto nuevo} Dicho esto, comenzamos abriendo el software y seleccionando \menu{File > New Project}. Aparecerá un cuadro de diálogo como el de la figura~\ref{fig:STnewProject}, donde elegiremos la carpeta con las páginas escaneadas. Por defecto las imágenes procesadas irán automáticamente a una subcarpeta \typesetFolder{out}. En la columna derecha (\menu{Files In Project}) veremos todos los archivos escaneados. Podríamos excluir algunos seleccionándolos y presionando \keys{«}, pasándolos a la otra columna (\menu{Files Not In Project}). Como la carpeta \typesetFolder{SCAN} es exclusiva para estos archivos, no necesitaremos excluir ninguno.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{STnewProject}
\caption[Cuadro de diálogo \texttt{New Project} de \scantailor]{Cuadro de diálogo \menu{New Project de \scantailor}\label{fig:STnewProject}}
\end{figure}
\subsection{Paso 1. Fix orientation\label{sec:STfixOrientation}} Presionamos \keys{OK} y se cargan las imágenes. La vista debería ser como la de la figura~\ref{fig:STfixOrientation}. Sobre la izquierda tenemos el panel \menu{Filters}, con 6 pasos o filtros. Cada uno corresponde a una etapa del proceso. El primero es \menu{Fix Orientation} y se utiliza para corregir la orientación de las imágenes. Si no lo hicimos manualmente como se explica en la subsección~\ref{sec:fixOrientation} debemos hacerlo ahora.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{STfixOrientation}
\caption[Paso 1. Fix orientation]{Ventana principal de \scantailor y Paso 1. Fix orientation\label{fig:STfixOrientation}}
\end{figure}
Dijimos que teníamos rotadas las páginas pares, por lo que seleccionaremos una cualquiera de estas y presionaremos una de las flechas naranja debajo de \menu{Rotate} hasta que la página quede en la orientación correcta. Una vez listo presionaremos \keys{Apply to\...} y elegiremos la opción \menu{\typesetDotCircle{Every other page}} (fig.~\ref{fig:STfixOrientationApplyTo}). Para ver que más o menos haya quedado bien, podemos recorrer las miniaturas de la columna derecha y verificar que efectivamente todas las páginas están bien orientadas.
\begin{figure}
\centering
\includegraphics[width=.6\linewidth]{STfixOrientationApplyTo}
\caption[Cuadro de diálogo \texttt{Apply to\...} de \scantailor]{Cuadro de diálogo \menu{Apply to\...} de \scantailor\label{fig:STfixOrientationApplyTo}}
\end{figure}
Si la rotación de nuestras exploraciones originales no fuera así de regular, deberemos usar una combinación de rotación manual con opciones del cuadro~\ref{fig:STfixOrientationApplyTo} para asegurarnos de que todas queden con la misma orientación.
Cuando hayamos terminado presionaremos \play\ a la derecha del nombre del filtro. El programa recorre rápidamente todas las imágenes y genera las miniaturas. Al terminar podemos ir al paso 2.
\paragraph{Nota: páginas apaisadas} Si bien la mayoría de las páginas tienen orientación vertical, a veces nuestro material contiene algunas páginas con orientación horizontal,\footnote{Ver Wikipedia \cite{WikipediaPageOrientation} (en inglés).} también llamadas páginas «apaisadas» (fig.~\ref{fig:STsplitPagesError}). Más adelante deberemos decidir como queremos que estén en nuestro documento final (sección~\ref{sec:landscapePages}). De momento orientémoslas todas tal como aparecen en el material original.
\subsection{Paso 2. Split pages\label{sec:STsplitPages}} En este paso le indicaremos a \scantailor qué parte de la imagen escaneada corresponde a la página. Lo que debemos lograr es que toda la página quede dentro del área azul y que el resto quede fuera: trozos de la hoja que no estábamos escaneando, imágenes de nuestras manos presionando el material, bandas negras donde no había papel, etc.
En \menu{Page Layout} tenemos tres opciones (fig.~\ref{fig:STsplitPages}). La primera es para indicarle a \scantailor que la página ocupa toda el área de la imagen,\footnote{Útil si ya al escanear dibujamos un rectángulo en el área de previsualización como se explica en la página~\pageref{pag:scanningRegionSelection}.} mientras que la segunda permite excluir dos bandas verticales. Estas dos opciones las usaremos para páginas escaneadas de a una a la vez.
Si hicimos la digitalización de a dos páginas por vez usaremos la tercera opción, que es la que efectivamente divide la imagen, separándola en dos páginas.\footnote{Tengamos en cuenta las consecuencias (sec.~\ref{sec:scanningTwoPages}) de trabajar de esta manera.}
\begin{figure}
\centering
\includegraphics[width=.5\linewidth]{STsplitPages}
\caption{Paso 2. Split pages\label{fig:STsplitPages}}
\end{figure}
Cada vez que seleccionamos una página el programa elige automáticamente la opción que considera más adecuada. También podemos presionar \keys{Change\...} y especificar manualmente las opciones para todas las páginas (o pares, impares, etc.).
Presionamos entonces \play\ para que las analice todas. Luego deberemos recorrerlas y rectificar los errores que encontremos, ya sea cambiando la opción que el programa elige o moviendo la línea por la que se separarán las páginas o recortarán los márgenes. Ver ejemplo en la figura~\ref{fig:STsplitPagesError}.
\begin{figure}
\centering
\subcaptionbox{Error}{\includegraphics[width=.48\linewidth]{STsplitPagesError}}\hfill
\subcaptionbox{Remediado}{\includegraphics[width=.48\linewidth]{STsplitPagesErrorFix}}
\caption{Error en el paso 2\label{fig:STsplitPagesError}}
\end{figure}
\subsection{Paso 3. Deskew\label{sec:STdeskew}} \emph{Deskew} se podría traducir por desinclinar. En este paso el programa analiza cada imagen y corrige la inclinación que pueda tener. Si nuestro trabajo de escaneo fue más o menos prolijo entonces cada imagen necesitará rotarse apenas unos grados o menos. En mi experiencia el algoritmo es bastante robusto y se equivoca poco. De todas formas luego de dar \play\ conviene revisar que esté todo bien.
\begin{figure}
\centering
\includegraphics[width=.5\linewidth]{STdeskew}
\caption{Paso 3. Deskew\label{fig:STdeskew}}
\end{figure}
El programa ofrece la opción \menu{Order by decreasing deviation}, que permite ordenar las páginas según el ángulo por el cual debieron rotarse. Así ordenadas, las primeras de la lista son las que tienen mayor probabilidad de error, y podemos corregirlas manualmente. En nuestro ejemplo la mayor desinclinación que se debió aplicar fue de solo 1\textdegree. Esto indica que todas las páginas estaban bastante rectas. De todas formas 1\textdegree\ es una cantidad perceptible a simple vista.
\subsection{Paso 4. Select content\label{sec:STselectContent}} Lo primero que haremos en este paso es indicarle al programa qué tamaño tienen las páginas del material físico y (opcionalmente) donde se encuentran ubicadas en la imagen.
Lo segundo es parecido al paso 2, solo que ahora se usará un rectángulo para indicar el área de la imagen donde está el contenido. Todo lo que quede fuera de este rectángulo será descartado del resultado final.
\paragraph{Definición: páginas atípicas} Llamaremos \emph{páginas atípicas} a las correspondientes a las cubiertas y lomo, así como aquellas páginas que por alguna razón tengan un tamaño físico mayor o menor que el resto, como puede ocurrir con libros que traen páginas dobladas que pueden extenderse. Todas las demás serán, entonces, \emph{páginas típicas}.
\begin{figure}
\centering
\subcaptionbox{Opciones\label{fig:STselectContentOptions}}{\includegraphics[width=.4\linewidth]{STselectContent}}\hfill
\subcaptionbox{Diálogo \menu{Apply to\...}\label{fig:STselectContentApplyTo}}{\includegraphics[width=.58\linewidth]{STselectContentApplyTo}}
\caption{Paso 4. Select content\label{fig:STselectContent}}
\end{figure}
\subsubsection{Page Box} En el cuadro \menu{Page Box} que se ve en la figura~\ref{fig:STselectContentOptions} presionamos \keys{Manual} e ingresamos respectivamente el ancho y el alto del material en \menu{Width} y \menu{Height} del subcuadro \menu{Options}. En nuestro caso el cuadro~\ref{tab:bookDimensions} de la sección~\ref{sec:cleanAdjustDimensions} nos indica 155\,mm y 235\,mm. Luego presionamos \keys{Apply to\...} y en el cuadro de diálogo que aparece (fig.~\ref{fig:STselectContentApplyTo}) activamos \menu{\typesetCheckbox{Apply page box}} y elegimos \menu{\typesetDotCircle{All pages}}. Finalmente damos \keys{OK} para aplicar las dimensiones ingresadas a todas las páginas del proyecto.
Como alternativa y si no nos interesa ser muy escrupulosos con las dimensiones originales, podemos elegir \menu{Page Box > \keys{Auto}} y dejar que el programa trate de adivinar el tamaño de cada página y su ubicación. Si procedemos así, entonces podemos saltarnos la sección~\ref{sec:STmarginsOriginals}.
Sea cual sea la opción que elijamos, se generará un rectángulo anaranjado que indica donde \scantailor cree que esta situada la hoja en la imagen y qué tamaño tiene (fig.~\ref{fig:STselectContentError}). Es posible cambiarle el tamaño arrastrando los bordes. Haciendo \keys{\shift + \leftclick + arrastrar} sobre dicho rectángulo podremos posicionarlo correctamente sobre la página.\footnote{Esto solo será necesario si en el paso siguiente (sec.~\ref{sec:STmargins}) usamos la opción \menu{Auto Margins}.}
Para páginas atípicas recomiendo elegir \keys{Manual} e ingresar las dimensiones manualmente. Si vamos a editar las cubiertas manualmente como se esboza en la sección~\ref{sec:covers} podemos presionar \keys{Disable}.
\subsubsection{Content Box} Por defecto, \scantailor trata de detectar las áreas de contenido automáticamente. Para ello usa un algoritmo relativamente lento y propenso a errores, sobre todo si el material contiene manchas, puntos o defectos similares, que puedan ser confundidos con contenido legítimo (fig.~\ref{fig:STselectContentError}). A su vez, tiende a dejar afuera contenido que esté aislado del resto, como pueden ser las cabeceras o pies de página. Por todo esto recomiendo presionar \play\ y después revisar bien.
\scantailorAdvanced permite hacer \menu{\leftclick\,\leftclick} sobre la imagen para cambiar rápidamente el área de contenido, y así incluir o excluir la zona donde se señaló. También podemos arrastrar los bordes del rectángulo manualmente con \keys{\leftclick + arrastrar} o reposicionarlo con \keys{\shift + \leftclick + arrastrar} (aunque esta última opción no es en general útil).
Para ayudarnos en la tarea de asegurar el correcto reconocimiento de todas las áreas de contenido también podemos ordenar las páginas: \menu{Order by increasing > width, height, deviation} nos permite agrupar todas las páginas más altas (bajas), más anchas (angostas) o que se desvían más (menos) de la media juntas (fig.~\ref{fig:STselectContentOrder}). En esos conjuntos es más probable encontrar errores.
\begin{figure}
\centering
\includegraphics[width=.3\linewidth]{STselectContentOrder}
\caption{Opciones de ordenación de páginas\label{fig:STselectContentOrder}}
\end{figure}
Por ejemplo, en la figura~\ref{fig:STselectContentError} vemos que la página en cuestión era de las más altas no porque el contenido lo fuera, sino porque no había sido correctamente reconocido y debemos arreglarlo.
\begin{figure}
\centering
\subcaptionbox{Error inducido por defectos en la impresión}{\includegraphics[width=\linewidth]{STselectContentError}}
\subcaptionbox{Remediado manualmente}{\includegraphics[width=\linewidth]{STselectContentErrorFix}}
\caption{Error al seleccionar contenido automáticamente\label{fig:STselectContentError}}
\end{figure}
En otros casos lo será simplemente porque el contenido va más allá de los márgenes usuales del material, común en libros como el nuestro, con muchos dibujos y diagramas; o simplemente porque la ortotipografía del mismo no fue bien cuidada.\footnote{Como en nuestro material, donde el texto no está justificado.} A veces se encuentran páginas mal desinclinadas o con fotos o diagramas que no fueron correctamente reconocidos como contenido.
Todos los errores de selección de contenido que no corrijamos seguramente se hagan evidentes al compaginar el documento, sobre todo si somos escrupulosos con los márgenes. En ese punto aún serán fáciles de corregir, pero cuanto menos trabajo nos quede hacia adelante, mejor.
\subsection{Paso 5. Margins\label{sec:STmargins}} Una vez que ya hemos revisado cada página y marcado bien los contenidos es hora de ajustar los márgenes. Propongo un método que conserva lo más exactamente posible la apariencia original y otro que introduce márgenes razonables.
Cualquiera sea el caso, comenzamos decidiendo respecto a qué parte de las páginas vamos a referir los márgenes. En el caso que nos ocupa, el libro tiene los números de página impresos en las esquinas superiores exteriores de cada hoja. Las pares en la superior izquierda y las impares en la superior derecha. Estos son referencias bastante naturales y son las que usaremos.
Vamos entonces al paso 5 de \scantailor, nos paramos en una página par y en el submenú \menu{Alignment} (fig.~\ref{fig:STmarginsAlignment}) presionamos la flecha que apunta hacia arriba y a la izquierda. Veremos que la alienación cambia. Por ahora no nos preocuparemos por el ancho de los márgenes. El paso siguiente es presionar \keys{Apply to\...}, seleccionar \menu{\typesetDotCircle{Every other page}} y dar \keys{OK}. Luego hacemos lo mismo con las páginas impares, eligiendo la flecha que apunta hacia arriba y a la derecha.
\begin{figure}
\subcaptionbox{Submenú \menu{Margins}\label{fig:STmarginsWidth}}{\includegraphics[width=.49\linewidth]{STmarginsWidth}}
\subcaptionbox{Submenú \menu{Alignment}\label{fig:STmarginsAlignment}}{\includegraphics[width=.49\linewidth]{STmarginsAlignment}}\hfill
\caption{Paso 5. Margins\label{fig:STmargins}}
\end{figure}
Si nuestra alineación fuera por ejemplo sobre los números de página que aparecen abajo al centro u otra, deberemos elegir la flecha que mejor se ajuste al resultado buscado, tal vez también teniendo que discriminar entre páginas pares e impares.
Para las páginas atípicas usaremos márgenes especiales, por lo que desactivamos \menu{\typesetBox{Match size with other pages}} para cada una de ellas. Veremos que al hacerlo las dimensiones finales de estas páginas no afectarán a todas las demás.
Por último activamos la casilla \menu{\typesetCheckbox{Auto Margins}} del menú correspondiente, presionamos \keys{Apply to\...} y elegimos \menu{\typesetDotCircle{All pages}}. Esta opción utilizará la información de \menu{Page Box} y \menu{Content Box} que hayamos ingresado en el paso anterior para generar los márgenes. Para aplicar los márgenes automáticos presionamos \play\ al lado del nombre del filtro.
\subsubsection{Medida de márgenes originales*} Como muchas veces nuestro material tiene páginas cuyo contenido invade los márgenes, no existe un único valor para el ancho de los márgenes de cada una. En esta subsección opcional veremos una forma de asignar un valor representativo a cada uno de los márgenes.
\paragraph{Definición: páginas bien comportadas} Dentro del conjunto de páginas típicas, llamaremos páginas \emph{bien comportadas} a aquellas en las que el contenido se mantiene aproximadamente dentro de una misma región. Quedan excluidas de esta definición, y serán por tanto \emph{mal comportadas}, aquellas páginas con imágenes, diagramas, tablas u otros elementos que invaden los márgenes, o aquellas que dan comienzo a un capítulo o sección, entre otras.
Comenzando con los márgenes superior e inferior, ordenamos las páginas por alto (\menu{Order by increasing height}) y buscamos abajo del todo la bien comportada más alta. En nuestro caso al final aparecen las cubiertas (obviamente) y páginas con tablas. La bien comportada más alta es la p.~296. Vamos entonces a esa página en el libro, medimos los márgenes superior e inferior con la regla y los registramos.
Ahora pasamos a ordenar por ancho: \menu{Order by increasing width}. Hacemos lo mismo que antes, buscamos las bien comportadas más anchas par e impar. Son las pp.~250 y 117. Medimos para cada una el margen izquierdo y derecho y los registramos. Las medidas en este caso se presentan en el cuadro~\ref{tab:pageMargins}.\footnote{Las medidas dieron 20\,mm y 11\,mm para las pares, y 10\,mm y 19\,mm para las impares. Debido a tolerancias de impresión y/o encuadernado las páginas no son simétricas, por lo que las medidas de los márgenes tampoco lo serán exactamente. Para simplificar, haremos que en nuestro resultado sí lo sean, simetrizando estos valores.}
\begin{table}
\centering
\caption{Márgenes de las páginas bien comportadas (en mm)\label{tab:pageMargins}}
\begin{tabular}{@{}rlcccc@{}}
\toprule
\multicolumn{1}{c}{página} & \multicolumn{1}{c}{nro.} & sup. & inf. & izq. & der. \\
\midrule
alta & p.~296 & 16 & 21 & --- & --- \\
ancha (par) & p.~250 & --- & --- & 20 & 11 \\
ancha (impar) & p.~117 & --- & --- & 11 & 20 \\
\bottomrule
\end{tabular}
\end{table}
\subsubsection{Márgenes razonables\label{sec:STmarginsReasonables}} Si mantenerse 100\% fiel al material original no es el objetivo, en general la opción \menu{\typesetCheckbox{Auto Margins}} da un buen resultado que además conserva las dimensiones de la página original, por lo que se podría dar aquí por finalizado el paso 5.
Como alternativa manual, se pueden elegir márgenes arbitrarios (por ej. 10\,mm) o cercanos a los originales, tal vez discriminando un poco para páginas pares e impares (lo mismo respecto de la alineación) y aplicar masivamente a todas las páginas, editando manualmente alguna si así se desea. El resultado dependerá enteramente de nuestro gusto y parecer, pero recomiendo usar los márgenes aproximados del material original al menos como referencia.
\scantailor por defecto impone el mismo valor para los márgenes izquierdo-derecho y superior-inferior. Si queremos ingresar distintos valores para cada margen debemos presionar \keys{\faLink} a la derecha en la figura~\ref{fig:STmarginsWidth}. Así, la cadena se abre \keys{\faUnlink} y los márgenes ya no tienen por que ser iguales.
\subsubsection{Conservando la apariencia original\label{sec:STmarginsOriginals}} Si estamos buscando reproducir la apariencia del material original deberemos tener los cuidados que se explican a continuación.
\paragraph{Alineación} La opción \menu{\typesetCheckbox{Auto Margins}} nos asegura un tamaño de página correcto, pero aún falta alinear los contenidos. Podríamos dejarlo así, pero quedaría mejor si todos los números de página ocuparan la misma posición en todas las páginas, independientemente de que haya contenido que invada los márgenes. Para hacer este ajuste, \scantailorAdvanced ofrece las así llamadas \emph{guides} (fig.~\ref{fig:STmarginsGuides}), que pueden ser verticales u horizontales.
\begin{figure}
\tiny
\def\svgwidth{\linewidth}
\subcaptionbox{Página par}{\input{img/STmarginsEven.pdf_tex}}
\def\svgwidth{\linewidth}
\subcaptionbox{Página impar}{\input{img/STmarginsOdd.pdf_tex}}
\caption[Detalle de las guías para ajustar márgenes]{Detalle de las guías para ajustar márgenes. Las páginas (bien comportadas) ya fueron alineadas con sus guías correspondientes\label{fig:STmarginsGuides}}
\end{figure}
Para crearlas hacemos \menu{\rightclick > Add vertical guide}, y las posicionamos con \keys{\ctrl + \Alt + \leftclick + arrastrar}. Haciendo \keys{\shift + \leftclick + arrastrar} podemos mover el contenido en sentido horizontal para alinearlo. En este caso será al número de página. Necesitaremos una para las pares y otra para las impares. Sugiero fijar las guías en las páginas más anchas (pp.~250 y 117).
Con \keys{\shift + \,\leftclick\,\leftclick} sobre el área que queremos alinear, \scantailor hace un buen trabajo de acomodar automáticamente el contenido a la guía más cercana. Si no nos satisface el resultado, podemos arrastrarlo manualmente como en el párrafo anterior, hasta colocarlo donde queramos.
Si también quisiéramos ajustar la posición vertical, crearíamos una guía horizontal con \menu{\rightclick > Add horizontal guide} y usaríamos \keys{\ctrl + \leftclick\!\!\!\leftclick} o \keys{\ctrl + \leftclick + arrastrar} para alinear el contenido verticalmente. Podría ponerse esta guía en los títulos de página, en cuyo caso la crearíamos con la página más alta como referencia. En este caso considero que no es necesario ajustar verticalmente las páginas bien comportadas.
Como todos los comienzos de capítulos omiten el número de página, debemos usar otro punto como referencia. Elegí la base del texto que marca el título. Es la única guía horizontal que creé para este proyecto.
Algunas páginas mal comportadas podrían alinearse sin la necesidad de guías. Bastará con medir los márgenes e ingresarlos manualmente, desactivando \menu{\typesetBox{Auto Margins}}. Estoy pensando en las portadillas, portadas, colofones, etc.
Para sacar provecho de este método debemos avanzar manualmente página por página, alineando el contenido a las guías. Este puede tomar algo de tiempo y según el caso podría no ser necesario o no valer la pena.
\paragraph{Verificación} Si nos interesa verificar que los márgenes nos hayan quedado bien, podemos usar \djvusmall\footnote{Para aprender a trabajar con \djvusmall consultar la sección~\ref{sec:djvuSmall}.} con un perfil cualquiera (por ejemplo, \menu{default}) para generar un \djvu de prueba y, pasando las páginas rápidamente, detectar algún error de alineación que no hayamos notado. También es posible ir pasando dentro de \scantailor, pero de momento la navegación es bastante lenta y a veces no permite apreciar las diferencias.
\subsection{Paso 6. Output\label{sec:SToutput}} Este paso dispone de una cantidad de opciones cuyos valores por defecto funcionan bien. Lo primero que haremos será presionar \play\ para que se procesen todos los archivos. Este es un proceso que también le lleva a \scantailorAdvanced algo de tiempo, aunque se ha mejorado mucho respecto de la versión original.
Al finalizar tendremos los archivos procesados en la carpeta \typesetFolder{out} en formato \tiff. Si escaneamos de a una página los archivos tendrán el mismo nombre que los originales con la extensión \texttt{tif}. Es decir, \typesetFile{SCAN/SCAN\_XXX.tif} se procesará en \typesetFile{SCAN/out/SCAN\_XXX.tif}.
En cambio, si escaneamos de a dos páginas (y elegimos split pages) cambiará la forma en que \scantailor nombra los archivos de salida: a partir de la imagen \typesetFile{SCAN/SCAN\_XXX.tif} que contiene las dos páginas creará los archivos \typesetFile{SCAN/out/SCAN\_XXX\_1L.tif} y \typesetFile{SCAN/out/SCAN\_XXX\_2R.tif}, correspondientes al verso y al recto respectivamente.
Una vez terminado el procesamiento, podemos inspeccionar cada página en busca de errores. A continuación veamos algunos de los más comunes.
\subsubsection{Caracteres mal impresos o faltantes} A veces el proceso de impresión falla y algunos caracteres aparecen cortados, como en la figura~\ref{fig:SToutputBadChars}. Existen dos formas de corregirlos.
\begin{enumerate}
\item Usando \gimp para editar los originales. Tenemos la herramienta pincel para corregir errores o podemos copiar caracteres buenos y pegarlos sobre los que tienen problemas. Es bastante versátil pero requiere ubicar el archivo, cargarlo, editar la imagen, guardarla, ver el resultado en \scantailor y quizás repetir. %rinse and repeat
\item Usando la pestaña \menu{Fill zones} de \scantailor. Allí podemos dibujar regiones (poligonales) para que el programa rellene. Haciendo \menu{\rightclick > Pick color} sobre ellas elegimos el color para rellenar (generalmente blanco o negro).
\end{enumerate}
\begin{figure}
\subcaptionbox{Original}{\includegraphics[width=.32\linewidth]{SToutputBadCharsOriginal}}\hfill
\subcaptionbox{Salida}{\includegraphics[width=.32\linewidth]{SToutputBadChars}}\hfill
\subcaptionbox{Salida corregida}{\includegraphics[width=.32\linewidth]{SToutputBadCharsFix}}
\caption[Caracteres cortados]{Caracteres cortados. La corrección se hizo desde la pestaña \menu{Fill zones}\label{fig:SToutputBadChars}}
\end{figure}
Dependiendo de la cantidad y gravedad de estos errores valdrá la pena invertir el tiempo y repararlos o simplemente dejarlos así. %let them be
Si los originales tienen problemas hay un límite en la cantidad de esfuerzo que podemos echarle para mejorarlos. No hay que ser más papista que el papa. %theres only so much we can do
\subsubsection{Motas y manchas no detectadas} Una de las opciones que tiene al etapa 6 se llama \emph{despeckle}, que podría traducirse como eliminación de motas. Lo que hace es buscar puntos pequeños y generalmente aislados, que probablemente no sean parte del contenido, sino más bien problemas de impresión o escaneo (motas de polvo).
Funciona bastante bien, salvo en dos casos: si los puntos son demasiado grandes (fig.~\ref{fig:SToutputDespeckleSpot}) o si están entremezclados con el resto del contenido (fig.~\ref{fig:SToutputDespeckleSpeckle}). En ambos se puede corregir manualmente, ya sea usando \gimp o \menu{Fill zones}.
También existe la posibilidad de cambiar el parámetro del filtro, para que detecte detalles más grandes. En dicho caso se debe tener cuidado de que no elimine elementos que no debe, como por ejemplo puntos y comas.
\begin{figure}
\subcaptionbox{Original\label{fig:SToutputDespeckleSpotOriginal}}{\includegraphics[width=.48\linewidth]{SToutputDespeckleSpotOriginal}}\hfill
\subcaptionbox{Procesada. Punto no eliminado\label{fig:SToutputDespeckleSpotBad}}{\includegraphics[width=.48\linewidth]{SToutputDespeckleSpotBad}}
\caption{Filtro \emph{despeckle} frente a puntos demasiado grandes\label{fig:SToutputDespeckleSpot}}
\end{figure}
\begin{figure}
\subcaptionbox{Original. Dos motas\label{fig:SToutputDespeckleSpeckleSomeOriginal}}{\includegraphics[width=.48\linewidth]{SToutputDespeckleSpeckleSomeOriginal}}\hfill
\subcaptionbox{Procesada. Una mota permanece\label{fig:SToutputDespeckleSpeckleSome}}{\includegraphics[width=.48\linewidth]{SToutputDespeckleSpeckleSome}}
\caption{Filtro \emph{despeckle} frente a motas pegadas al texto\label{fig:SToutputDespeckleSpeckle}}
\end{figure}
\subsubsection{Contenido por motas} A veces al \emph{despeckle} se le va la mano y borra puntos que en realidad pertenecen al contenido. Ver la figura~\ref{fig:SToutputDespeckle}. Si interesa retener esos puntos podría desactivarse el filtro y hacer un \emph{despeckle} manual en esa página. Otra alternativa puede ser darle énfasis a los puntos de interés con \gimp, para que el filtro no los borre (es lo que se hizo en este caso).
\begin{figure}
\subcaptionbox{Original}{\includegraphics[width=\linewidth]{SToutputDespeckleOriginal}}
\subcaptionbox{Procesada}{\includegraphics[width=\linewidth]{SToutputDespeckleBad}}
\subcaptionbox{Procesada luego de dar énfasis con \gimp}{\includegraphics[width=\linewidth]{SToutputDespeckleFix}}
\caption{Efecto indeseado del filtro despeckle\label{fig:SToutputDespeckle}}
\end{figure}
\subsubsection{Desinclinación incorrecta} Si bien este error debió comentarse en la sección~\ref{sec:STdeskew}, al menos a mí me sucede que no lo detecto hasta este paso.
Se trata de páginas que no se rotaron el ángulo correcto. En mi experiencia, sucede principalmente en dos casos:
\begin{enumerate}
\item Páginas apaisadas. Nuestro libro tiene varias tablas grandes y páginas con figuras que se imprimieron rotadas para que quepan mejor en la hoja. Deberemos ajustar el ángulo manualmente.\footnote{Téngase en cuenta lo que se explica en la sección~\ref{sec:landscapePages}.}
\item Páginas con contenido a distintos ángulos. En nuestro libro sucede que algunos dibujos consisten en líneas rectas no paralelas al texto. Esto puede confundir al algoritmo. En otros casos podría haber texto escrito a distintos ángulos, ya sea de manera intencional o por errores en la composición de la página. Dependiendo del caso, podemos ajustar el ángulo manualmente o usar la herramienta de rotación de \gimp para alinear solo aquella parte de la página que no lo esté.
\end{enumerate}
\subsubsection{Picture zones\label{sec:SToutputPictureZones}}
Para las páginas que además del texto tengan fotos que queramos preservar, deberemos elegir la opción \menu{Mode > Mixed}.\footnote{Este es el método que recomiendo para trabajar con las páginas con ilustraciones de nuestro material. Algunas alternativas no recomendadas se discuten en el apéndice~\ref{sec:noSplitPages}.} La opción por defecto es \menu{Black and White}, que binariza todo, y la restante, \menu{Color / Grayscale}, retiene la página original completa, salvo por los efectos de los pasos anteriores.
Eligiendo \menu{Mixed} el software intentará adivinar las áreas donde se encuentran las fotos. En la pestaña \menu{Picture Zones} se señalan titilando con color azul. Por defecto estas áreas pueden tener cualquier forma, pero seleccionando \menu{Picture Shape > Rectangular} (fig~\ref{fig:SToutputPicureZonesRectangular}) podemos forzar a que sea rectangular, que servirá en la mayoría de los casos.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{SToutputPicureZonesRectangular}
\caption[Paso 6. Output]{Paso 6. Output. Se seleccionó la pestaña \menu{Picture zones}\label{fig:SToutputPicureZonesRectangular}}
\end{figure}
En los que no, deberemos dibujar nuestras propias zonas (y tal vez eliminar o corregir algunas mal detectadas). Para cada una podemos hacer \menu{\rightclick > Properties} y elegir si añadirla a la capa ya detectada (\menu{Add to auto layer}), eliminarla de esa capa (\menu{Subtract from auto layer}) o eliminarla de todas las capas (\menu{Subtract from all layers}). Todo esto tendrá sentido si las zonas se superponen. Sugiero experimentar un poco con las opciones para entender bien su significado.
Un ejemplo de zonas dibujadas manualmente y su resultado se muestra en la figura~\ref{fig:SToutputPicureZonesFree}. Nótese que es posible tener huecos dentro de la foto que serán rellenados de blanco. En este caso le darán un efecto interesante al resultado final. De lo contrario esos huecos quedarían rellenos con el color del blanco de la página, que como se ve en la figura \ref{fig:SToutputPicureZonesFreeOriginal} es más bien un beige.
\begin{figure}
\subcaptionbox{Zonas marcadas manualmente\label{fig:SToutputPicureZonesFreeOriginal}}{\includegraphics[width=\linewidth]{SToutputPicureZonesFree}}
\subcaptionbox{Resultado}{\includegraphics[width=\linewidth]{SToutputPicureZonesFreeResult}}
\caption[Selección manual en la pestaña \texttt{Picture Zones}]{Selección manual de las fotos en la pestaña \menu{Picture Zones}. Los contornos rojos se dibujaron manualmente\label{fig:SToutputPicureZonesFree}}
\end{figure}
Una opción a tener en cuenta y que me ha dado buenos resultados es \menu{Options > Equalize illumination (Color)}.
Para estas páginas debemos activar siempre \menu{Splitting > \typesetCheckbox{Split output} > \typesetDotCircle{B\&W foreground}}. Esto generará dos carpetas más dentro de \typesetFolder{out}: \typesetFolder{foreground} y \typesetFolder{background}, adonde se guardará cada componente de la imagen. A la primera irá todo el contenido binarizado y a la segunda las fotos. Podemos activarla y echar un vistazo para entenderlo mejor.
Esto nos permitirá procesar cada parte en sus particularidades de manera independiente, de forma de lograr un resultado óptimo. Si no se va a hacer este procesamiento independiente, de todas formas elegir la opción no hace daño, pues en \typesetFolder{out} se sigue guardando la imagen con las dos componentes superpuestas.
\subsubsection{Ilustraciones problemáticas} Algunas ilustraciones, dibujos o diagramas, a pesar de estar impresos a una sola tinta, pierden muchos detalles cuando son binarizados. Ocurre cuando hay líneas muy cercanas pero que no se tocan: el blanco que queda en medio no es lo suficientemente claro, y \scantailor lo convierte en negro. Análogamente si hay líneas negras demasiado tenues. La figura~\ref{fig:SToutputBadDiagrams} ilustra un ejemplo. Para arreglar esto existen tres opciones.
\begin{enumerate}[noitemsep]
\item La más sencilla es tratarlos como fotos. Procedemos exactamente como se explicó en la sección~\ref{sec:SToutputPictureZones}.
\item Si se dispone de un poco más de tiempo, se pueden editar con \gimp para generar un contraste mayor que permita una binarización más efectiva. Para ello se pueden usar filtros o manualmente redibujar los detalles que se quieran conservar.
\item La tercera consiste en ajustar el algoritmo de binarización, como se explica a continuación. Tiene el inconveniente de que los cambios afectan a toda la página y no solo al dibujo de interés, lo que podría generar discordancias visibles con el resto de las páginas que usen los valores por defecto u otros.
\end{enumerate}
\begin{figure}
\hspace*{\fill}
\subcaptionbox{Exploración original}{\includegraphics[width=.4\linewidth]{SToutputBadDiagramsOriginalScan}}\hfill
\subcaptionbox{Salida original}{\includegraphics[width=.4\linewidth]{SToutputBadDiagramsOriginalOutput}}\hspace*{\fill}\\
\hspace*{\fill}
\subcaptionbox{Corregida (manualmente)}{\includegraphics[width=.4\linewidth]{SToutputBadDiagramsCorrectedScan}}\hfill
\subcaptionbox{Salida final}{\includegraphics[width=.4\linewidth]{SToutputBadDiagramsCorrectedOutput}}%
\hspace*{\fill}
\caption{Binarización de una ilustración problemática\label{fig:SToutputBadDiagrams}}
\end{figure}
\subsubsection{Algoritmo de binarización} Existen diferentes algoritmos de binarización, cada uno con ventajas y desventajas. Con el submenú \menu{Threshold} (umbral) \scantailorAdvanced permite cambiar entre \menu{Otsu} (por defecto), \menu{Sauvola} y \menu{Wolf}. De no estar conformes con el resultado por defecto, podríamos intentar cambiando el algoritmo o ajustando los parámetros que cada uno ofrece. El impacto que tiene cada algoritmo está por fuera del alcance de nuestra guía, si bien existe abundante literatura al respecto \cite{RashmiBinarization}.
\subsubsection{Escanear de a dos páginas: consecuencias\label{sec:scanningTwoPages}} Al no quedar ya los archivos numerados secuencialmente, los procedimientos que dependan de ello dejarán de funcionar.
Si no vamos a separar fotos como en la sección~\ref{sec:SToutputPictureZones}, entonces no será un gran problema (solo el script~\ref{scr:fixLandscapePages} dejará de funcionar). De lo contrario, esta nomenclatura nos dificultará bastante el proceso. En particular, los scripts~\ref{scr:replaceInABBYY}, \ref{scr:pdfPhotosqpdf} y \ref{scr:pdfPhotosAcrobat}, así como el software \djvuimager (sec.~\ref{sec:djvuImager}) se verán afectados.
Una forma de remediarlo sería usar \textsc{Advanced Renamer} para renombrar uniformemente los archivos de la carpeta \typesetFolder{out}, aunque si se aplica el procedimiento de la sección~\ref{sec:SToutputPictureZones} habrá que tener cuidado en renombrar también correctamente los archivos en las carpetas \typesetFolder{foreground} y \typesetFolder{background}.
Otra podría ser ir un paso hacia atrás y utilizar algún software de edición por lotes para separar previamente las páginas, nombrarlas adecuadamente y con ellas recomenzar el proyecto de \scantailor, aunque perderíamos todo el trabajo hecho hasta ahora.
\subsection{Páginas apaisadas\label{sec:landscapePages}} Recomiendo corregir la rotación de las páginas apaisadas (\emph{landscape}, en inglés) para que estén bien orientadas en el documento final (fig.~\ref{fig:STlandscapePages}). De esta forma se facilita el proceso de \ocr y queda más fácil de visualizar. Si bien podríamos haber elegido la orientación adecuada desde el paso 1 de \scantailor, no lo hacemos así porque no tener todas las páginas orientadas en el mismo sentido nos dificulta la configuración de márgenes consistentes.\footnote{En realidad, nos obliga a considerar todas esas páginas como atípicas, teniendo que ingresar todos sus márgenes manualmente.} Por ello, debemos tomar nota de los números de página que queramos ajustar y adaptar el script~\ref{scr:fixLandscapePages} para que las procese correctamente.\footnote{Bastará con rellenar la variable \menu{landscapePages} con los números de página correspondientes.}
\begin{figure}
\includegraphics[width=\linewidth]{STlandscapePages}
\caption{Página apaisada y sus contiguas en el documento final\label{fig:STlandscapePages}}
\end{figure}
\pythonScript{fixLandscapePages.py}{Ajuste de páginas apaisadas\label{scr:fixLandscapePages}}
\section{Cubiertas\label{sec:covers}} Las cubiertas de los libros muchas veces son las únicas ilustraciones o fotos a color que que estos incluyen, por lo que me gusta dedicarles un poco más de atención.
En la figura~\ref{fig:SCANcoverRaw} vemos la cubierta del libro sobre el que estamos trabajando. Consta básicamente de cuatro colores: blanco para el nombre del autor y la edición, naranja para el título de la obra, azul oscuro para el fondo y los gráficos de la parte de abajo y azul celeste para el fondo del gráfico. Podemos ver que en las esquinas presenta marcas de doblez y que en algunos lugares se ha borrado la ilustración.
Para remediar estos detalles uso \gimp. El proceso cae un poco por fuera de los objetivos de esta guía, así que no entraré en pormenores. Valga decir que selecciono las áreas de cada color y las vuelvo uniformes, para luego convertir la imagen en indizada. De esta manera conservo el diseño original y reduzco el tamaño casi 100 veces. La diferencia se muestra en la figura~\ref{fig:SCANcover}. Este archivo, que es una modificación de lo que entrega \scantailor, debemos guardarlo en una carpeta aparte, para que el programa no lo sobrescriba accidentalmente.
\begin{figure}
\centering
\subcaptionbox{Escaneo crudo\label{fig:SCANcoverRaw}}{\includegraphics[width=.48\linewidth]{SCANcoverRaw}}\hfill
\subcaptionbox{Retocado\label{fig:SCANcoverMOD}}{\includegraphics[width=.48\linewidth]{SCANcoverMOD}}
\caption[Efectos de retoque en la cubierta del libro]{Efectos de retoque en la cubierta del libro. Se pasó de un \tiff de 56\,MB a uno de 0,69\,MB con una apariencia más limpia\label{fig:SCANcover}}
\end{figure}
Las cubiertas con diseños más complejos o que incluyen fotos no admiten el mismo tipo de edición, aunque muchas veces es posible mejorarlas ajustando brillo, contraste, etc. Si bien la cubierta es la presentación del libro, el peso en el tamaño final no debería ser excesivo.
\subsection{Nota: sobre la fidelidad de los colores} No tiene mucho sentido obsesionarse con que los colores se vean exactamente igual que en el material físico.
Tengamos en cuenta que si nuestro monitor no está calibrado, los colores que estamos viendo en él no se corresponderían con los que se verían por ejemplo si se mandara a imprimir lo que tenemos en frente. No olvidemos que estamos digitalizando un documento, por lo que estamos pensando en visualizarlo luego en una pantalla. Distintas personas verán distintos colores en distintos monitores. No hay remedio para esto.
\section{Conclusiones} En este capítulo hemos visto como procesar nuestras páginas escaneadas a través de los distintos pasos de \scantailor, de manera de obtener resultados que reflejen adecuadamente las características del material original. Para ello debemos obtener información del mismo, por lo que será bueno tenerlo a mano mientras trabajamos. También comentamos algunas ideas sobre el procesamiento de las cubiertas.
En el siguiente capítulo trabajaremos con la salida de \scantailor para reconocer el texto. Esto le agregará mucho valor al resultado final, por la posibilidad de hacer búsquedas.
\chapter{\texorpdfstring{\textsc{Ocr}}{OCR} con \abbyy\label{sec:OCR}} Una vez que las páginas fueron limpiadas y ajustadas y las fotos separadas, podemos proceder a realizar el reconocimiento de texto. Como paso previo, notemos que que si marcamos \menu{Picture zones} y elegimos la opción \menu{\typesetCheckbox{Split output}}, tenemos en la carpeta \typesetFolder{out} las imágenes procesadas y dentro de la misma otras dos carpetas, como se explicó antes.
Debemos ahora copiar las imágenes desde \typesetFolder{foreground} a la carpeta \typesetFolder{out} y sobrescribir los archivos. Así, en \typesetFolder{out} habrá solo imágenes binarias (texto y diagramas monocromáticos). Las fotos quedarán en \typesetFolder{background} y trabajaremos sobre ellas más adelante.
Lo mismo haremos con las cubiertas si las procesamos aparte. Las copiamos a la carpeta \typesetFolder{out}, sobrescribiendo las que generó \scantailor. De esta manera tendremos en \typesetFolder{out} las páginas que conformarán el documento final (salvo las fotos).
\paragraph{Nota previa} \abbyy también es un programa muy completo, con una cantidad de modos de funcionamiento, opciones y errores que esta guía no pretende cubrir exhaustivamente. Si alguna explicación no quedara clara, lo mejor será experimentar, leer el manual de usuario o realizar consultas en algún sitio especializado.
\section{Configuración} Abrimos luego \abbyy\footnote{En esta guía trabajaremos con la versión 14. Sin embargo, cualquier versión que permita salvar en \djvu es suficiente (v11 o superior). Tal vez las opciones no sean exactamente iguales (habrá que improvisar) y o no se pueda usar el script~\ref{scr:replaceInABBYY} (no es grave).} y procedemos a configurar primero las opciones básicas (más adelante trataremos algunas otras). Se accede al menú haciendo \menu{\leftclick > Tools > Options}. En principio sugiero configurar las opciones tal cual se muestran en las figuras.
\subsection{Pestaña \texttt{Image Processing}} En \menu{Image Processing} presionamos \keys{Show Advanced Settings} y deshabilitamos todas las opciones, como en la fig.~\ref{fig:ABBYYoptionsImage}. Así nos aseguramos de que el software no realizará ninguna corrección de imagen. Para eso ya transitamos por los pasos anteriores. Si aún hubiera algo para ajustar, lo mejor será volver a \scantailor y hacerlo nosotros mismos.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{ABBYYoptionsImage}
\caption[Opciones de \abbyy. Pestaña \texttt{Image Processing}]{Opciones de \abbyy. Pestaña \menu{Image Processing}\label{fig:ABBYYoptionsImage}}
\end{figure}
\subsection{Pestaña \texttt{Languages}} Pasamos ahora a la pestaña \menu{Languages} (fig.~\ref{fig:ABBYYoptionsLanguages}) donde crearemos primero un nuevo idioma basado en uno ya existente. Esto lo hacemos así si nuestro material contiene caracteres de otro alfabeto, por ejemplo el griego. O si queremos editar los caracteres permitidos para ayudar con el reconocimiento.\footnote{A veces el programa confunde un carácter por otro. Muy comúnmente «\textit{l}» cursiva por «/». Si este último no es usado en nuestro material, podemos eliminarlo de la lista de caracteres permitidos para forzar al programa a intentar reconocer otro carácter. Esto no garantiza resultados (podría aun confundirlo con «|», por ejemplo), pero puede ayudar.}
\begin{figure}
\centering
\includegraphics[width=\linewidth]{ABBYYoptionsLanguages}
\caption[Opciones de \abbyy. Pestaña \texttt{Languages}]{Opciones de \abbyy. Pestaña \menu{Languages}\label{fig:ABBYYoptionsLanguages}}
\end{figure}
Elegimos \menu{\typesetDotCircle{Specify OCR languages manually}}, presionamos \keys{New} y seleccionamos \menu{\typesetDotCircle{Create a new language based on\...}} (fig.~\ref{fig:ABBYYoptionsLanguagesNewLanguage}). En este caso elegimos \menu{English}, presionamos \keys{OK}, le ponemos por nombre \menu{MyEnglish} y damos \keys{OK} nuevamente (fig.~\ref{fig:ABBYYoptionsLanguagesLanguageProperties}). Al final deberá decir \menu{\typesetDotCircle{Specify OCR languages manually} > MyEnglish;} (fig.~\ref{fig:ABBYYoptionsLanguages}).
\begin{figure}
\centering
\subcaptionbox{Creando un nuevo idioma\label{fig:ABBYYoptionsLanguagesNewLanguage}}{\includegraphics[width=.7\linewidth]{ABBYYoptionsLanguagesNewLanguage}}
\subcaptionbox{Propiedades del idioma\label{fig:ABBYYoptionsLanguagesLanguageProperties}}{\includegraphics[width=.7\linewidth]{ABBYYoptionsLanguagesLanguageProperties}}
\caption{Opciones de \abbyy. Creando un nuevo idioma.}
\end{figure}
\subsection{Pestaña \texttt{Format}} Finalmente, en la pestaña \menu{Format Settings} y elegimos el formato \menu{PDF}. Allí configuramos las opciones como en la figura~\ref{fig:ABBYYoptionsFormatsPDF}. Es importante que en el menú desplegable \menu{Image quality} elijamos la opción \menu{Custom\...} y que desmarquemos \menu{\typesetBox{Reduce original resolution if required}}, elijamos \menu{Color control > Do not change image color} y también \menu{Quality > Quality loss not allowed}. Además, en \menu{Searchable PDF settings} elegimos \menu{Text under the page image}, \menu{\typesetBox{Create bookmarks from headings}},\footnote{La he probado y no da buenos resultados. Además, crearemos nuestros propios marcadores más adelante.} marcamos \menu{\typesetCheckbox{Create PDF tags}} y seleccionamos \menu{Use Windows fonts}.\footnote{No tengo justificación para esta opción. No sé que consecuencias pueda tener desde el punto de vista legal. Creo que la visualización correcta queda a salvo con el \pdfa, que veremos más adelante.}
De forma similar, configuramos las opciones del formato \djvu como en la figura~\ref{fig:ABBYYoptionsFormatDjVu}. Aquí la única opción imprescindible será \menu{Save mode > Text under page image}, puesto que el \djvu que genera \abbyy no lo usaremos más que para «robar» el texto reconocido e insertarlo en otro archivo \djvu, que vamos a generar más adelante con otros programas.
\begin{figure}
\vspace{-20pt}
\centering
\subcaptionbox{Ventana principal\label{fig:ABBYYoptionsFormatsPDF}}{\includegraphics[width=\linewidth]{ABBYYoptionsFormatPDF}}
\subcaptionbox{\menu{Custom Settings}\label{fig:ABBYYoptionsFormatPDFCustom}}{\includegraphics[width=.5\linewidth]{ABBYYoptionsFormatPDFCustom}}
\caption[Opciones de \abbyy. \texttt{Format Settings >\ PDF}]{Opciones de \abbyy. Pestaña \menu{Format Settings > PDF}\label{fig:ABBYYoptionsFormatPDF}}
\end{figure}
\begin{figure}
\includegraphics[width=\linewidth]{ABBYYoptionsFormatDjVu}
\caption[Opciones de \abbyy. \texttt{Format Settings >\ DjVu}]{Opciones de \abbyy. Pestaña \menu{Format Settings > DjVu}\label{fig:ABBYYoptionsFormatDjVu}}
\end{figure}
\section{Creación del proyecto} Luego presionamos \menu{File > New OCR Project} e inmediatamente \menu{File > Save OCR Project}. Vamos a guardar el proyecto en \typesetFolder{Project\,\faCaretRight\,ABBYY}. De esta manera, \abbyy irá guardando los cambios a medida que vayamos procesando las páginas.
Luego, cargamos las páginas haciendo \menu{File > Open Image}, seleccionando todos los archivos de la carpeta \typesetFolder{out} y presionando \keys{Open}. Tomará un tiempo para cargarlas todas y luego la ventana quedará como en la figura~\ref{fig:ABBYYstart}.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{ABBYYstart}
\caption[Ventana principal de \abbyy]{Ventana principal de \abbyy una vez cargadas las páginas. Se ha personalizado la disposición de los paneles respecto a los valores por defecto. La columna de la izquierda es el \menu{Navigation Pane}, que muestra las miniaturas de todas las páginas. Hacia la derecha y arriba está el \menu{Image Pane}, que muestra la página actual. A la derecha de este está el \menu{Text Pane}, con el texto reconocido. Debajo de estos dos últimos tenemos el \menu{Zoom Pane}, que muestra un zoom del \menu{Image Pane}\label{fig:ABBYYstart}}
\end{figure}
\section{Reconocimiento} Esta es la parte sustanciosa de toda la etapa de \ocr.
Como siempre, dependerá de nosotros hasta que nivel de detalle llegaremos. Podemos no complicarnos la vida y elegir \menu{Recognize > Recognize All Pages} (\keys{\ctrl + \shift + R}), dejar que el programa haga lo suyo, no revisar ni corregir nada y seguir adelante. Si así lo disponemos, tal vez podemos saltarnos esta sección completamente y aplicar los métodos del apéndice~\ref{sec:simpleOCR}. Mi recomendación es que como mínimo se revise la segmentación de las áreas de cada página y que se entrene al menos un poco el patrón. Pienso que la ganancia en precisión vale la pena para el poco tiempo que esto insume.
El reconocimiento de páginas se realiza en dos pasos. El primero es de análisis (\menu{Analyze}) y el segundo de reconocimiento propiamente (\menu{Recognize}).
Mediante el análisis, \abbyy determina las zonas de contenido en la página. Estas pueden ser texto, imagen, tabla, imagen de fondo o área de reconocimiento. En la figura~\ref{fig:ABBYYtools} se muestra el detalle de la barra con las herramientas para crear y editar las zonas. Además de los tipos de zona para dibujar tiene herramientas de selección, vistazo, eliminación y reordenación de zonas.\footnote{En inglés, las de dibujo son: \menu{Draw Text Area}, \menu{Draw Picture Area}, \menu{Draw Table Area}, \menu{Draw Background Picture Area} y \menu{Draw Recognition Area}. Y las de edición: \menu{Select Objects}, \menu{Pan Around the Page}, \menu{Delete Area} y \menu{Reorder Areas}. También existe una \menu{Barcode area}, para reconocer códigos de barras. No es muy útil y solo será mencionada aquí.}
\begin{figure}
\centering
\includegraphics[width=.5\linewidth]{ABBYYtools}
\caption{Herramientas de edición de zonas de \abbyy\label{fig:ABBYYtools}}
\end{figure}
Salvo que el contenido sea muy homogéneo, por ejemplo: solo texto o texto con alguna foto o ilustración, el algoritmo de segmentación de zonas no funciona muy bien y estas deben ser delimitadas manualmente.
Normalmente las creo como \menu{Recognition areas} (áreas de reconocimiento), para que \abbyy determine el tipo de contenido y ajuste el tamaño. Esto no es estrictamente necesario y el área puede ser más grande que el contenido que se busca reconocer, mientras no se solape con ninguna otra. Puede establecerse el tipo (generalmente \menu{Text}) manualmente durante la creación.
Se pueden dibujar tantas áreas como uno quiera. Para nuestro procedimiento usaremos solo las de texto y las de tablas. No será necesario marcar diagramas o fotos (aún si no las hubiéramos separado con \scantailor), pues elegimos la opción \menu{Text under the page image}, que preservará las imágenes originales e insertará el texto reconocido debajo de las mismas.
Colocar todo el texto dentro de una sola área o usar varias áreas para segmentar el mismo contenido es indistinto desde el punto de vista del resultado final. Si vamos a intentar corregir los errores que veamos, puede convenir no tener todo en una sola área. Esto porque a veces editamos algo manualmente, pero mas abajo nos damos cuenta que queremos reconocer el texto del área de nuevo, porque entrenamos el patrón o lo que sea. Pero de hacerlo perdemos los cambios manuales hechos al principio. Si tenemos varias áreas es más difícil que esto suceda.
Una vez que las áreas fueron reconocidas, ya sea presionando \menu{Recognize > Analyze Page} o manualmente, estamos en condiciones de reconocer el texto. Esto lo hacemos con \menu{Recognize > Recognize Page} (\keys{\ctrl + R}).\footnote{Si para la página actual tenemos confianza en que el algoritmo automático de segmentación hará un buen trabajo podemos dar \menu{Recognize Page} directamente, que hace los dos pasos de una sola vez.} Así, el programa reconoce el texto en las áreas marcadas y lo presenta en el panel de texto. Para reconocer solo algunas áreas, las seleccionamos y hacemos \menu{\rightclick\ > Recognize} (o usamos el atajo \keys{\ctrl + \shift + B}).
En el panel de texto podemos ver el resultado del reconocimiento y realizar cambios. Conviene que estos no sean mayores, porque en el \pdf se puede perder el sincronismo entre la imagen que vemos y el texto reconocido debajo. Ante la duda, hacemos una «vista previa» como se explica más adelante.
\subsection{Errores y recomendaciones} A continuación hablaremos sobre algunos de los errores de reconocimiento comunes que vamos a encontrar y daremos algunas recomendaciones. Como siempre, se trata de lineamientos con los que he trabajado y que considero que funcionan bien, pero cada uno deberá experimentar y encontrar el punto de trabajo con el que se siente cómodo. %sweet spot.
\subsubsection{Advertencias de \abbyy\label{sec:ABBYYwarnings}} Como \abbyy pretende abarcar todo el proceso de creación del documento, para casi todas las páginas emite advertencias del tipo de las que se ven en la figura~\ref{fig:ABBYYwarnings}. Generalmente indica que se necesita desinclinar la imagen, aunque a veces también sugiere cambiar los dpi de la imagen o hacer algún ajuste de brillo o contraste.
\begin{figure}
\centering
\includegraphics[width=.7\linewidth]{ABBYYwarnings}
\caption{Advertencias típicas de \abbyy\label{fig:ABBYYwarnings}}
\end{figure}
La ventana ofrece abrir su propio editor de imagen para hacer ajustes. Si seguimos correctamente los pasos de la guía no deberíamos necesitar hacer ninguna corrección en esta etapa. Si aun así fuera, deberemos utilizar el script~\ref{scr:replaceInABBYY} como se explica más adelante, pero nunca el editor de \abbyy. Por tanto, debemos ignorar las advertencias presionando \keys{Close}.
\subsubsection{Pestaña \texttt{Areas and Text}} \abbyy permite resaltar los errores o dudas de reconocimiento que tenga, de forma de facilitar la corrección manual. Para la configuración de este comportamiento tenemos la pestaña \menu{Areas and Text} del menú de opciones (fig.~\ref{fig:ABBYYoptionsAreasAndText}), donde podemos elegir qué resaltar y con qué colores. Recomiendo elegir un color fácilmente distinguible para los caracteres dudosos.\footnote{El cian que viene configurado por defecto puede confundirse con el fondo blanco, por lo que normalmente uso algún rojo.}
\begin{figure}
\includegraphics[width=\linewidth]{ABBYYoptionsAreasAndText}
\caption[Opciones de \abbyy. Pestaña \texttt{Areas and Text}]{Opciones de \abbyy. Pestaña \menu{Areas and Text}\label{fig:ABBYYoptionsAreasAndText}}
\end{figure}
\subsubsection{Reconocimiento por página o por área} Por alguna razón, muchas veces los resultados de reconocer toda la página de una vez y de hacerlo área por área difieren. Si hay un área muy problemática, podemos intentar reconocerla nuevamente, para ver si al ser individualizada los resultados mejoran.
\subsubsection{Nuevos errores y actualización del proyecto\label{sec:ABBYYCorrectionsSpotAndArea}} A veces durante el proceso de reconocimiento descubrimos errores que pasamos por alto durante el proceso de limpieza y ajuste. Pueden ser manchas, caracteres mal impresos o cualquier cosa que no queramos que quede en nuestro documento final. Nótense por ejemplo las manchas en la figura~\ref{fig:ABBYYCorrectionsSpotAndArea}.
\begin{figure}
\includegraphics[width=\linewidth]{ABBYYCorrectionsSpotAndArea}
\caption[Dos manchas y guion fuera del área de reconocimiento]{Dos manchas no detectadas durante el paso de limpieza y guion dejado fuera del área de reconocimiento. Se muestra la sección del área de texto correspondiente\label{fig:ABBYYCorrectionsSpotAndArea}}
\end{figure}
Entonces, volvemos a \scantailor (y/o \gimp), hacemos las modificaciones pertinentes y nos vemos ante el problema de actualizar el proyecto de \abbyy. Podemos hacer \menu{\rightclick > Page Properties} en la página correspondiente en el panel de navegación y presionar en \keys{Reopen Page}, seleccionando la página que acabamos de corregir. Este procedimiento es un poco tedioso, pero para pocas páginas está bien.
Si las ediciones son frecuentes, podemos ahorrar algo de tiempo mientras no cambiemos las dimensiones de la imagen,\footnote{Esto no debería ocurrir en este punto.} ejecutando el script~\ref{scr:replaceInABBYY}.\footnote{Para que funcione debemos haber mantenido la numeración correcta de las páginas y \emph{no haber usado} \keys{Reopen Page} con esta página. Además, la imagen debe ser bitonal y \abbyy no debe tenerla abierta, para lo que debemos seleccionar alguna otra.} Este nos consulta por la página que queremos substituir y lo hace rápidamente. Su funcionamiento es un poco delicado, por lo que si no funciona bien recomiendo leer el apéndice~\ref{sec:abbyyProjectStructure} para intentar arreglarlo.
\pythonScript{replaceInABBYY.py}{Reemplazo de imagen bitonal en \abbyy 14\label{scr:replaceInABBYY}}
\subsubsection{Ajuste del alfabeto} El alfabeto es el conjunto de caracteres que el programa asume que pueden aparecer en un documento dado. Al crear nuestro idioma se elije por defecto un conjunto más o menos razonable de letras, números y signos de puntuación. \abbyy solo reconocerá aquellos caracteres que pertenezcan a este alfabeto.
Si nuestro documento utiliza más caracteres,\footnote{Por ejemplo, nuestro material contiene algunas letras del alfabeto griego.} debemos agregarlos al diccionario y preferentemente entrenar el patrón de usuario para facilitar su reconocimiento.
Esto lo haremos editando las propiedades del idioma (fig.~\ref{fig:ABBYYoptionsLanguagesLanguageProperties}). Allí, presionando \keys{\raisebox{.25em}{\...}}, podemos ver y editar los caracteres incluidos.\footnote{En realidad básicamente solo las letras y números. \keys{Advanced} despliega un menú similar, pero que además incluye los distintos símbolos y signos de puntuación. En algún caso podríamos necesitar trabajar con él (es análogo).}
El cuadro de diálogo se muestra en la figura~\ref{fig:ABBYYoptionsLanguagesLanguagePropertiesAlphabet}. En el menú desplegable \menu{Unicode subrange} tenemos páginas con los diferentes conjuntos de caracteres para seleccionar.\footnote{Normalmente solo uso caracteres de las páginas: \menu{Basic Latin}, \menu{Latin-1 Supplement}, \menu{Basic Greek}, \menu{General Punctuation} y \menu{Mathematical Operators}, si bien hay algunos de otras páginas seleccionados por defecto. Esto dependerá mucho de lo que haya impreso en el material que estemos reconociendo.}
\begin{figure}
\includegraphics[width=\linewidth]{ABBYYoptionsLanguagesLanguagePropertiesAlphabet}
\caption{Edición del alfabeto\label{fig:ABBYYoptionsLanguagesLanguagePropertiesAlphabet}}
\end{figure}
Podría ocurrir que nuestro alfabeto tuviera caracteres que no aparecen en nuestro material, pero que el software está confundiendo. Por ejemplo, es frecuente la confusión entre «*» y «$\bullet$». Si este último símbolo no aparece entonces podemos borrarlo del alfabeto (o agregarlo a los caracteres prohibidos en el menú \menu{Advanced}). Esto no nos asegura el reconocimiento que esperamos (todavía podría confundirlo con otro), pero en general mejora los resultados.
La edición del diccionario puede hacerse parte por parte. A veces agregamos un caracter porque se utiliza en una parte del libro, pero más adelante, aunque no aparece más, es erróneamente reconocido. Llegado a este punto se puede quitar del alfabeto (y volver a agregarse de ser necesario más adelante).
\subsubsection{Numeración de las zonas} La numeración de las zonas es importante si queremos que la selección de texto sea natural en la página.
El número del area seleccionada lo podemos ver en la pestaña \menu{Area Properties} que se encuentra debajo del \menu{Image Pane} (fig.~\ref{fig:ABBYYareaProperties}). Allí además podemos cambiar el tipo de área, el idioma y haciendo clic en \keys{\,\faCaretRight} accedemos a la orientación y otras opciones.
\begin{figure}
\centering
\includegraphics[width=.7\linewidth]{ABBYYareaProperties}
\caption[Pestaña \texttt{Area Properties} de \abbyy]{Pestaña \menu{Area Properties} de \abbyy\label{fig:ABBYYareaProperties}}
\end{figure}
Supongamos que tenemos tres zonas que se encuentran una encima de la otra. Si de arriba hacia abajo las ordenamos 1-3-2, cuando en el documento final queramos seleccionar texto de distintas áreas a la vez, veremos que no ocurre como desearíamos. El orden correcto sería obviamente 1-2-3. Recomiendo experimentar un poco cambiando los números y viendo el resultado para entender de que estamos hablando.
Cuando el contenido es complejo (texto, figuras con texto que queremos reconocer) puede ser difícil decidir como ordenar las áreas. Sugiero idear un criterio y aplicarlo consistentemente a todo el documento.
\subsubsection{Texto rotado} A veces parte del texto impreso en una página tiene una orientación distinta del resto. Por ejemplo, es común que en las gráficas, la etiqueta del eje vertical se imprima rotada 90\textdegree. Si el texto en el área que queremos reconocer se encuentra rotado 90\textdegree, 180\textdegree\ o 270\textdegree, debemos seleccionar el tipo de área \menu{Text} y desde el menú de propiedades del área indicar que orientación tiene para que el reconocimiento funcione bien (\menu{Rotated left}, \menu{Rotated right} o \menu{Rotated 180 degrees}). Para texto a 45\textdegree\ u otro ángulo no recto no disponemos de opciones, por lo que no podrá ser reconocido.
\subsubsection{Mejor diccionario que edición manual} Si hay alguna palabra mal reconocida es probable que esta no esté en el diccionario. Si es así, \abbyy la subraya y haciendo \keys{\rightclick} sobre ella nos presenta una lista de posibles candidatas tomadas del diccionario. Desde el punto de vista de mantener la selección en el documento final sincronizada con lo que se está viendo, es mejor corregir la palabra de esta manera que borrando y tipeando manualmente.
\subsubsection{Área no abarca todo el contenido} En algunas áreas, sobre todo aquellas en donde el texto no está justificado, \abbyy tiende a dejar fuera algunos caracteres, especialmente los guiones o signos de puntuación (fig.~\ref{fig:ABBYYCorrectionsSpotAndArea}). En estos casos debemos modificar el área para que pase a incluir todos los contenidos.
\subsubsection{Errores comunes} Para los errores que se repiten comúnmente, por ejemplo cuando \abbyy confunde «\textit{R}» por «/?», podemos ir tomando nota en un archivo de texto. Al terminar de reconocer todas las páginas, usamos la función de buscar (\keys{\ctrl + F}) para encontrarlos y corregirlos todos de una sola vez.
\subsubsection{Erratas en el original} A veces el material contiene erratas que pueden ser detectadas porque \abbyy resalta con subrayado rojo las palabras que no conoce. En los casos de la figura~\ref{fig:ABBYYCorrectionsTypos} se trata de palabras a las que les faltó una letra. Para corregirlas podemos insertar manualmente la letra faltante o, aún mejor, hacer \keys{\rightclick} sobre la palabra subrayada y elegir la correcta dentro de la lista de sugerencias que se nos ofrece.
Otra alternativa es editar el original con \gimp para corregir la errata.
\begin{figure}
\subcaptionbox{«Detemination» en vez de «Dete\textbf{r}mination»}{\includegraphics[width=\linewidth]{ABBYYCorrectionsTypo1}}
\subcaptionbox{«homogenities» en vez de «homogen\textbf{e}ities»}{\includegraphics[width=\linewidth]{ABBYYCorrectionsTypo2}}
\subcaptionbox{«feaures» en vez de «fea\textbf{t}ures»}{\includegraphics[width=\linewidth]{ABBYYCorrectionsTypo3}}
\caption{Algunas erratas en el libro de ejemplo\label{fig:ABBYYCorrectionsTypos}}
\end{figure}
\subsubsection{Vista previa} Podemos inspeccionar como va a quedar una página haciendo \menu{\rightclick > Save as > Searchable PDF Document} en la correspondiente miniatura en el panel de navegación. Si tenemos alguna duda, conviene abrir el \pdf creado y seleccionar el texto de interés para ver que esté alineado con la imagen. También podemos copiar y pegar en \notepad, para ver que haya sido bien reconocido.
\subsection{Patrones} \abbyy contiene patrones por defecto que han sido entrenados con muchos tipos de documentos. En general funcionan bien, pero es conveniente ayudarlo un poco entrenando un patrón personalizado para el documento presente.
El proceso de entrenamiento no es difícil, pero para los detalles refiero al lector al manual de usuario de \abbyy. A continuación veremos algunos consejos y buenas prácticas respecto al trabajo con patrones.
\subsubsection{Configuración} Para que el patrón entrenado se use hay que tener marcada la opción \menu{\typesetDotCircle{Use user patterns}} con \menu{\typesetCheckbox{Also use built-in patterns}}, de manera de que se puedan complementar (fig.~\ref{fig:ABBYYoptionsOCR}). Solo el patrón personalizado es mala idea: no funciona bien y además no se adapta a los diferentes tamaños y fuentes que pueda haber en el documento.
\begin{figure}
\centering
\includegraphics[width=\linewidth]{ABBYYoptionsOCR}
\caption[Opciones de \abbyy. Pestaña \texttt{OCR}]{Opciones de \abbyy. Pestaña \menu{OCR}\label{fig:ABBYYoptionsOCR}}
\end{figure}
\subsubsection{Qué entrenar} Debe tenerse en cuenta que el patrón debe corresponder a un solo tipo y tamaño de fuente. Es decir, será perjudicial entrenarlo con texto principal y con el de los títulos, cubiertas, etc. Sí soporta bien variantes de la misma fuente, como pueden ser negrita, cursiva, superíndice o subíndice.
De todas formas, debemos ser cuidadosos. A veces sucede que el programa reconoce bien alguna letra y al entrenar un poco el patrón deja de hacerlo, o comienza a confundirla con otra. En mi experiencia, es conveniente no entrenar la letra «l», pues una vez que lo hacemos comienza a confundir los «1» con estas, y las secciones muchas veces pasan a decir «l.l» en lugar de «1.1», o similares. Lo mismo puede suceder con otros carácteres. Ante la duda se puede guardar el patrón presionando \keys{Save Patterns and Languages\...} (fig.~\ref{fig:ABBYYoptionsOCR}) y probar editarlo, eliminando o agregando algún carácter para ver como reacciona el programa. En caso de que no se obtengan los resultados buscados, se puede restaurar presionando en \keys{Load Patterns and Languages\...}.
\subsubsection{Ligaduras} En tipografía existen las así llamadas ligaduras, que ocurren cuando dos o más caracteres que se imprimen juntos quedan unidos. Son ligaduras frecuentes (en el alfabeto latino) «fi», «ff», «ffi» y «ffl», aunque puede haber otras.
Podemos entrenar nuestro patrón para reconocer ciertas ligaduras. Si esta no existe previamente \abbyy ofrece incluirla en el alfabeto. Véase la figura~\ref{fig:ABBYYPatternTrainingLigature}.
\begin{figure}
\includegraphics[width=\linewidth]{ABBYYPatternTrainingLigature}
\caption{Entrenamiento y creación de ligaduras en \abbyy\label{fig:ABBYYPatternTrainingLigature}}
\end{figure}
A veces es útil entrenar como ligaduras pares o ternas de letras que en realidad no lo son. Por ejemplo en los subíndices. A veces \abbyy tiene dificultad para reconocer el subíndice de $A_{bc}$ (o similar). En dicho caso podría servir entrenar el patrón para que reconozca $_{bc}$ como una ligadura, aunque estrictamente no lo sea.
\subsubsection{Patrón + diccionario} El reconocimiento se basa fuertemente en el diccionario del idioma correspondiente. Si nuestro material contiene palabras que no están en el diccionario, \abbyy tiene más probabilidad de reconocerlas erróneamente. Para ayudarle, podemos incluir estas palabras en el diccionario a medida que van apareciendo. Inclusive ayuda agregar siglas o claves del tipo «l.s.d.» (\emph{least significant digit}, dígito menos significativo), «1.6.» (para los números de sección o de ecuación), «LED», etc.
Con un patrón suficientemente entrenado y un diccionario que contenga la mayoría de las palabras que aparecen en nuestro material solo tendremos que corregir algunos errores en cada página.
\subsubsection{Caracteres dudosos} Si vemos que resalta muy seguido un carácter como dudoso pero aún así lo reconoce bien, no debemos preocuparnos por entrenar el patrón para que deje de ser dudoso. A veces arreglamos eso pero empeoramos otro aspecto que funcionaba bien. %If it ain't broken, don't fix it!
\section{Exportación de resultados} Una vez reconocidas todas las páginas (inclusive las vacías) estamos en condiciones de generar nuestros documentos.
Seleccionamos entonces \menu{File > Save As > Searchable PDF Document}, ponemos el nombre \typesetFile{SCAN.pdf} y lo guardamos en la carpeta \typesetFolder{djv}.\footnote{El programa se tomará un tiempo para completar la exportación.} Este será nuestro \pdf base, sobre el que agregaremos los marcadores, metadatos y demás.
Análogamente, guardaremos un archivo \typesetFile{OCR.djvu}. Este no será de base, sino que lo usaremos solo para extraerle la capa de texto reconocida e insertarla en nuestro \djvu final (ver~\ref{sec:djvuOCR}).
\section{Conclusiones} El reconocimiento de texto es una etapa importante del procesamiento que aumenta la accesibilidad de su contenido. Puede realizarse de manera más o menos automatizada, pero no debería omitirse. En este capítulo analizamos las principales configuraciones de \abbyy, así como los problemas que podríamos encontrar en el camino y discutimos algunas formas de resolverlos.