安卓OCR之数字英文扫描识别

本文介绍了一个关于证明编号录入的项目需求,通过使用Tesseract OCR引擎实现数字和英文的扫描识别。文章详细记录了从选择OCR引擎、编译源码到集成识别功能的全过程,并结合zxing库实现了类似二维码扫描的识别效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓OCR之数字英文扫描识别

项目有个需求,有关证明的编号录入比较繁琐。基于支付宝可以扫描识别银行卡号,我觉得通过扫描并识别可以达到这一需求,以下文(dan)章(teng)即来源于此。

无一例外的,需要图片识别就必须用到OCR引擎,还必须是开源的(逃...那目标就很明确了,google/百度之,发现谷歌大厂有一个Tesseract项目(基于C++),兴奋之余遂继续寻找其android分支,好在终于找到了tesstwo。开始干活^0^

...

...

...

其实并没有,机缘巧合下我在网上找到一个很有用的demo(需要FQ),它的效果是这样的:demo效果

于是,我下载其源码,试图在本地重现一下。但悲剧的是,这个demo是基于gradle构建的,虽然我试遍了IDEA和Android Studio,还是不行,遂作罢。

回到最初,将tesstwo源码编译出.so文件才是当务之急。在试过这篇博客中的方法后,不行...继续寻觅,终于我在安装了NDK的Android Studio中编译成功,编译好的库文件有多个,取armeabi目录中的全部so文件。

接下来,在Eclipse里新建项目(原谅我实在不会gradle),使用上述demo的代码,并引入编译好的so文件(记得带着armeabi目录),除除错,再运行一下~好了,终于看到了gif中的效果。

到这里算是实现了一大步/一小步,但这个demo不是扫描自动识别的,我们需要类似于二维码扫描识别的效果。自然而然的,我想到了zxing(又是谷歌大厂的)。

类似于这种扫描+识别的功能,我觉得应该是这样一个流程

对焦→拍照→裁剪→有效部分→调用算法识别→成功/失败→返回结果/继续对焦

扒出项目中zxing的源码看了一遍,印证了我的猜想。那么问题就很简单了,我们只需要改动裁剪和调用的算法就能达到目的了。

裁剪这部分在zxing/camera/CameraManager.java中的getFramingRect()方法中,设定其宽高即可(其实就是取景框的宽高)。

至于修改调用的算法则是在DecodeHandler.java中的decode()方法中,在此方法中我们会得到一个PlanarYUVLuminanceSource类的实例,调用该实例的renderCroppedGreyscaleBitmap()方法就会返回相应的BitMap对象,有了该对象之后,我们就可以使用tesstwo的API(或者上述demo对tesstwo的API的封装tessEngine)得到识别后的结果。如果结果与我们的预期符合(我传入一个正则表达式来实现),就可以将结果返回了。结果返回的过程以及接受结果的方法handleDecode()也需要一些处理,在此不再赘述。

插一句题外话,现在很多工具都是需要linux/unix环境支持,虽然在windows中有相应的工具模拟,但不是不方便就是坑比较多,总归不好使。不过现在win10有个自带的ubuntu子系统,大家可以试试~~

转载于:https://www.cnblogs.com/asingingfish/p/6196638.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值