首页 > 其他分享 >.Net使用 Tesseract 框架识别简单验证码

.Net使用 Tesseract 框架识别简单验证码

时间:2023-09-15 13:01:34浏览次数:39  
标签:文件 Tesseract exp0 验证码 jTessBoxEditor num Net font

1.图片验证码生成

public class CaptchaGenerator
    {
        public static string GetRandomAuthcode(int length)
        {

            string chkCode = string.Empty;

            //验证码的字符集,去掉了一些容易混淆的字符 
            char[] character = { '0', '1', '2', '3', '4', '5', '6', '8', '9' };

            Random rnd = new Random();
            //生成验证码字符串 
            for (int i = 0; i < length; i++)
            {
                chkCode += character[rnd.Next(character.Length)];
            }

            return chkCode;
        }

        public static void GetImage( int imageWidth = 110, int imageHeight = 30)
        {

            var authcode = GetRandomAuthcode(5);

            //字体列表,用于验证码 
            string[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
            using Bitmap bmp = new Bitmap(imageWidth, imageHeight);
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.White);

            //画验证码字符串 
            for (int i = 0; i < authcode.Length; i++)
            {
                string fnt = font[0];
                Font ft = new Font(fnt, 14);
                Color clr = Color.Black;
                g.DrawString(authcode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)4);
            }

            g.DrawRectangle(new Pen(Color.Blue, 1), 0, 0, bmp.Width - 1, bmp.Height - 1);
            var tellIFileName = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "1024.png");
            bmp.Save(tellIFileName, System.Drawing.Imaging.ImageFormat.Png);
        }

    }

2.根据训练模型识别验证码

  // 简单图片识别
        static void Main(string[] args)
        {
            // 随机生成一张图片
            CaptchaGenerator.GetImage();

            var tellIFileName = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "1024.png");
            // tessdata 文件下放在的 code 是我们训练好了的模型
            using (var engine = new TesseractEngine("tessdata", "code", EngineMode.TesseractOnly))
            {
                using (var img = Pix.LoadFromFile(tellIFileName))
                {
                    using (var page = engine.Process(img))
                    {
                        var txtResult = page.GetText().Trim();
                        Console.WriteLine(txtResult);
                    }
                }
            }
            Console.ReadKey();
        }

3.结果演示

 4.Tesseract-OCR样本训练

Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护。

(1).从https://github.com/UB-Mannheim/tesseract/wiki下载tesseract安装包,目前最新的版本是tesseract-ocr-w64-setup-v4.0.0.20181030.exe。

(2).从https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/下载jTessBoxEditor训练工具,目前最新的版本是jTessBoxEditor-2.2.0.zip。

(3).由于jTessBoxEditor是用Java开发的,需要安装Java虚拟机才能运行。从https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java JDK,目前最新的版本事jdk-8u191-windows-x64.exe。

(4)安装步骤省略

(5)打开jTessBoxEditor

 

 

 5.制作样本

(1)运行jTessBoxEditor工具,点击Tools。

 (2)点击Merge TIFF。

(3) 文件类型选择All Image Files,选择样本图片,点击打开。

 

(4)文件名输入num.font.exp0.tif,文件类型选择TIFF,点击保存。

(5)点击确定

 (6)将num.font.exp0.tif文件复制到Tesseract-OCR安装目录。

 

 (7)生成Box File文件。打开cmd命令行,以管理员身份运行

(8)进入Tesseract-OCR安装目录

 

(9).执行命令:

tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox

生成的box文件为num.font.exp0.box,box文件为Tesseract识别出的字符及其坐标。

注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:

tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。

(10). 将上一步生成的.box和.tif样本文件放在同一目录。我是放在Tesseract-OCR默认安装目录下。

(11).运行jTessBoxEditor工具,点击Box Editor。

 (12)点击Open。

 

(13)选择之前生成的num.font.exp0.tif,点击打开。

(14)

可以看出有些字符识别的位置不准确,可以通过该工具手动对每张图片中识别错误的字符和位置进行校正。校正完成后保存即可。

注: 这里必须修改识别错误的字符,否则做出来的traineddata文件也是错的。可以在下面的界面中修改并保存,也可以直接在traineddata文件中修改。

(15)

定义字体特征文件。创建一个名称为font_properties的字体特征文件。font_properties不含有BOM头,文件内容格式如下:

<fontname> <italic> <bold> <fixed> <serif> <fraktur>

其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。

这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:

font 0 0 0 0 0

这里全取值为0,表示字体不是粗体、斜体等等。

(16)

生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容:

rem 执行改批处理前先要目录下创建font_properties文件

echo Run Tesseract for Training..

tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train

 

echo Compute the Character Set..

unicharset_extractor.exe num.font.exp0.box

mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

 

echo Clustering..

cntraining.exe num.font.exp0.tr

 

echo Rename Files..

rename normproto num.normproto

rename inttemp num.inttemp

rename pffmtable num.pffmtable

rename shapetable num.shapetable

 

echo Create Tessdata..

combine_tessdata.exe num.

(17)执行批处理文件, num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到程序的样本文件夹里,就可以使用了。

 

 

(18)把我们训练的模型拷贝过到我们的语言模型中去测试

结果如下:

 附上程序和工具 

 

tesseract-ocr-w64-setup-5.3.1.20230401
https://pan.baidu.com/s/1o3xJ-IBPguvUTtJoULbpsw 提取码: 657q
jTessBoxEditor-2.4.1
链接: https://pan.baidu.com/s/1fAAvYivDhqFAprKjNWYVPg 提取码: 657q
demo程序
链接: https://pan.baidu.com/s/11y9Lhtg8eKoXnv5qzPnHlw 提取码: 657q

标签:文件,Tesseract,exp0,验证码,jTessBoxEditor,num,Net,font
From: https://www.cnblogs.com/liuxiaoji/p/17704574.html

相关文章

  • Windows Server 2012 R2 Standard 安装.net 3.5
    很久没截图IIS部署了,最近临时接了一个部署任务就是在一台新的WindowsServer2012 R2 上部署一套系统,需要安装的.net3.5但是一直不成功,找了很久的资料终于有着落了,先记录下正常情况安装大概率都会出现以下问题 然后网上找寻解决方案方法一【无效】:角色添加功能里边(就......
  • 第15节课:AI框架图片识别之数据解析、Network初始化、Sigmoid激活函数及Feedforward函
    第15节课:AI框架图片识别之数据解析、Network初始化、Sigmoid激活函数及Feedforward函数详细内容请关注微信公众号:从零起步学习人工智能 https://mp.weixin.qq.com/s?__biz=MzU3OTc4OTEzNw==&mid=2247483658&idx=1&sn=3d8b40ce71e84c717428d4a1994581e0&chksm=fd618934ca1600229308......
  • Asp.net的项目SqlServer数据库迁移到MySql
    1、环境Windows10+VS2015+.Net4.5.2+MySql5.72、准备   1)、NavicatPremium15(用于数据库转换,其它版本的亦可)   2)、Vs2015   3)、安装mysql-connector-net-6.9.9.msi   4)、安装mysql-for-visualstudio-1.2.6.msi3、数据库转换  1)、打开nav......
  • uniapp-net core后台-实现认证
    一在program.cs中添加cookie认证builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options=>{options.Cookie.Name="auth";options.ExpireTimeSpan=TimeSpan.FromDays(1);options.Sli......
  • .Net多线程读取pdf文本
    1.nuget安装UglyToad.PdfPig2.SemaphoreSlimsemaphore=newSemaphoreSlim(10);同时启动10个线程读取指定页面文本。C#代码:staticstringGetPdfText(stringfilePath){FileInfofile=newFileInfo(filePath);if(file.Extension.ToLower().Contains("pdf"))......
  • 流量分析工具 NetCap
    项目地址:https://github.com/dreadl0ck/netcap/tree/masterTheNetcap(NETworkCAPture)frameworkefficientlyconvertsastreamofnetworkpacketsintoplatformneutraltype-safestructuredauditrecordsthatrepresentspecificprotocolsorcustomabstractions......
  • .NET 程序员的调试神器-Dumpify
    DumpifyDumpify是一个使用C#开发的开源库,它通过向控制台应用程序添加.Dump()扩展方法来提高工作效率和可调试性。可以Dump任何对象并以结构化且丰富多彩的方式输出到控制台、跟踪、调试事件。支持属性、字段和非公共成员,支持设置最大嵌套层数,支持循环依赖和引用,支持......
  • .NET Core创建API项目
    新建项目类型:ASP.NETCoreWebAPIWebAPI控制器通常应派生自ControllerBase而不是Controller。Controller派生自ControllerBase,并添加对视图的支持,因此它用于处理Web页面,而不是WebAPI请求。如果同一控制器必须支持视图和WebAPI,则派生自Controller。API接口返回......
  • C# 性能诊断工具 dotnet-counters 的使用
    创建.NET程序Dump的几种姿势下载dotnet-counters工具简介dotnet-counters是一个性能监视工具,用于初级运行状况监视和性能调查。它通过EventCounterAPI观察已发布的性能计数器值。例如,可以快速监视CUP使用情况或.NETCore应用程序中的异常率等指标安装通过nuget包安装:......
  • 核桃云监控:https://jk.htyun.net/
    今天给大家推荐一款非常好用的网站监测平台,也是我一直再用的,它就好比给自家的网站上雇了一个管家,它可以替我24小时不间断端的扫描网站,如果出现宕机,或者因为网络还是其他问题打不开时,系统会自动发送报警来提醒我,这样就节省了我的大部分时间,而我就不用时不时去自己去登录网站检查了,......