Android手写识别 (Tesseract-OCR的使用)

最近要做一个在手机屏幕上手写数字,然后识别其值,找了很久,最终还是确定要是使用Tesseract-OCR库来做,而Tesseract-OCR需要我们不断训练来使用我们的App.

用到的工具:

Tesseract-OCR:https://sourceforge.net/projects/tesseract-ocr-alt/files/tesseract-ocr-setup-3.02.02.exe/download
[jtessboxeditor] Ver 1.5版本https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/jTessBoxEditor-1.5.zip

(我一开始用Ver1.7的,会有一些问题的,所以建议使用1.5 )

1,准备图片


Android手写识别 (Tesseract-OCR的使用)_第1张图片
1.png
Android手写识别 (Tesseract-OCR的使用)_第2张图片
2.png
Android手写识别 (Tesseract-OCR的使用)_第3张图片
3.png

2, 打开jtessboxeditor 点击 train.bat


4.png

点击Tools->Merge Tiff,并把生成的tif合并到目录下 并且命名为langyp.fontyp.exp0.tif

3, 然后用cmd 生成box文件 { 切换到D盘 cd /d d: }
5.png

{这个是需要切换到文件目录下的}运行命令:

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

目录就便成为这样:


Android手写识别 (Tesseract-OCR的使用)_第4张图片
7.png

切换到jTessBoxEditor工具的Box Editor页,点击open,打开前面的tiff文件langyp.fontyp.exp0.tif,工具会自动加载对应的box文件。{如果没有左边没有加载数据出来,可以试试重启电脑}

Android手写识别 (Tesseract-OCR的使用)_第5张图片
博客.png

点击左边的char列 修改我们要改的值。

修改完成,点击save按钮

在cmd里面输入 echo fontyp 0 0 0 0 0 >font_properties 生成font_properties文件[或者手动新建font_properties 文件 ,在里面输入font 0 0 0 0 0 ,最后不要后缀名了]

接着便是复制下面的代码到cmd ,生成字库文件

tesseract num.font.exp0.tif num.font.exp0 nobatch box.train
unicharset_extractor num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
cntraining num.font.exp0.tr
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
combine_tessdata num.

如无意外,本地下即可看到num.traineddata文件,就是我们使用自定义字体图片tif文件训练得到的字库文件了。
Android手写识别 (Tesseract-OCR的使用)_第6张图片
结果.png
 /*识别手写的图片然后转化为图片识别
    * */

    private void RecognitPicture() {
        //sd卡路径
         final String SD_PATH= Environment.getExternalStorageDirectory().getPath()+ "/tesseract/";
         final String SD_PATH2= Environment.getExternalStorageDirectory().getPath();

        File dir = new File(SD_PATH + "tessdata");
        if (!dir.exists()){
            dir.mkdirs();
        }
        TessBaseAPI baseApi = new TessBaseAPI();
        //记得要在你的sd卡的tessdata文件夹下放对应的字典文件,例如我这里就放的是eng.traineddata,这个需要在网上下载
        baseApi.init(SD_PATH, "eng");
        baseApi.setPageSegMode(TessBaseAPI.PSM_AUTO);
        //记得要在对应的文件夹里放上要识别的图片文件,比如我这里就在sd卡根目录放了img.png
        baseApi.setImage(new File(SD_PATH2+"/img.png"));
        final String result= baseApi.getUTF8Text();
        //这里,你可以把result的值赋值给你的TextView
        Toast.makeText(this,"识别的结果:"+result,Toast.LENGTH_SHORT).show();
        baseApi.end();
    }

参考:
https://www.zybuluo.com/xxzhushou/note/807167

你可能感兴趣的:(Android手写识别 (Tesseract-OCR的使用))