1.OCR简介

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;

2.Tesseract简介

Tesseract是Ray Smith于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供命令行工具。
现阶段的Tesseract由Google负责维护,是最好的开源OCR Engine之一,并且支持中文。

主页地址:https://github.com/tesseract-ocr

在Tesseract的主页中,我们可以下载到Tesseract的源码及语言包,常用的语言包为

中文:chi-sim.traineddata

英文:eng.traineddata

3.Tess-two

因为Tesseract使用C++实现的,在Android中不能直接使用,需要封装JavaAPI才能在Android平台中进行调用,这里我们直接使用TessTwo项目,tess-two是TesseraToolsForAndroid的一个git分支,使用简单,切集成了leptonica,在使用之前需要先从git上下载源码进行编译。

3.1.1 项目地址

Tess-two在git上地址为:https://github.com/rmtheis/tess-two

3.1.2 编译

我编译使用的环境:

  • Eclipse 4.2.1
  • ADT 23.0.2
  • NDK R10
  • Cygwin

NDK环境的具体配置及Cygwin的安装方法可以参照这篇博客:Windows下Android NDK环境搭建

配置好NDK环境后,将从git上下载的Tess-two进行解压,放置的路径是: E:\CooGame\OCR\TessTwo源码,下边开始进行编译:

  • 第一步:在Cygwin软件中使用cd命令打开Tesstwo的根目录。
  • 第二步:切换到tess-two目录下的jni目录
  • 第三步:输入命令进行编译

编译需要耗费挺长时间,编译完成后,会在tess-two目录下生成libs文件夹,其中包含了编译生成的.so文件,可以进行使用。

也可以直接下载我编译好的包,这里给出下载地址,我测试了一下,是没有问题的。

tess-two下载

4.tess-two使用

编译完成后,新建工程,将之前编译好的libs文件夹下的armeabi和armeabi-v7a文件夹拷贝至新建工程的libs文件夹下,将tess-two工程中src文件夹下的两个包直接拷贝至代码中或者打成jar进行使用。工程如下:

识别函数:

/*** 识别图片中文字,需要放入异步线程中进行执行* * @param bitmap* @return* @throws IOException*/public String parseImageToString(String imagePath) throws IOException{// 检验图片地址是否正确if (imagePath == null || imagePath.equals("")){return TessErrorCode.IMAGE_PATH_IS_NULL;}// 获取BitmapBitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 2;Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);// 图片旋转角度int rotate = 0;ExifInterface exif = new ExifInterface(imagePath);// 先获取当前图像的方向,判断是否需要旋转int imageOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);Log.i(TAG, "Current image orientation is " + imageOrientation);switch (imageOrientation){case ExifInterface.ORIENTATION_ROTATE_90:rotate = 90;break;case ExifInterface.ORIENTATION_ROTATE_180:rotate = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:rotate = 270;break;default:break;}Log.i(TAG, "Current image need rotate: " + rotate);// 获取当前图片的宽和高int w = bitmap.getWidth();int h = bitmap.getHeight();// 使用Matrix对图片进行处理Matrix mtx = new Matrix();mtx.preRotate(rotate);// 旋转图片bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);// 开始调用Tess函数对图像进行识别TessBaseAPI baseApi = new TessBaseAPI();baseApi.setDebug(true);// 使用默认语言初始化BaseApibaseApi.init(TessConstantConfig.TESSBASE_PATH,TessConstantConfig.DEFAULT_LANGUAGE_CHI);baseApi.setImage(bitmap);// 获取返回值String recognizedText = baseApi.getUTF8Text();baseApi.end();return recognizedText;}

使用之前,需要先下载数据包到/mnt/sdcard/tesseract/目录下,下载地址在上边文章中已经有提到。可以根据需要识别的语言进行下载

数据包下载地址

经过测试,发现tess-two的识别率不是很高,对一般电脑输入文字生成的图片,识别度较高,但对于手写问题,识别率较低,可能需要进一步进行训练。下边是我识别的结果截图:

5.总结

总结tess-two的使用方法,大致可分为以下几步:

  1. 下载并解压tess-two
  2. 编译,获得.so文件,或者直接下载我编译好的tess-two文件,可以不用下载tess-two源码
  3. 新建工程测试,训练

6. 代码

我是代码

Android平台OCR工具之Tess-two使用相关推荐

  1. Android平台OCR软件,Android平台OCR工具TessTwo工程

    [实例简介] Android平台下使用TessTwo实现OCR功能,博客地址:http://blog.csdn.net/duanbokan/article/details/50738711 [实例截图 ...

  2. 手游开发Android平台周边工具介绍

    1.渠道接入 主要是需要接入各平台的登录.充值接口,各家SDK又不统一,Android渠道都是鱼龙混杂,就算小渠道你看不上,但量多了,加起来也还可观,所以大家都拿出吃奶的尽去铺渠道.国内几大主要的An ...

  3. github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...

    HeapSnap 1.HeapSnap 是什么 HeapSnap 是一个定位内存泄露的工具,适用于Android平台. 主要特性如下: 对系统负载低 不需要修改目标进程的源代码 支持Andoroid上 ...

  4. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

  5. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )

    文章目录 一.Visual Studio 中创建 Makefile 项目 二.配置 Makefile 文件 三.配置 Android.mk 四.配置 Application.mk 五.主函数源码 六. ...

  6. android智能识别技术,基于Android平台的OCR识别技术研究与实现

    摘要: 随着智能手机市场的迅猛发展和普及,Android成为所占市场份额最高的手机操作系统,与此同时,人们希望在手机终端享受更丰富舒适的应用功能.将OCR和Android智能终端相结合,依托光学字符识 ...

  7. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

    市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(A ...

  8. Rockchip RK3588 Android平台固件烧写工具汇总

    Rockchip RK3588 Android平台固件烧写工具汇总 文章目录 Rockchip RK3588 Android平台固件烧写工具汇总 开发工具AndroidTool桌面版 适用场景 功能列 ...

  9. android mmi自动安装,Android平台MMI自动化测试工具通信协议.pdf

    File name: Android 平台MMI 自动化测试工具通信协议 Version: V1.0 Date:2013/03/07 Author: Min Liu Android 平台MMI 自动化 ...

最新文章

  1. 【深度学习理论】(4) 权重初始化,Batch Normalization
  2. 一篇超级详细的jsp+servlet+jdbc+mysql检验登录操作(IntelliJ IDEA)
  3. java规定数组的下标_Java数组元素下标的范围是
  4. 10个常用的Python图像处理工具,非常全了
  5. poj3713 Transferring Sylla 枚举+tarjan判割点
  6. QT分页控件,开源,供大家使用
  7. JAVA泛型--待续
  8. Linux中的redis集群搭建
  9. 【Hadoop】同步集群时间
  10. docker 系列 - 基础镜像环境和Docker常用命令整理
  11. 做转移FSMO角色记录
  12. [PYTHON] 核心编程笔记(11.Python函数和函数式编程)
  13. 企业级即时通讯通信平台的实现
  14. (十五)TcpClient
  15. cpu超线程优缺点_超线程对游戏性能会影响?
  16. CIO40: IT中年男修身修性修心之王阳明
  17. 计算机新功能,利用win7新功能提升工作效率
  18. SAR成像处理算法_CS算法_原理
  19. C++Error2208:…尝试引用已删除的函数
  20. java检索电脑的所有图片_查找电脑里重复的照片

热门文章

  1. [NSSRound#3 Team]funnypng
  2. 内网安全检查/渗透总结-转
  3. adb 报错 device unauthorized
  4. [视频]往前一步是幸福
  5. 不同级别专精特新企业的申报条件是什么?
  6. mysql.user表_mysql.user表详解
  7. 12.05—12.11java学习周记
  8. PostgreSQL是什么?
  9. CIO40知识星球:IT中年男减肥20斤
  10. ORB-SLAM2——Trackin线程