美文网首页
swift项目中引入图片中的数字识别技术

swift项目中引入图片中的数字识别技术

作者: 浅浅_e90e | 来源:发表于2019-02-13 16:12 被阅读0次

    最近项目中需要实现拍照或从相册中选图,并截取图片某部分信息读取上面的数字和字母,耗了一天半才解决,也是醉了,现在写个博客记录一下解决过程,谁如果有该需求,也可做个参考。

    一、我的项目是使用cocopods管理第三方的,因此图片识别的第三方库TesseractOCRiOS(光学字符识别)也是通过cocopods导入的

    在podFile中添加第三方库

    pod 'TesseractOCRiOS'

    如果在pod进来的第三方库文件夹中没看到这个framework,关掉工程重新打开就看到了

    到项目的target中,进入General搜索 Linked Frameworks and Libraries ,在里面查看有无TesseractOCR.framework,没有就点击下方+号主动添加进来,并添加CoreImage.framework 和libc++.tbd依赖库, 如下如所示

    第二步,导入语言库

    下载Tesseract 的语言包,git地址:https://github.com/tesseract-ocr/tessdata,由于该语言库文件夹太大,当时我们常用的只有两种,一个是“eng“英文、一个是“chi_sim“中文。 如果只需要用到英文和数字识别,tessdata文件夹中只需要留eng.traineddata这一个文件即可,其他的语言库文件都可以删除,将tessdata 文件夹从 Finder 中拖进 Xcode 项目中

    注意:不要勾选Create groups,需要勾选Create folder reference,将文件夹路径引入,确认在 Build Phases 的 Copy Bundlle Resources 下面有 tessdata 一项,否者运行时会报错,说在 tessdata 的父目录中未设置 TESSDATA_PREFIX 环境变量。

    在 项目 target 的 Build Settings 中,找到 C++ Standard Library,将它设置为 Compiler Default。然后找到 Enable Bitcode,将它设置为 NO。

    类似地,回到左边的项目导航器中,选择 Pods 项目,找到 TesseractOCRiOS target 的 Build Settings,找到 C++ Standard Library 将它设置为 Compiler Default。然后找到 Enable Bitcoe 将它设置为 NO。然后搜索Other Linker Flags,在所有已有的key后面添加-lstdc++

    二、使用识别技术

    由于项目是swift,而该framework是oc代码编写的,所以要使用需要桥接头文件,在桥接文件中添加头文件,引入第三方文件

    #import <TesseractOCR/TesseractOCR.h>

    在需要使用识别技术的ViewController里引入头文件

    import TesseractOCR

    实现代码:在选择图片或拍照的代理方法中拿到image,并传入到识别方法中(该方法自己定义,传入UIImage类型的参数,参考文章下面的博文链接,处理一下图片尺寸)

    // 1if let tesseract = G8Tesseract(language: "eng") {

      // 2  tesseract.engineMode = .tesseractCubeCombined

      // 3  tesseract.pageSegmentationMode = .auto

      // 4  tesseract.image = image.g8_blackAndWhite()

      // 5  tesseract.recognize()

    //拿到了识别到的文字,自己控制显示方式

      // 6  let text = tesseract.recognizedText

    }

    上述代码运行会报错,代码崩溃在framework的文件中,大概崩溃原因提示是:unable to init CubeRecoContext object

    查了Stack Overflow,解决方法是将 tesseract.engineMode改成.tesseractOnly,这样就可以运行了

    Stack Overflow的问题描述和解决办法截图:


    至此差不多就没问题可以用了,我参考了好几个博文,很有帮助,链接如下,如文章又不对的地方,烦请留言指正,谢谢!

    Tesseract OCR(光学字符识别)教程

    iOS 身份证识别之TesseractOCR简单实用

    iOS身份证号码识别

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

    Tesseract OCR iOS 教程

    相关文章

      网友评论

          本文标题:swift项目中引入图片中的数字识别技术

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