美文网首页
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项目中引入图片中的数字识别技术

    最近项目中需要实现拍照或从相册中选图,并截取图片某部分信息读取上面的数字和字母,耗了一天半才解决,也是醉了,现在写...

  • Swift 3.0 项目集成EasyAR Unity 2.0 S

    前言公司需要在原先Swift 3.0项目中引入EasyAR 的Unity SDK。这篇文章记录了集成过程和遇到的问...

  • 人脸识别技术

    人脸识别技术 (一) —— 基于CoreImage实现对静止图片中人脸的识别人脸识别技术 (二) —— 基于Cor...

  • R.swift 注意点(忽略 xib 等)

    R.swift 是 swift 项目中常用图片资源框架,但是不仅仅识别图片资源,它还会识别你的 xib,file ...

  • Object-C与Swift的混编

    关于swift与oc的混编分为两种情况: 1. 在swift项目中引入OC文件 在swift项目中使用oc的时候需...

  • 【混编】Xcode Objective-c swift 混编,s

    Swift autocomplete Xcode 8Objective-c工程中使用Swift 在项目中引入了Sw...

  • OC、Swift混编

    在OC项目中,有可能会遇到需要引入Swift写的第三方库。在Swift项目中,也有可能会遇到需要引入OC写的第三方...

  • iOS Swift基础—Swift 与 OC 混编

    1.OC 项目中,引入 Swift 文件 1.1 Swift文件中使用OC 文件 【第1步】创建一个Swift 文...

  • 科研管理工作小结。

    模式识别。人工智能,计算机研究。 模式识别可用于文字和语音识别。 语音识别技术。生物认证技术数字水印技术。

  • R.swift 的使用

    在项目中引入 R.swift,更安全的获取资源 什么是 R.swift 介绍 R.swift 前,我们先看看 R....

网友评论

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

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