zoukankan      html  css  js  c++  java
  • 使用 office2007 document imaging control 控件 做识别 OCR

    原文:
    http://www.devsource.com/article2/0,1895,2143124,00.asp 

    首先确保的是你要装上这个组件Microsoft Office Document Imaging 12.0 Type Library

    装上office2007默认是不装.(实际我只装了个visio 2007)

    装好后添加引用这个com就可以了

    然后他在识别英文方面还不错.实际用它识别了一下CSDN的验证码.成功率很低..这类都是需要我们先做一些滤波的动作的.
    我把 language 换成中文后识别中文都是报异常.
    以下是识别的核心代码

     MODI.Document md = new MODI.Document();
                md.Create(Directory.GetCurrentDirectory() 
    + "\\SampleForOCR.tiff");
                md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, 
    truetrue);

                MODI.Image image 
    = (MODI.Image)md.Images[0];
                MODI.Layout layout 
    = image.Layout;

                MODI.Word word;
                StringBuilder sb 
    = new StringBuilder();
                
    for (int i = 0; i < layout.Words.Count;i++ )
                
    {
                    word 
    = (MODI.Word)layout.Words[i];
                    sb.Append(word.Text);
                }

    sb.ToString就可以得到了
    图片转成 tiff
    Bitmap bitmap = new Bitmap(100100);
                bitmap.Save(
    "somefilename", ImageFormat.Tiff);
    如何进行截屏呢?
    拷屏.先把整个屏幕的图像拷过来(其它地方也会用到这个.比如做一个操作动作的外挂等)
    Graphics g = Graphics.FromImage(m_WindowDlg.m_objBitmap);
                
    // Copy the screen into the bitmap object.
                g.CopyFromScreen(0000new Size(w, h));

    指定区域是利用
    另一个窗口来的..把这个窗口的透明属性opacity设为100%这样人家就看不到了.
    然后利用 MouseDown 画出我们截屏的范围 和 mouseUP事件.
    mouseUP后引发一个完成的事件.并通知座标大小
    主要代码

    // Make sure we clicked the mouse button and
                
    //   have a starting coordinate.
                if (m_nStartX != -1)
                
    {
                    
    // Get the graphcis object from this window.
                    Graphics g = Graphics.FromHwnd(Handle);

                    
    // Check to see if we need to restore the
                    
    //   screen from a previous rectangle draw.
                    if (m_nLastX != -1)
                    
    {
                        
    // Create a rectangle with which to clip.
                        
    //   Note that we are 3 pixels to the left
                        
    //   and 3 pixels to the right so that we
                        
    //   can take the width of the line into
                        
    //   account.
                        Rectangle rc = new Rectangle(m_nLastX-3, m_nLastY-3,
                            m_nLastWidth
    +6, m_nLastHeight+6);
                        g.SetClip(rc);
                        g.DrawImage(m_objBitmap, 
    00);
                        g.ResetClip();
                    }


                    
    // Here we set some local variables just
                    
    //   in case we have to swap the values.
                    int nStartX = m_nStartX;
                    
    int nStartY = m_nStartY;

                    
    // Get and record our current mouse position.
                    int nEndX = e.X;
                    
    int nEndY = e.Y;

                    
    // Calculate width and height.
                    int nWidth = Math.Abs(nStartX - nEndX);
                    
    int nHeight = Math.Abs(nStartY - nEndY);

                    
    // We may need to swap values if user went
                    
    //   left from the start position.
                    if (nEndX < nStartX)
                    
    {
                        
    int i = nStartX;
                        nStartX 
    = nEndX;
                        nEndX 
    = i;
                    }

                    
    // We may need to swap values if user went
                    
    //   up from the start position.
                    if (nEndY < nStartY)
                    
    {
                        
    int i = nStartY;
                        nStartY 
    = nEndY;
                        nEndY 
    = i;
                    }


                    
    // Draw the rectangle.
                    g.DrawRectangle(new Pen(Color.Black, 3),
                        nStartX, nStartY, nWidth, nHeight);

                    
    // Record the operation so that we can restore
                    
    //   when the mouse moves, and also give values
                    
    //   to the EndCapture method.
                    m_nLastX = nStartX;
                    m_nLastY 
    = nStartY;
                    m_nLastWidth 
    = nWidth;
                    m_nLastHeight 
    = nHeight;
    g.DrawRectangle(new Pen(Color.Red, 1), 这个改成红色一个像素看起来更舒服,这个函数是鼠标一移动都会被调用的.

    他的这个程序.还做了截屏.想用C#做截屏的也可以看一下它是什么做的.
    附件下载
  • 相关阅读:
    关于linux下配置python3的virtualenvwrapper
    python-爬图小样
    C++反汇编学习笔记(五)
    C++反汇编学习笔记(四)
    C++反汇编学习笔记(三)
    OllyDebug调试技巧(三)
    C++反汇编学习笔记(二)
    OllyDebug调试技巧(二)
    OllyDebug调试技巧(一)
    PE结构学习笔记(十一)
  • 原文地址:https://www.cnblogs.com/lovebanyi/p/808242.html
Copyright © 2011-2022 走看看