一、简介

针对Android,使用的是Tesseract的封装开源项目tesstwo

tessdata:字体识别库(chi_sim.traineddata 中文简体,chi_tra.traineddata 中文繁体,eng.traineddata 英文库)

二、使用

1、首先在gradle中引入tess-two:implementation ‘com.rmtheis:tess-two:9.0.0’

2、在手机的根目录创建一个tesseract文件夹,里面再创建一个tessdata文件夹,tessdata文件夹就是存放 tessdata字体识别库中下载的字体文件,字体文件必须要有,并且tessdata文件夹的名称不能变,必须是tessdata。

3、创建Activity

@Overrideprotected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //点击按钮开始识别        ocrBtn = (Button) findViewById(R.id.test_orc_app_btn);//将结果显示在TextView中        showTv = (TextView) findViewById(R.id.test_orc_app_show_tv);        ocrBtn.setOnClickListener(this);}@Overridepublic void onClick(View view) {        switch (view.getId()){            case R.id.test_orc_app_btn:                orcText();            break;        }}private void orcText() {    //初始化TessBaseAPI对象    mTess = new TessBaseAPI();    //语言:(chi_sim简体中文/eng英文等等,具体的语言可以去tessdata字体识字库中下载)    String language = "chi_sim";    //    File dir = new File(ROOT_PATH_LANGUAGE + "tessdata/");    if (!dir.exists()){        Log.e("tag","文件不存在");    }   //第一个参数存放语言的文件夹路径,第二个参数为语言    mTess.init(ROOT_PATH_LANGUAGE, language);    mTess.setDebug(true);     //图片路径    String path = ROOT_PATH_PHOTO + 1 + ".png";File mFile=new File(path);    //若该文件存在    if (mFile.exists()) {Bitmap bitmap=BitmapFactory.decodeFile(path);mTess.setImage(bitmap);}mTess.clear();    mTess.end();//将识别的结果显示在TextView    showTv.setText(str);}

由于识别的过程需要一定时间,建议将识别的方法放到线程中去做。

三、字体训练

由于tesseract的中文语言包“chi_sim”对中文手写字体的识别正确率不高,需要针对特定情况用自己的样本进行训练,提高识别率.

步鄹如下:

1、下载并安装tesseract

https://github.com/UB-Mannheim/tesseract/wikiwindows下可以直接下载exe文件,进行安装。安装比较简单安装完成之后需要添加2个环境变量:<1> 把安装路径“C:\Program Files (x86)\Tesseract-OCR”添加到环境变量里,方便在命令行里直接调用;<2> 把语言包所在路径“C:\Program Files (x86)\Tesseract-OCR\tessdata”添加到环境变量里, 变量名称为“TESSDATA_PREFIX”,不添加语言包路径的话调用tesseract识别会报错误

2、jTessBoxEditor下载安装

jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/各个版本有两个,其中带FX的版本,才支持中文字符编辑。安装包解压出来之后双击里边的“jTessBoxEditor.jar” 即可运行。

3、样本图片准备

理论上训练样本数量越多越好

4、使用 jTessBoxEditor 生成 训练样本的 “合并”(Merge)图片

打开 jTessBoxEditor ,选择 Tools -> Merge TIFF,打开对话框,选择训练样本所在文件夹,并选中所有要参与训练的样本图片。点击 “打开” 之后弹出保存对话框,还是选择在当前路径下保存,文件命名为 “chi_my.font.exp0.tif” ,格式只有一种 “TIFF” 可选。tif文件命名格式[lang].[fontname].exp[num].tif:lang是语言名称,自定义 fontname是字体名,自定义num一般为0

5、生成box文件

在上一步骤中生成的 “chi_my.font.exp0.tif” 文件所在路径下打开命令行程序,输入命令:tesseract chi_my.font.exp0.tif chi_my.font.exp0 -l chi_sim batch.nochop makebox在当前路径下就会生成.box文件。box文件和对应的tif一定要在相同的目录下,不然后面打不开。

6、使用 jTessBoxEditor 调整 .box 训练文件

打开 jTessBoxEditor ,点击 Box Editor -> Open 打开生成的 “chi_my.font.exp0.tif” ,会自动关联到 “chi_my.font.exp0.box” 文件。并校正。可以调整字符的内容、位置、宽高等信息。调整所有样本后点击 File -> Save as保存即可。

7、 创建一个font_properties文件

在tif文件所在的目录下创建一个名称为font_properties文件,内容为:font 0 0 0 0 0 表示默认普通字体其中font必须和tif文件(chi_my.font.exp0.tif)名中的font一致。

8、编写一个脚本文件rem.bat,内容:

   echo Run Tesseract for Training..   #执行后在当前文件夹下生成 chi_ym.font.exp0.tr训练文件。   tesseract.exe chi_my.font.exp0.tif chi_my.font.exp0 nobatch box.train   echo Compute the Character Set..   #执行之后在当前文件夹下生成 “unicharset” 文件   unicharset_extractor.exe chi_my.font.exp0.box   #执行后面的两句后会生成4 个文件(inttemp、pffmtable、normproto、shapetable)   mftraining -F font_properties -U unicharset -O chi_my.unicharset chi_my.font.exp0.tr   echo Clustering..   cntraining.exe chi_my.font.exp0.tr   #重命名生成的4个文件   echo Rename Files..   rename normproto chi_my.normproto   rename inttemp chi_my.inttemp   rename pffmtable chi_my.pffmtable   rename shapetable chi_my.shapetable   echo Create Tessdata..   #执行之后会生成chi_my.traineddata语言包,这句话最后有个点,不能少   combine_tessdata.exe chi_my.

将生成的 “chi_my.traineddata” 语言包文件拷贝到 tessdata 目录下,就可以用它来进行中文字符识别了。

更多相关文章

  1. Android程序调试时生成main.out.xml文件
  2. Android(安卓)文字链接 文字点击时的背景颜色
  3. Android的CheckBox控件的点击效果布局文件
  4. Android(安卓)ScrollView用法
  5. 修改android studio 新建项目的build.gradle的仓库源
  6. android apk签名生成及配置
  7. Android(安卓)混淆提示 java.io.FileNotFoundException: ...\pr
  8. Android系统在超级终端下必会的命令大全(adb shell命令大全)
  9. NPM 和webpack 的基础使用

随机推荐

  1. 使用Jenkins一键打包部署前端应用,就是这
  2. 大家心心念念的权限管理功能,这次安排上了
  3. Github标星19K+Star,10分钟自建对象存储服
  4. 前后端分离项目,如何优雅实现文件存储!
  5. 手把手教你搞定权限管理,结合Spring Secur
  6. 前后端分离项目,引入 Spring Cloud Gatewa
  7. 使用Seata彻底解决Spring Cloud中的分布
  8. 手把手教你搞定权限管理,结合Vue实现菜单
  9. mall在Linux环境下的自动化部署(基于Jenki
  10. 商品SKU功能设计与优化