一、简介

针对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的CheckBox控件的点击效果布局文件
  2. Android 混淆提示 java.io.FileNotFoundException: ...\proguar
  3. Android Native Browser下载存储路径选择
  4. 利用第三方jar包jaudiotagger实现与MediaMetadataRetriever类似
  5. 在Android中实现文件读写
  6. Android里解析AndroidManifest.xml的java文件
  7. android 文件系统结构及其引导
  8. Android中彩信文件的读取
  9. Android 上传图片到服务器(多文件上传)

随机推荐

  1. Android -- 插件化
  2. animation动画
  3. Android Camera2 Mediacodec编码
  4. Joggler索引页
  5. android 调节媒体音量
  6. Android 实现图片的放大缩小及左右滑动(
  7. Java finished with non-zero exit value
  8. Android OTA 增量升级失败的问题
  9. Drawable、Bitmap、byte[]之间的转换 (转
  10. Android Drawable绘图