Win 10下 TesseractOCR 5训练中文字体库与.Net Core中调用

本文步骤工具包下载链接: https://pan.baidu.com/s/13w8jDJTX9ONRZL5QdtgoSA 提取码: 8ggw

训练前准备

下载Tesseract OCR (这里的版本是v5.0)

  1. 官网地址:https://digi.bib.uni-mannheim.de/tesseract/
  2. 下载安装完成后,使用指令 tesseract -v 查看版本号
下载完成查看版本展示

下载官方的中文字体包

  1. 官网地址:https://github.com/tesseract-ocr/tessdata_best
  2. 如果上面的地址进不去或者下载无法连接到资源,修改本地的hosts文件,修改如下: 151.101.76.133 raw.githubusercontent.com (截止到2020.07.06 还可以使用,不行的话自己上站长之家找个可以的ip)
修改host文件
  1. 下载的文件提示
下载的文件提示

准备个素材图

  1. 以下图片的字体是宋体,像以下这种的图片,自带字体库识别率挺高的,下面这个是自己测试出来的识别不正常的
关注.png

.Net Core中安装Tesseract OCR相关组件

新建类库 L.TesseractOCRTool (这个名称自己取),安装依赖,这里使用预发行版

安装Tesseract依赖

在类库根目录下新建 tessdata 名称的文件夹(不要打错了)

将上面下载的.traineddata文件拷贝进去,并设置属性始终复制

.traineddata文件拷贝

下载宋体的字体包(不让直传,只能用百度网盘)

链接: https://pan.baidu.com/s/1SbjVTYkGHlb2PYJKz67sAQ 提取码: r239

编写测试代码

// 以下代码从自定义帮助类中提取出来的,如果测试的话,没有必要那么麻烦单独类出来直接使用代码即可
// 文件路径扩张类
public class HelperFile
    {
        /// 
        /// 获取当前程序的目录
        /// 
        /// 当前程序的目录路径
        public static string GetCurrenDirectory()
        {
            return Directory.GetCurrentDirectory();
        }
}

// 字符串方法扩张类
public static class stringExtensions
{
        /// 
        /// 拼接字符串
        /// 
        /// 字符串
        /// 需要拼接的内容
        /// 拼接连接符
        /// 拼接的字符串
        public static string Joint(this string value, string jointVal, string jointChar = "-") => string.Format("{0}{1}{2}", value, jointChar, jointVal);
}

using L.UtilityTool.DataType.Extensions;
using L.UtilityTool.Helper;
using Tesseract;

namespace L.TesseractOCRTool
{
    public class TesseractOCRTool
    {
        //调用tesseract实现OCR识别
        public static string Test()
        {
            string ret = "";
            string imgPath = "";
            imgPath = HelperFile.GetCurrenDirectory().Joint("images\\关注.png", "\\");            

            if (HelperFile.IsFileExist(imgPath))
            {
                //using (var engine = new TesseractEngine("tessdata", "chi", EngineMode.LstmOnly))
                using (var engine = new TesseractEngine("tessdata", "chi_sim", EngineMode.LstmOnly))
                {
                    using (var img = Pix.LoadFromFile(imgPath))
                    {
                        using (var page = engine.Process(img))
                        {
                            ret = page.GetText().Trim();
                        }
                    }
                }
            }

            return ret;
        }
    }
}

使用验证代码来测试自带字体库

关注识别成关沂

详细训练步骤

训练总步骤预览

  1. chi_sim.training_files.txttext.txt 可以忽略,后面步骤会介绍,这里写该文章时未删干净
训练总步骤预览

新建text.txt(这里是text、名称可随意)

  1. 这里是演示只写一个词汇:关注,正常情况下是自己准备一大堆的中文
  2. 一定不可出现空格,不然它自己识别的时候会把空格也当做一个识别框(可用jTessBoxEditor-FX这个软件查看,这里不做演示)
image.png

将宋体的字体包也拷贝到该根目录(可见上图simsun.ttc)

利用text2image.exe,生成.tif和.box文件

  1. 这里的text2image.exe是下载Tesseract OCR自带的,可到安装目录直接搜索:text2image
  2. 下面的指令可自己新建bat文件运行或者直接打开CMD命令符窗口运行
  3. --text填写的上一步新建的text.text文件路径
  4. --outputbase填写的是要生成tif和box文件的位置,命名规则:lang为语言名称,fontname为字体名称,num为序号,不可随意(这里是:chi_wzeros.font.exp0)
  5. --font字体包名称
  6. --fonts_dir字体所在文件夹
text2image --text="E:\L\Other\TesseractOCR\TesseractOcrTrain\text.txt" --outputbase="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_wzeros.font.exp0" --fontconfig_tmpdir="%temp%" --font="simsun" --fonts_dir="E:\L\Other\TesseractOCR\TesseractOcrTrain"
生成tif和box文件展示

利用.tif和.box文件生成.lstmf文件用于lstm训练,生成.lstmf文件

1.下面的指令可自己新建bat文件运行或者直接打开CMD命令符窗口运行

  1. 注意有空格,--psm 6 的效果我测试的结果上看是最好的(你可以自己尝试目前总共到13)
tesseract chi_wzeros.font.exp0.tif chi_wzeros.font.exp0 -l chi_sim --psm 6 lstm.train
生成.lstmf文件

从已有的chi_sim.traineddata中提取.lstm文件

  1. 这里的chi_sim.traineddata的文件请使用官网下载的(可回到这篇文章的开头介绍下载)
  2. 下面的指令可自己新建bat文件运行或者直接打开CMD命令符窗口运行
combine_tessdata -e chi_sim.traineddata chi_sim.lstm
从chi_sim.traineddata中提取.lstm文件

新建chi_sim.training_files.txt文件(这里是:chi_sim.training_files.txt,名字可随意)

  1. 手动新建,不要使用bat文件新建,出现错误未能解决:tesseract Deserialize header failed:....
  2. 里面编辑 chi_wzeros.font.exp0.lstmf 的文件路径
chi_sim.training_files.txt文件内容展示

进行训练,生成_checkpoint文件

  1. 在根目录下新建output文件(如果想直接生成在根目录下忽略该步骤)
  2. 下面的指令可自己新建bat文件运行或者直接打开CMD命令符窗口运行
  3. --model_output最后的【\output\】为文件夹名称,【train_output】为训练数据的文件前缀
  4. 这步骤如果出现错误的,优先检查chi_sim.training_files.txt该文件路径是否正确,还有里面的文件内容是否正确,再次提醒这个chi_sim.training_files.txt要手动创建,如果有谁解决bat创建问题请告诉我,感谢!
  5. 这里的训练结果rate一定要低,如果太高自行调整--max_iterations参数
lstmtraining --debug_interval -1 --max_iterations 100 --continue_from="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_sim.lstm" --model_output="E:\L\Other\TesseractOCR\TesseractOcrTrain\output\train_output" --train_listfile="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_sim.training_files.txt" --traineddata="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_sim.traineddata"
image.png

合并训练结果,生成全新.traineddata文件,也就是自己的字体库

  1. 下面的指令可自己新建bat文件运行或者直接打开CMD命令符窗口运行
  2. --continue_from 上一步中生成_checkpoint文件路径
  3. --model_output 输出全新字体库的名称,这里叫:chi_wzeros.traineddata,可自定义
lstmtraining --stop_training --continue_from="E:\L\Other\TesseractOCR\TesseractOcrTrain\output\train_output_checkpoint" --traineddata="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_sim.traineddata" --model_output="E:\L\Other\TesseractOCR\TesseractOcrTrain\chi_wzeros.traineddata"
生成自己的字体库

使用代码重新验证前面错误的识别

结果正确了

文章参考:https://blog.csdn.net/m0_37693841/article/details/105672637

你可能感兴趣的:(Win 10下 TesseractOCR 5训练中文字体库与.Net Core中调用)