美文网首页开发技巧Android进阶之旅Android开发
Android手写识别 (Tesseract-OCR的使用)

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

作者: 3c2cf1f7612e | 来源:发表于2017-11-15 17:42 被阅读196次

    最近要做一个在手机屏幕上手写数字,然后识别其值,找了很久,最终还是确定要是使用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,准备图片


    1.png 2.png 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
    

    目录就便成为这样:


    7.png

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

    博客.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文件训练得到的字库文件了。 结果.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的使用)

        本文链接:https://www.haomeiwen.com/subject/lbkhvxtx.html