美文网首页iOS开发iOS开发记录iOS学习开发
iOS Tesseract 中文字库训练(一)

iOS Tesseract 中文字库训练(一)

作者: 随行的羊 | 来源:发表于2018-06-28 09:36 被阅读21次

    项目中需要用到汉字识别,先前的研究中,我已经弄出了所要识别汉字的范围,并将这些汉字的像素弄成二值0或者255,文字色值为0,背景色值为255。

    我尝试使用像素点的值来识别汉字,但这其实是比较困难的,这需要有强大的算法基础支撑,短时间内完成对我来说是一项艰巨的挑战。

    为此,我选择了Tesseract,事实证明它是我想要的。

    我在百度上输入“tesseract 中文”,出现了很多关于字库训练的文章,这对我帮助很大,其中有一篇是这个:《Tesseract-OCR的简单使用与训练》,我跟着他说的步骤一步步做下来。

    首先,我需要有一台windows电脑,系统是10,然后安装Tesseract 3.02,很不幸,下载链接跳转到了CSDN,需要收费才能下载软件,幸好我的小伙伴中有人是CSDN的会员,可以免费下载。安装过程也没有障碍,你只需要跟随系统提示一步步安装就可以了。

    一切准备就绪,我按照教程的步骤一步步走下来,没有任何问题,我希望所有人都按照教程里面所写的命名操作,不要自作聪明或者画蛇添足,如果没什么问题的话,你将看到最终正确的结果。

    得到正确的结果,这让我异常兴奋,但战争才刚开始。我把自己训练好的字库放进了iOS工程中,然后使用这个字库来识别教程中的png图片。奇迹出现了,数字被正确地识别出来,我非常高兴。但还没结束……

    再继续讲下去之前,我需要提到一个非常重要的命令:

    tesseract test.png output_1 –l eng
    
    是的,这个是教程中的命令,这个命令可以用来检测所提供图片是否可以用来训练,我提供了一张白底黑字图,黑字充满着整个图片,就像这样子: 7

    打入上面的命令后,控制台命令提示:

    empty page!
    
    空页面?只要出现这个提示,后续步骤就难以进行下去,而我换成教程中的图片就正常。我观察了两张图片的异同,发现教程中的图片有较大的留白,于是,我把图片改成这样: 7

    终于正常了。所以在即将训练之前,请先打一下上面的命令试一试。

    这个Tesseract提供的是eng英文字库,而我需要识别汉字,这就意味着我需要有个中文字库,以前在研究Tesseract-OCR-iOS的时候,我使用的TesseractOCRiOS.framework是4.0.0最新版本,那个时候我为了寻找中文字库,花了好多时间,因为版本不同,运行的时候会报错,幸运的是,最后还是找到一个可以正常运行的,但字库的效果肯定是不理想的。

    当然,你也可以在安装Tesseract 3.02的时候,选择一个简体中文字库,怎么做?看这个图:

    简体中文字库

    勾选 additional language data,滑动滚动条,找到“简体中文”并勾选就可以了。内嵌下载可能比较慢,实在不行,你可以去网上随便下载一个试试,多研究几次,失败是成功之母。

    假设你根据上面的步骤已经弄好了中文字库,并确保Tesseract的版本是3.02后,还有最后一步,就是更换教程,因为之前的教程讲的是英文,所以我要换个中文的,我选择了这篇文章《验证码识别》。事实证明它给我带来了灾难。

    训练开始了,我使用PS创建了300X300像素的白色图(PS是很重要的工具,我建议人人都应该懂点它),里面弄上几个黑色字:“浙江皮革厂”。我还是按照原教程操作下来,发现中文文字并不能在图中红色区域中正常显示,我觉得这是个问题,但我还是继续往下走。 汉字不能正常显示

    然而后续进展并不顺利,甚至出现了一些我在StackOverflow上也找不到很好解决方案的问题。关于“汉字不能正常显示”,我以为是jTessBoxEditor的问题,因为我没有使用最新版本,所以我换成了jTessBoxEditor 2.0版本。而其他问题呢,我在StackOverflow找不到满意的答案,我也不知道如何解决。

    我决定更换成这个教程《Tesseract训练中文字体识别》,因为教程中使用的是Tesseract 4.0.0,所以我决定也更换Tesseract版本,你可以到这里下载Tesseract各个版本下载地址

    安装完Tesseract 4.0.0后,在控制台输入命令 tesseract,却提示

    “tesseract”不是内部或外部命令,也不是可运行的程序
    

    在windows上报这个错,基本就是环境变量的问题了,于是我将Tesseract 4.0.0的安装路径加入到windows10的环境变量中,然后重启,就恢复正常了。

    我仍然按照教程一步步走下来,我发现即使换成jTessBoxEditor 2.0版本,汉字依旧无法正常显示,这个问题和版本无关,我开始在jTessBoxEditor的界面菜单随便点一点,我发现菜单Setting中有个Font,可以修改字体,我改成黑体后,汉字终于正常显示了,总算是解决了一个问题。

    继续往前走,在进行到教程步骤五的时候,出现了问题,事实上需要修改的有5个文件,而不是4个文件,还有一个文件unicharset也需要进行修改,改成chi.unicharset就没问题了。每个步骤都完成之后,会生成chi.traineddata文件,然后跟着他的步骤,应该不会有什么问题了。

    我把这个训练好的字库放进iOS工程中,很不幸的,程序在识别过程中报错了,错误提示为:

    actual_tessdata_num_entries <= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file ..\ccutil\tessdatamanager.cpp, line 55
    

    我在网上找到了这个问题的答案,他们说字库和Tesseract的版本对应不上。基于此我首先想到了,应该是Tesseract 4.0.0的问题,因为至少使用3.02版本是正常的。带着这个疑问,我把Tesseract 4.0.0卸载了,重新安装3.02版本,将刚才进行的操作重新做一遍,生成了新的chi.traineddata文件。我把文件放入iOS工程中,正常了!Oh my god!识别成功了,这让我欣喜若狂!

    工作总算有点进展了,我了解我还有很长的路得走,我也会继续走下去!

    相关文章

      网友评论

        本文标题:iOS Tesseract 中文字库训练(一)

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