Android图文识别
16lz
2022-03-05
一、简介
针对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 目录下,就可以用它来进行中文字符识别了。
更多相关文章
- Android程序调试时生成main.out.xml文件
- Android(安卓)文字链接 文字点击时的背景颜色
- Android的CheckBox控件的点击效果布局文件
- Android(安卓)ScrollView用法
- 修改android studio 新建项目的build.gradle的仓库源
- android apk签名生成及配置
- Android(安卓)混淆提示 java.io.FileNotFoundException: ...\pr
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
- NPM 和webpack 的基础使用