博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS--OCR图片识别
阅读量:6155 次
发布时间:2019-06-21

本文共 2105 字,大约阅读时间需要 7 分钟。

  应公司财务需求,要做一个收据识别功能。所以在网上搜索了下三方SDK,其中tesseract-ocr受到了大多数网友的推荐。我当然是前往https://github.com/gali8/Tesseract-OCR-iOS 进行sdk查看下载了。然后直接下载并不好用,各种缺包,不过开发者也是有心了,提供了完善的安装说明。

点击蓝色的Installation,可以按照官方说明文档进行pod 下载 

pod 'TesseractOCRiOS', '4.0.0'

根据文档所述,我们还需要拖入tessdata文件夹,里面有语言包,常用包括eng英文解析和chi_sim中文解析。我们可以前往谷歌进行下载,也可以在github Tesseract-OCR-iOS中,找到他们使用的tessdata文件夹,单独下载。然后将tessdata直接拖入项目中,这里需要注意的是,拖入的时候选择creater folder references。

  TesseractOCRiOS的使用非常简单,点开上面蓝色的 usage examples,就有包括swift在内的各种调用方式。需要注意的只有几点,一是

G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:@"eng+ita"];

@“eng+ita”代表会搜索多个文件解析(eng.traineddata和ita.traineddata),如果只想使用eng,就可以只用使用@“eng”;这个github项目是没有提供中文解析功能的,我们需要去下载chi_sim.traineddata导入项目中,导入需要注意到是:打开 项目,show in finder,然后将chi_sim直接放入tessdata文件中即可。如果使用后result为空,乱码,甚至于崩溃,可能是chi_sim版本不对,可以去搜索3.0.1的chi_sim,重新导入项目中使用。

  当然,某种情况下TesseractOCRiOS确实好用,我解析文档内容准确率极高,甚至于使用网上的解析银行卡和身份证也是相当可以的。但是,针对于油墨打印的发票内容,就有心无力了,各种解析乱码,错误,连数字都因为油墨扩散的原因解析错误。

  在查询了资料发现,ocr仅仅具备图片识别,意思就是需要使用我们处理好的图片进行识别,本身并没有对图片进行很好的处理,唯一的滤镜方式g8_blackAndWhite仅仅也是针对英文与数字,因此,我为工程导入了OpenCV,本想直接采用pod openCV,然后又是一个大坑,根本没发pod,没办法,前往官网,下载了opcv2.framework,导入到项目中。使用的第一件事就是enum(NO,。。。)出错,Expected identifier,NO这个define的宏无法解析,因为OC使用的是c语言方式解析,而openCV使用的C++编写。那么我们也只能采用混合编写模式了,将使用opencv控制器改为c++编译。

选择type方式为 C++ source;或者将文件名由.m改为.mm或.cpp

  另外exposure_compensate.hpp:66:12: Expected identifier 

同样的报错在blender里,解决:点到源代码处把NO改为NO_EXPOSURE_COMPENSATOR = 0,就好了

  当然,还有其他的错误,文件前缀为AV或_objc文件出现错误,一般是因为少导入了AVFoundtion,coreMedia,coreVideo,AssertsLibrary等框架。而使用opencv调用相册的时候,需要设置隐私权限提示。

NSPhotoLibraryUsageDescription
我们将要使用你的相册
NSPhotoLibraryAddUsageDescription
我们将要使用你的相册
NSAppleMusicUsageDescription
要使用到您的媒体库
NSCameraUsageDescription
我们将要使用你的相机

  使用opencv对拍照的图片进行 灰度处理,阀值处理,腐蚀:白色背景缩小,黑色扩大,区域设置等等功能,让图片更加清晰明显,便于识别。

  ps:坑爹的是,这并没有很好的解决油墨发票上数字文字不清晰,难以识别的问题,仅仅提高了识别成功率,但是并没有很大的实际作用。一句mmp不知当讲不当讲,为什么不打印成a4效果。后续有看到图片识别训练,需要服务器配合,以及使用各大公司收费ocr。

 

 

转载于:https://www.cnblogs.com/zhulilove/p/8117704.html

你可能感兴趣的文章
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>
[BTS] Could not find stored procedure 'mp_sap_check_tid'
查看>>