SlideShare una empresa de Scribd logo
static void
                           _f_do_barnacle_install_properties(GObjectClass
                                                           *gobject_class)
                                                                          {




   OCRFeeder
                                                     GParamSpec *pspec;


                                                   /* Party code attribute */
                                            pspec = g_param_spec_uint64
                                              (F_DO_BARNACLE_CODE,
                                                          "Barnacle code.",
                                                           "Barnacle code",
                                                                          0,
                                                           G_MAXUINT64,
                                                          G_MAXUINT64 /*
                                                            default value */,

   Conversión de documentos en GNOME
                                                   G_PARAM_READABLE
                                                | G_PARAM_WRITABLE |
                                                    G_PARAM_PRIVATE);

                            g_object_class_install_property (gobject_class,

                                       F_DO_BARNACLE_PROP_CODE,



   Joaquim Rocha
   jrocha@igalia.com




GUADEC ES 7
¿Qué es?

Análisis de Documentos y
Reconocimiento Óptico de
Caracteres para GNOME


                Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
¿Porqué?

El papel tiene varios problemas

Sin aplicaciones para GNU/Linux
   que hagan un buen trabajo

                    Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Problemas del papel:
     Seguridad




                         Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
           CC Photo by: http://www.flickr.com/photos/badwsky/
Problemas del papel:
   Preservación




                        Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
   CC Photo by: http://www.flickr.com/photos/98469445@N00/
Problemas del papel:
Procesamiento de datos




                     Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
     CC Photo by: http://www.flickr.com/photos/hugovk/
Problemas del papel:
      Ecología




                            Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
          CC Photo by: http://www.flickr.com/photos/pranavsingh/
Hay motores de OCR para
    GNU/Linux pero...




               Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
OCR != Conversión de Documentos

(sólo tiene en cuenta los caracteres)
     (no considera la estructura)
      (no distingue contenidos)



                       Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Lo que se quiere es

  Análisis y Reconocimiento
       de Documentos

(conversión de documentos para
       formato electrónico)
 (primeros proyectos en los 80s)
                    Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
¿Done estamos estábamos?

   * Algunas soluciones cerradas
 * Sólo para sistemas proprietarios
         * Precios variados
* y todavía... resultados discutibles

                       Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
¿Cómo?




         Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Cómo




       Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Concepto base:

     1. Recortar los contenidos
           2. Clasificarlos
2.1. Son gráficos → se pegan en el
             documento
   2.2. Son texto → Se calcula el
  tamaño de letra; se pegan en el
             documento
                     Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Tantas estructuras...




                                Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
            CC Photo by: http://www.flickr.com/photos/uber-tuber/
Las estructuras varían con el tipo de
            documento

  Lo que funciona para detectar un
documento, no funcionará para otros


                      Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
OCRFeeder se enfoca en
contenidos, no en estructuras!




                   Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Concepto clave:

 Si una imagen de un documento
puede ser dividida en ventanas de
1 (contenido) o 0 (sin contenido),
entonces es posible agrupar todos
 los 1s y delinear los contenidos

                    Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Hay contenido = Hay puntos cuyo
  color es diferente del fondo




                   Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Bloques:
Se llama bloques a los grupos de 1s




                     Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Juntando bloques:

 Los bloques se comparan con los
  demás y se juntan cuando sea
            adecuado

Cuando ya no se pueden juntar más
 bloques, la parte del análisis está
              acabada

                      Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Reconocimiento:

Se usan motores OCR del sistema

Los motores se configuran desde la
   GUI o mediante ficheros XML

                     Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Configuración de un motor OCR:

<?xml version="1.0" encoding="UTF-8"?>
<engine>
   <name>Tesseract</name>
   <image_format>TIFF</image_format>
   <engine_path>/usr/bin/tesseract</engine_path>
   <arguments>$IMAGE $FILE; cat $FILE.txt;
               rm $FILE.txt</arguments>
</engine>



                                  Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Clasificación:


   Después de obtener el texto se
utilizan heurísticas para determinar
si el contenido representa gráficos o
                 texto

                       Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Exportación a ODT:

        Usa ODFPy

(abstrae la creación de ODF)
 (justo por encima de XML)

                  Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Últimas funcionalidades

         * Mejorar la a11y

* Mejorar la detección de columnas

     * Enderezar las imágenes

* Mejorar el reconocimiento de texto
                      Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Otras funcionalidades:

      * Importación de PDF
* Uso del pre-procesador Unpaper
      * Selección de fuente
      * Exportación a HTML
    * Grabar/cargar proyectos

                    Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Interacción con el usuario:

Los usuarios pueden editar y revisar los
     resultados de los algoritmos

  Entonces, la UI puede funcionar en
     modo automático o “manual”

    El ILC sólo funciona en el modo
               automático
                         Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
ABBY Finereader test




Nuance Omnipage test




                       Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Finereader's
                                              results


Omnipage's
results




             Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
¡Demo!




         Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Futuro:

  * Integración de Ocropus como
   método de análisis alternativo
  * Más formatos de exportación:
          HOCR, txt, PDF
* Mejor integración con GNOME y
          sus aplicaciones

                      Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
GNOME:

Usa la infrastructura de GNOME
           desde Enero




                   Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
Página web:
http://live.gnome.org/OCRFeeder

               git:
 http://git.gnome.org/ocrfeeder

            Bugzilla:
   http://bugzilla.gnome.org
    product: OCRFeeder
                    Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
¡Gracias!

            Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7

Más contenido relacionado

Similar a Ocrfeeder

Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
Carlos Gustavo Ruiz
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge Pintado
CongresoWeb
 
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
nacho mascort
 
Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Engine
pythoncanarias
 
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Gustavo Arjones
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Fátima Casaú Pérez
 
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Igalia
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
Rebecca Casais
 
Poniendo a drupal en el mapa
Poniendo a drupal en el mapaPoniendo a drupal en el mapa
Poniendo a drupal en el mapa
Eduardo Riesco
 
Amazon y GeneXus: Lecciones Aprendidas
Amazon y GeneXus: Lecciones AprendidasAmazon y GeneXus: Lecciones Aprendidas
Amazon y GeneXus: Lecciones Aprendidas
GeneXus
 
Amazon y genexus lecciones aprendidas
Amazon y genexus lecciones aprendidasAmazon y genexus lecciones aprendidas
Amazon y genexus lecciones aprendidas
GeneXus
 
Paralela10
Paralela10Paralela10
Paralela10
Abraham Zamudio
 
Django
DjangoDjango
Open gl
Open glOpen gl
Open gl
julicasrgar13
 
Open gl
Open glOpen gl
Open gl
julicasrgar13
 
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción ProfesionalUNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
Nahuel Garbezza
 
Sobre GrooScript
Sobre GrooScriptSobre GrooScript
Sobre GrooScript
Jorge Franco Leza
 
Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
kdeespana
 
Scrum para uno
Scrum para unoScrum para uno
Scrum para uno
Jorge Ortiz
 
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Alberto Sanz Herrero
 

Similar a Ocrfeeder (20)

Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge Pintado
 
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
 
Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Engine
 
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
 
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
 
Poniendo a drupal en el mapa
Poniendo a drupal en el mapaPoniendo a drupal en el mapa
Poniendo a drupal en el mapa
 
Amazon y GeneXus: Lecciones Aprendidas
Amazon y GeneXus: Lecciones AprendidasAmazon y GeneXus: Lecciones Aprendidas
Amazon y GeneXus: Lecciones Aprendidas
 
Amazon y genexus lecciones aprendidas
Amazon y genexus lecciones aprendidasAmazon y genexus lecciones aprendidas
Amazon y genexus lecciones aprendidas
 
Paralela10
Paralela10Paralela10
Paralela10
 
Django
DjangoDjango
Django
 
Open gl
Open glOpen gl
Open gl
 
Open gl
Open glOpen gl
Open gl
 
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción ProfesionalUNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
UNQ - Tecnicatura en Programación Informática - Trabajo de Inserción Profesional
 
Sobre GrooScript
Sobre GrooScriptSobre GrooScript
Sobre GrooScript
 
Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
 
Scrum para uno
Scrum para unoScrum para uno
Scrum para uno
 
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
 

Ocrfeeder

  • 1. static void _f_do_barnacle_install_properties(GObjectClass *gobject_class) { OCRFeeder GParamSpec *pspec; /* Party code attribute */ pspec = g_param_spec_uint64 (F_DO_BARNACLE_CODE, "Barnacle code.", "Barnacle code", 0, G_MAXUINT64, G_MAXUINT64 /* default value */, Conversión de documentos en GNOME G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_PRIVATE); g_object_class_install_property (gobject_class, F_DO_BARNACLE_PROP_CODE, Joaquim Rocha jrocha@igalia.com GUADEC ES 7
  • 2. ¿Qué es? Análisis de Documentos y Reconocimiento Óptico de Caracteres para GNOME Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 3. ¿Porqué? El papel tiene varios problemas Sin aplicaciones para GNU/Linux que hagan un buen trabajo Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 4. Problemas del papel: Seguridad Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7 CC Photo by: http://www.flickr.com/photos/badwsky/
  • 5. Problemas del papel: Preservación Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7 CC Photo by: http://www.flickr.com/photos/98469445@N00/
  • 6. Problemas del papel: Procesamiento de datos Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7 CC Photo by: http://www.flickr.com/photos/hugovk/
  • 7. Problemas del papel: Ecología Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7 CC Photo by: http://www.flickr.com/photos/pranavsingh/
  • 8. Hay motores de OCR para GNU/Linux pero... Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 9. OCR != Conversión de Documentos (sólo tiene en cuenta los caracteres) (no considera la estructura) (no distingue contenidos) Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 10. Lo que se quiere es Análisis y Reconocimiento de Documentos (conversión de documentos para formato electrónico) (primeros proyectos en los 80s) Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 11. ¿Done estamos estábamos? * Algunas soluciones cerradas * Sólo para sistemas proprietarios * Precios variados * y todavía... resultados discutibles Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 12. ¿Cómo? Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 13. Cómo Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 14. Concepto base: 1. Recortar los contenidos 2. Clasificarlos 2.1. Son gráficos → se pegan en el documento 2.2. Son texto → Se calcula el tamaño de letra; se pegan en el documento Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 15. Tantas estructuras... Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7 CC Photo by: http://www.flickr.com/photos/uber-tuber/
  • 16. Las estructuras varían con el tipo de documento Lo que funciona para detectar un documento, no funcionará para otros Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 17. OCRFeeder se enfoca en contenidos, no en estructuras! Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 18. Concepto clave: Si una imagen de un documento puede ser dividida en ventanas de 1 (contenido) o 0 (sin contenido), entonces es posible agrupar todos los 1s y delinear los contenidos Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 19. Hay contenido = Hay puntos cuyo color es diferente del fondo Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 20. Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 21. Bloques: Se llama bloques a los grupos de 1s Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 22. Juntando bloques: Los bloques se comparan con los demás y se juntan cuando sea adecuado Cuando ya no se pueden juntar más bloques, la parte del análisis está acabada Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 23. Reconocimiento: Se usan motores OCR del sistema Los motores se configuran desde la GUI o mediante ficheros XML Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 24. Configuración de un motor OCR: <?xml version="1.0" encoding="UTF-8"?> <engine> <name>Tesseract</name> <image_format>TIFF</image_format> <engine_path>/usr/bin/tesseract</engine_path> <arguments>$IMAGE $FILE; cat $FILE.txt; rm $FILE.txt</arguments> </engine> Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 25. Clasificación: Después de obtener el texto se utilizan heurísticas para determinar si el contenido representa gráficos o texto Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 26. Exportación a ODT: Usa ODFPy (abstrae la creación de ODF) (justo por encima de XML) Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 27. Últimas funcionalidades * Mejorar la a11y * Mejorar la detección de columnas * Enderezar las imágenes * Mejorar el reconocimiento de texto Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 28. Otras funcionalidades: * Importación de PDF * Uso del pre-procesador Unpaper * Selección de fuente * Exportación a HTML * Grabar/cargar proyectos Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 29. Interacción con el usuario: Los usuarios pueden editar y revisar los resultados de los algoritmos Entonces, la UI puede funcionar en modo automático o “manual” El ILC sólo funciona en el modo automático Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 30. ABBY Finereader test Nuance Omnipage test Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 31. Finereader's results Omnipage's results Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 32. ¡Demo! Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 33. Futuro: * Integración de Ocropus como método de análisis alternativo * Más formatos de exportación: HOCR, txt, PDF * Mejor integración con GNOME y sus aplicaciones Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 34. GNOME: Usa la infrastructura de GNOME desde Enero Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 35. Página web: http://live.gnome.org/OCRFeeder git: http://git.gnome.org/ocrfeeder Bugzilla: http://bugzilla.gnome.org product: OCRFeeder Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7
  • 36. ¡Gracias! Joaquim Rocha (Igalia) · OCRFeeder · GUADEC ES 7