美文网首页
TesseractOCRiOS(光学字符识别)的简单使用

TesseractOCRiOS(光学字符识别)的简单使用

作者: TheLazyCoder | 来源:发表于2017-07-24 18:11 被阅读303次

    首先看一下百度百科对于OCR的介绍:
    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

    百科的介绍很专业,总结起来就是一句话,将图像的文字转化成为字符。这样大家应该会想到我们在日常使用到的身份证识别、银行卡识别、文档识别……
    我只使用过TesseractOCR,对于其他的很多类似库没有过多的了解。这一篇文章也只是为了可以保存一下现在自己查到的一些资料和一些简单的使用方法,因为时间有限最近不能继续研究OCR,就当是保存一下当前的研究进度吧,也希望给别人一些帮助。闲话少说,直接先说一下应用流程。
    第一步:
    我使用的是cocopod,直接在pod下来“TesseractOCRiOS“就可以了。这一步我没有碰到什么坑,没啥好说的,直接跳过了。
    第二步:
    导入TesseractOCR的识别字库。这一步有一些需要注意的点: 第一,你必须以文件的形式导入到工程中,文件夹的名字必须是“tessdata“。这个也不用解释很多,一般程序语言都是固定的文件夹来寻找文件。上一个图防走丢。

    这里写图片描述 第二,你所有的字库都必须放在“tessdata“文件夹内。 附上一个GitHub的字库集合,需要字库的可以自己下载一下,字库很多。当时我们常用的只有两种,一个是“eng“英文、一个是“chi_sim“中文。 GitHub地址:https://github.com/tesseract-ocr/tessdata
    第三步:
    到现在准备工作基本就完毕了,你想要在那一个页面识别文字,就导入头文件 TesseractOCR/TesseractOCR.h。 这个时候你编译项目的话,应该会爆一个C++编译的错误,因为TesseractOCR是C++编写的,所以你再引用关于TesseractOCR相关文件时,你这个文件的.M文件要把后缀改成.MM。这样才会编译通过。
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ //初始化G8Tesseract类,为文字识别做准备 
    G8Tesseract *CardTesseract = [[G8Tesseract alloc] initWithLanguage:@"eng+chi_sim"]; 
    CardTesseract.image = [Image g8_blackAndWhite]; 
    CardTesseract.image = Image;
     //开始识别 [CardTesseract recognize]; });
    

    现在我来简单说一下,我们在最开始初始化了一个识别类,最后@”eng+chi_sim”就是同时识别英文和中文的意思,如果你要在识别更多的语言,可以用+号继续加。
    “g8_blackAndWhite“这个图片的方法是一个类似于TesseractOCR内置的一个图像滤镜的方法,说白了就是一个灰化的封装方法。你如果是识别英文和数字,可以考虑使用,因为这样你的识别率会高一点。但是如果是汉字的话,不建议使用。因为这个灰化的过程会让汉字失真,不利于一些汉字的识别。
    G8Tesseract这个类还有对应的代理,可以通过代理获取到当前的识别进度。 这个类还有很多枚举属性

    engineMode:
    TesseractCubeCombined: 最快最不精确, 
    .CubeOnly: 慢点但更加精确, 采用人工智能; 
    .TesseractCubeCombined: 同时包含前两者, 最精确也最慢
    maximumRecognitionTime:最长的一个识别时间
    G8PageSegmentationMode:分页识别的多种模式
    

    **还有很多的可控方法,大家可以看一下

    G8RecognitionOperation.h、
    G8RecognizedBlock.h、
    G8Tesseract.h、
    G8Tesseract.h、
    G8Tesseract.h、
    UIImage+G8Filters.h、
    UIImage+G8FixOrientation.h
    

    这几个给iOS开发者抛出的文件。当然有C++底子的也可以直接调用C++的方法。** 有问题请私信,有错误敬请指正,谢谢!

    相关文章

      网友评论

          本文标题:TesseractOCRiOS(光学字符识别)的简单使用

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