OCR con C#

Hace pocos días tuve que implementar una solución OCR para uno de mis clientes, al principio pensé en sugerir alguna solución de terceros, pero recordé que Office 2007 trae una herramienta de Imaging (OCR) de andar por casa Smile.

La verdad es que es muy sencillito, lo primero que hay que hacer es instalar el complemente de Office 2007, no es necesario ni siquiera instalar Office 2007 al completo, con sólo el complemento ya vale tal y como se ve en la siguiente figura:

MODI

Una vez instalado el complemento de Office 2007, sólo hay que referenciarlo desde Visual Studio (en mi caso 2010 Smile) y con cuatro líneas de código ya lo tenemos, os paso el código y un pantallazo de los resultados obtenidos…

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace OCR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            panelImage.AllowDrop = true;
            panelImage.BackgroundImageLayout = ImageLayout.Zoom;
       }

        private void Form1_Load(object sender, EventArgs e)
        {
            loadocr("images/capture.jpg");
        }

        private void loadocr(string filename)
        {
            panelImage.BackgroundImage = Image.FromFile(filename);
            try
            {
                MODI.Document doc = new MODI.Document();
                doc.Create(filename);
                doc.OCR(MODI.MiLANGUAGES.miLANG_SPANISH, false, false);
                foreach (MODI.Image img in doc.Images)
                {
                    MODI.Layout layout = img.Layout;
                    textBoxResult.Text = layout.Text;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
         }

        private void panelImage_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.All;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }

        }

        private void panelImage_DragDrop(object sender, DragEventArgs e)
        {
            String[] items = (String[])e.Data.GetData(DataFormats.FileDrop, false);
            loadocr(items[0]);
        }

    }
}

Y el resultado que obtenemos…

dniHot

  • Es decir que una de las features más divertidas de OneNote, la podemos trasladar a nuestras aplicaciones… muy cooooool!!!

  • Bueno gracias por el material pero tengo unas consultas: 1.- La propieda allow drop debe estar activada cierto? 2.- el panel es un picture box o un panel?
    3.- Debo arrastrar la imagen al panel?

  • Es sólo un ejemplo, puedes arrastrar o no, da igual…

  • Es decir que una de las features más divertidas de OneNote, la podemos trasladar a nuestras aplicaciones… muy cooooool!!!

  • Bueno gracias por el material pero tengo unas consultas: 1.- La propieda allow drop debe estar activada cierto? 2.- el panel es un picture box o un panel?
    3.- Debo arrastrar la imagen al panel?

Se puede seguir cualquier respuesta a esta entrada a través de RSS 2.0 feed.

Compression Plugin created by Cheap Web Hosting - Sponsored by Desk Blotters.