OCR识别的Android端实现
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的源码及语言包,常用的语言包为
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 使用
在你的Android项目中,修改build.gradle 文件,添加如下依赖,即可使用了
dependencies {
implementation 'com.rmtheis:tess-two:9.0.0'
}
Android 代码如下:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.os.SystemClock;
import android.util.Log; import com.googlecode.tesseract.android.TessBaseAPI; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException; /**
* ocr 识别截图文本
*
*/
public class Imagett {
private static String TAG = "IMAGETT";
private static final String DEFAULT_LANGUAGE = "chi_sim";
private static String text; /**
*
* @param imageFile 识别的图片文件
* @param language 识别的语言 chi_sim : 中文, eng:英文
* @param refresh 是否重新获取图片
* @return
*/
public static String imageToText(final String imageFile, final String language, boolean refresh){ //language :简体中文 chi_sim, 英文 eng
if (!refresh){
try {
return MyFile.readFile(CONST.TESSDATA + File.separator + "text.txt"); //文件读取操作
} catch (IOException e) {
e.printStackTrace();
}
}
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = BitmapFactory.decodeFile(imageFile);
TessBaseAPI tessBaseAPI = new TessBaseAPI();
tessBaseAPI.init(CONST.LOGPATH, language);
tessBaseAPI.setImage(bitmap);
text = tessBaseAPI.getUTF8Text();
// logUtil.i(TAG, "run: text " + System.currentTimeMillis() + text);
//识别的文本内容写入的文件中
try {
MyFile.writeFile(CONST.TESSDATA + File.separator + "text.txt", text, false); //文件写操作
} catch (FileNotFoundException e) {
e.printStackTrace();
} tessBaseAPI.end();
}
});
t.start();
//等待识别完成
while (t.isAlive()){
SystemClock.sleep(100);
}
return text;
}
}
实现的功能,将指定图片内的文字识别后输出的txt文件内
OCR识别的Android端实现的更多相关文章
- [Android]Android端ORM框架——RapidORM(v2.1)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...
- [Android]Android端ORM框架——RapidORM(v2.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...
- Java服务器对外提供接口以及Android端向服务器请求数据
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html 讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么 ...
- 【Android端 APP GPU过度绘制】GPU过度绘制及优化
一.Android端的卡顿 Android端APP在具体使用的过程中容易出现卡顿的情况,比如查看页面时出现一顿一顿的感受,切换tab之后响应很慢,或者具体滑动操作的时候也很慢. 二.卡顿的原因 卡顿的 ...
- 【Android端 APP 内存分析】使用工具进行APP的内存分析
Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...
- 【Android端APP 安装包检查】安装包检查具体内容及实现方法
一.安装包检查的具体包含内容有哪些? 1.安装包检查的一般内容包括: 安装包基本信息检查: 文件大小: xx MB 包名: com.xx 名称: xx 本次安装包证书与外网证书对比一致性:是 版本号 ...
- pc端和android端应用程序测试有什么区别?(ps面试题)
pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...
- 【转载】Android端手机测试体系
1.冒烟测试 跟web端 的测试流程一样,你拿到一个你们开发做出来的apk首先得去冒烟,也就是保证他的稳定性,指定时间内不会崩溃.这款原生sdk自带的monkey可以当做 我们的测试工具.就跟我之前博 ...
- windows 代理服务器的搭建,提供Android 端访问公网.
这段时间遇到一个情况,移动的网络收费.但是可以访问学校内部的网络,比如说学校官网图书馆之类了.所以我这里便想到一个方法,用学校内部一个可以访问互联网的主机充当代理服务器(我这里使用自己的电脑,非服务器 ...
随机推荐
- wget下载阿里云oss的文件报错403
问题 在实际工作中,我们为了方便,会将一些脚本储存在云端(阿里云OSS),这样方便我们使用和下载,但是在实际的使用过程中,我们会遇到一些问题. 示例链接:https://djxlsp.oss-cn-s ...
- thinkphp3.2.3集成phpexcel1.8导出设置单元格合并
1 到这里下载classes里面的文件 https://github.com/PHPOffice/PHPExcel 2 然后放到 thinkphp的vendor 新建一个文件夹 Phpexcel 然 ...
- c#实现串口通信
参考文章:https://www.cnblogs.com/Zed-H/p/8651882.html 利用虚拟串口软件连接两个虚拟串口,如图连接6,7: 打开串口进行通信如下:
- 自己对Thread的一些看法;
Thread thread= new Thread(new ThreadStart(name); 与 Thread thread= new Thread(name); thread.star( ...
- 1 Python命令行参数(脚本神器)
#!/usr/bin/env python3.7 # -*- coding:utf-8 -*- # Author: Lancer 2019-09-02 10:07:21 import sys,geto ...
- Python多任务—进程
一.进程以及状态 1.进程 正在运行的应用程序就是一个进程.进程是资源分配的基本单元. Python多进程可以在多核CPU上运行,多进程充分利用了多核的资源. 2. 进程的状态 工作中,任务数往往大于 ...
- DP之背包
一.01背包: (以下均可用一维来写 即只能选择一次的物品装在一定容积的背包中.f[i][j]表示前i件物品在容积为j时的最大价值. for(int i = 1; i <= n ; i++){ ...
- PAT 1022D进制的A+B
PAT 1022D进制的A+B 输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B ...
- PHP之面向对象(上)
PHP 1,定义:动态交互的计算机语言,弱类型语言 静态交互 html css js 凡是动态交互的都需要服务器phpstudy 2,使用集成服务器phpstudy apache 服务器 m ...
- 高德地图的JSAPI学习笔记【一】
高德地图的项目要做 学习笔记记录下来 一.注册账号并申请Key 二.准备页面写好 1.在页面添加 JS API 的入口脚本标签,并将其中「您申请的key值」替换为您刚刚申请的 key: <sc ...