• 验证码学习笔记


    1. 验证码的作用是:区分操作的对象是人还是机器。验证码信息是保存在服务器端的Session里面的。因此无法用程序将验证码从客户端中读取出来。

    2. .Net图像处理基本知识:

        ·使用Image.FromFile(file)加载一张图片,返回时Image类型,一般都可以转换为Bitmap子类使用。会智能识别图片格式。

        ·Bitmap.save(),第二个参数为图片格式。可以实现图片格式转换功能。

        ·除非图片以后还要用,否则要using处理Bitmap对象。

        ·使用指针操作Bitmap效率最高,不过初学者不好理解,因此这次讲解简化的GetPixel【获得某个点上面的数据】、SetPixel【设置某个点上面的颜色。】

    这里注意,使用GetPixel()和SetPixel()是更改内存里面的图片,并没有更改原图片,所以在使用完成之后,一定要记着保存。

    范例1:

        

        ·通过三颜色【RGB】获取颜色的值,使用Color.FromArgb()方法。

        ·对图片颜色进行取反,即用255减去现有的颜色,如下图:

    3. 实例:

        1. 处理图片,保存为tif格式:

            1.1新建windows 窗体应用程序,拖出一个按钮,点击进去之后,如下代码:

            private void button1_Click(object sender, EventArgs e)

    {

    string[] files = Directory.GetFiles(@"K:Net-学习资源C#.Net教程18-Tesseract验证码识别20130425公开课软件、图片库和代码样本图片和测试用图片样本图片", "*gif");

    for (int i = 0; i < files.Length; i++)

    {

    string file = files[i];

    using (Bitmap bitmap = (Bitmap)Image.FromFile(file))

    {

    using (Bitmap newBitmap = Process(bitmap))

    {

    newBitmap.Save(@"I:DesktopYZMSBImages"+i+".tif",ImageFormat.Tiff);

    }

    }

    }

    }

        //处理干扰项

    private Bitmap Process(Bitmap bitmap)

    {

    Bitmap newBitmap = new Bitmap(bitmap);

    for (int x = 0; x < bitmap.Width; x++)

    {

    for (int y = 0; y < bitmap.Height; y++)

    {

    //去掉边框

    if (x == 0 || y == 0 || x == bitmap.Width - 1 || y == bitmap.Height - 1)

    {

    newBitmap.SetPixel(x, y, Color.White);

    }

    else

    {

    Color color = bitmap.GetPixel(x,y);

    if (color.Equals(Color.FromArgb(204, 204, 51)) || color.Equals(Color.FromArgb(153, 204, 51) )|| color.Equals(Color.FromArgb(204, 255, 102)) || color.Equals( Color.FromArgb(204, 255, 51)) || color.Equals( Color.FromArgb(204, 204, 204)))

    {

    newBitmap.SetPixel(x, y, Color.White);

    }

    else

    {

    newBitmap.SetPixel(x,y,color);

    }

    }

     

    }

    }

    return newBitmap;

    }

        2. 合并图片

            2.1使用jTessBoxEditor.jar工具将多个图片合并成一个图片,如下:【注意:因为程序是用java编写的,所以必须配置java环境才能运行程序。】

        

    Tools->Merge Tiff 然后选择你要合并的图片,最终保存为一张tif图片。

        3. 安装tesseract-ocr-setup-3.01-1.exe

        4. 进入dos窗口,进入合并后的图片文件夹中。然后执行命令:tesseract.exe haijia.tif haijia batch.nochop makebox,这样就对图片进行初步的识别,并将识别的信息保存到haijia.box文件里面。

        5. 然后再次打开jTessBoxEditor,点击"Open",选择haijia.tif,然后对图片进行手动修改。

        6. 执行命令:tesseract.exe haijia.tif haijia nobatch box.train

        7.执行命令:unicharset_extractor.exe haijia.box

        8. 在目录中新建一个名字为"font_properties"的文件,并输入文本(其中haijai是训练的名字,保存的时候使用EditPlus等高级文本编辑器去掉BOM头或者保存为ANSI格式):haijia 1 0 0 1 0

        9. 命令行执行cntraining.exe haijia.tr

        10. 命令行执行 mftraining.exe –F font_properties –U unicharset haijia.tr

        在第10步后遇到下面错误:【未解决】

        

        11. 目录下应该生成若干个文件,把unicharset,inteemp,normproto,pfftable这几个文件加上训练名字前缀"haijia."

        12.命令行执行"combine_tessdata haijia."生成的haijia.traineddata就可以用来识别了。

        13. 把haijia.traineddata拷到tesseract-ocr解压目录下的tessdata目录下。找一张经过和第二步一样处理过的图片,命令行执行tesseract.exe 1.jpg out –l haijia(使用haijia这个训练结果识别1.jpg这张图片,识别结果输出到out.txt)在文件夹下会生成一个out.txt,其中就是识别出的结果。

        14.在程序中添加引用:tesseract.dll,然后拖一个按钮控件,然后看如下代码:

        private void button2_Click(object sender, EventArgs e)

    {

            //选择文件对象

    OpenFileDialog ofd = new OpenFileDialog();

    if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK)

    {

    return;

    }

    string file = ofd.FileName;

            //这一块的代码要和处理图片时的代码一样。

    using (Bitmap bitmap = (Bitmap)Image.FromFile(file))

    {

    using (Bitmap newBitmap =Process(bitmap))

    {

    TesseractProcessor processor = new TesseractProcessor();

    processor.SetPageSegMode(ePageSegMode.PSM_SINGLE_LINE);

    processor.Init(@"学习库的路径【就是处理完后的.traineddata文件所在的文件夹】","haijia训练集的名称】",(int)eOcrEngineMode.OEM_DEFAULT);

    string result = processor.Recognize(newBitmap);

    MessageBox.Show(result);

    }

    }

    }

        下面是Tesseract原理:

        

  • 相关阅读:
    box-sizing
    max-width
    如何编写高质量CSS
    CSS文字大小单位PX、EM、PT
    jQuery设计思想
    pageX,clientX,offsetX,layerX的那些事
    html块级元素和内联元素区别详解
    centos彻底删除mysql
    删:[CentOS 7] 安装nginx
    CentOS7.0安装与配置Tomcat-7
  • 原文地址:https://www.cnblogs.com/taidou/p/4690615.html
Copyright © 2020-2023  润新知