前言

Tessseract是一款由HP实验室开发由 Google 维护的开源 OCR(Optical Character Recognition , 光学字符识别)引擎。能够支持中文十分难得。虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了。

Tesseract-OCR下载地址

文字识别一般都用的tesseract-ocr。
GitHub:https://github.com/tesseract-ocr/tesseract

我们今天在Android上应用推荐的有个tess-two

GitHub:https://github.com/rmtheis/tess-two

还有一个字体识别库Tessdata(chi_sim.traineddata中文简体,chi_tra.traineddata中文繁体,eng.traineddata 英文库)

GitHub:  https://github.com/tesseract-ocr/tessdata

演示效果

上图中,整张图进行识别,我感觉效果还可以,如果前置用OPENCV做图像的预处理后,可能效果会更好。

代码实现

首先下载tess-two和字体库

下载完成到我们的目录中

新建一个TesserartDemo的项目,导入tess-two

建好项目后,我们通过Import Module导入tess-two,由于tess-two是个ndk的项目,所以我们必须要在SDK Tools里面加入CMake和NDK,如下图,具体NDK可以看看以前的文章《Android NDK编程(一)---NDK介绍及环境搭建》

导入完tess-two后,我们进行编译,结果发现编译不过去,提示android-maven的错误。网上找了找资料,发现了解决办法。在tess-two的build.gradle的文件中配置

buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.1.2'classpath 'org.codehaus.groovy:groovy-backports-compat23:2.3.5'classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'}
}apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

如下图:

重新编译,这次时间较长,我自己的电话大概花了十几分钟才编译完成。

拷贝字库文件进Android设备

我们利用Device File Explorer打开我们的虚拟机,将chi_sim.traineddata的字库文件拷贝到mnt/sdcard/tesserart/tessdata下,没有这个目录可以自己创建一下,后面会说到为什么拷贝到这里

AndroidManifest.xml

在这里面加入读取内存卡和写入内存卡的权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />

在res/drawable里面把我们的图片文件复制进来

activity_main.xml布局文件

在布局文件中加入一个imageview,一个button和一个TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:layout_width="match_parent"android:layout_height="300dp"android:id="@+id/imgv"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnOcr"android:text="识别"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:id="@+id/tvshow" /></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {private ImageView imgv;private TextView tvshow;private Button btnocr;private Bitmap bmp;//如果Android的版本大于23,路径取根目录下的tesserart,小于的话是//在mnt/sdcard下面private String DATAPATH=Environment.getExternalStorageDirectory().getAbsolutePath() +File.separator + "tesserart";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestPermission();imgv=findViewById(R.id.imgv);//获取自己的图片,这里是自己放在项目里面的。bmp=BitmapFactory.decodeResource(this.getResources(), R.drawable.tiddmg);imgv.setImageBitmap(bmp);imgv.setScaleType(ImageView.ScaleType.FIT_XY);tvshow=findViewById(R.id.tvshow);btnocr=findViewById(R.id.btnOcr);btnocr.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try {TessBaseAPI mTess=new TessBaseAPI();//存放tessdata的文件路径 就是chi_sim.traineddata文件的位置chi_sim.traineddata//选择语言 chi_sim 简体中文  eng 英文String language="chi_sim";File dirdatapath=new File(DATAPATH);if (!dirdatapath.exists()) {dirdatapath.mkdirs();}File dir=new File(DATAPATH,"tessdata");if (!dir.exists())dir.mkdirs();tvshow.append(DATAPATH+"\r\n");mTess.init(DATAPATH, language);//将图片设置到mTess进行识别mTess.setImage(bmp);//获取识别的文字(这里会等一段时间,这里的代码是在主线程的,建议将这部分代码放到子线程)String result=mTess.getUTF8Text();tvshow.append("结果为:" + result);} catch (Exception e) {e.printStackTrace();tvshow.append(e.getMessage());}}});}void requestPermission() {final int REQUEST_CODE=1;if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_CODE);}}}

重点说明:

上图中DATAPATH的文件路径,用Environment.getExternalStorageDirectory().getAbsolutePath(),在API23以下的时候,路径就是我们拷贝的mnt\sdcard\,如果在API23或以上直接就是我们的根目录,我自己的模拟器是Android 4.1的也就是API18,所以这里直接拷文件拷到mnt\sdcard下了。刚才测试时用了自己手机(Android9.0),发现在mnt的sdcard下也有,可能我自己研究错了这里,先划掉吧。



上图中mTess.init这个要重点说一下,我们开始的DATAPATH的路径是mnt/sdcard/tesserart,在拷贝字库文件时我们下面还创建了一个tessdata的文件夹才拷进去了,如果你这里设置为mnt/sdcard/tesserart/tessdata的路径,就会报错了。

点开init这个函数我们看一下里面的写法

上图中标红色的就是它自己会根据输入的路径查找tessdata的文件夹,所以这里我们格外注意一下。

这样整个DEMO程序就可以运行起来如文章开始的效果了,如果是android6.0开始,要记得自己申请动态的权限读取内存。

-END-

Vaccae的往期经典


OpenCV

《C++ OpenCV案例实战---卡号获取》

《C++ OpenCV案例实战---卡片截取(附代码)》

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量》

《C++ OpenCV实战---利用颜色分割获取数量》

《OpenCV4Android NDK方式进行Canny边缘检测》


Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI》

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串》

《Android碎片化布局fragment的实战应用》

《Android中RecyclerView嵌套RecyclerView》

《Android里用AsyncTask后的接口回调》


.Net C#

《C#自定义特性(Attribute)讲解与实际应用》

《C#根据类生成签名字符串(附DEMO下载地址)》

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类》


数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)》

《SQL随机增加销售数据的脚本编写(附脚本下载地址)》

《SQL Server中With As的介绍与应用(三)--递归的实战应用》

《Oracle通过ODBC连接SQL Server数据库》

《Oracle利用row_number()over()方式解决插入数据时重复键的问题》


长按下方二维码关注微卡智享

Android使用Tesseract-ocr进行文字识别相关推荐

  1. Android集成百度OCR图片文字识别——总结

    近期由于工作内容的需要,我要给项目集成一个图片文字识别功能,据说百度的不错,所以今天写一个关于百度OCR的集成总结,以便以后再次使用不用去看官方文档. 首先肯定是要在百度管理平台注册账号并登录,然后照 ...

  2. php tesseract,PHP ocr:用Tesseract OCR进行文字识别

    系统环境:centos7 安装tesseract: yum-config-manager --add-repo https://download.opensuse.org/repositories/h ...

  3. 一篇文章搞定百度OCR图片文字识别API

    一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104 转载于:https://www.cnblogs.com/chongdongxia ...

  4. 使用腾讯OCR进行文字识别

    文章目录 OCR效果 配置腾讯云OCR准备工作 注册账号 创建秘钥 使用万象优图创建Bucket 操作指引 实现代码 生成签名 配置网络请求,调用OCR识别接口 写在后面 使用腾讯智能文字识别 OCR ...

  5. 【PC工具】更新在线图片文字识别工具,OCR免费文字识别工具

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 之前分享过两个windows上的OCR文字识别工具: [PC工具]更新!windows ...

  6. 阿里云 OCR 图片文字识别接口使用案例(java)

    阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...

  7. Prizmo Pro for Mac(OCR图像文字识别工具)

    Prizmo Pro mac版可以自动扫描相机中的图片,可根据用户选择的文档类型进行特殊处理,支持常用的扫描仪.数码相机.iPhone.iPad 等,也支持自动截图桌面部分区域然后识别出文字,非常的有 ...

  8. OCR图片文字识别,人工手动图片标注软件安装过程

    OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda  下载慢的问题: 使用国内镜像地址下载: https://mirro ...

  9. TOOLFK工具-在线OCR图片文字识别工具

    本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...

  10. 比天若OCR,PandaOCR更方便使用的OCR扫描文字识别软件,易用AI

    目前市面上各种各样的OCR软件从技术上大概可以分为两大类,离线版和云端在线版.离线版的代表如 Abbyy FineReader,在线版如各大头部AI平台开放的OCR接口能力.一般在线版比离线版的识别能 ...

最新文章

  1. 需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP...
  2. Python学习(四) —— 编码
  3. react ajax 分页,React实现分页效果
  4. SQL Server2012如何导出sql脚本并且还原数据库
  5. 朗锐智科PoE图像采集卡助力机器视觉应用
  6. 如何训练您的医生...使用开源
  7. 【华为云技术分享】MongoDB经典故障系列三:副本集延迟太高怎么办?
  8. mmu计算机组成原理,计算机组成原理
  9. 实验2-1-3 计算物体自由下落的距离 (5 分)
  10. PHP的面向对象模型(转贴)
  11. 使用xampp和tiki搭建内网wiki
  12. c语言中double占多少字节,double占几个字节?
  13. 鸿蒙hpm网站,【HarmonyOS HiSpark IPC试用】用hpm获取源码方式环境-hpm安装 鸿蒙HarmonyOS技术社区PCB联盟网 - Powered by Discuz!...
  14. 工作日节假日调休日休息日的判断API-holiday
  15. 问题解决:IndentationError: expected an indented block
  16. c mysql_stmt游标移动_MySql数据库--stmt语句(续)
  17. 抽象层 abstraction layer
  18. 卷积神经网络—全连接层
  19. b2DebugDraw到底是什么
  20. c语言编程题库this is a c program,C语言末复习题编程题部.doc

热门文章

  1. Arduino通过delay方法改变PWM频率和周期
  2. python爬虫爬取微信_python爬虫对搜狗抓取微信搜索信息不全问题
  3. C++ Poj3750 小孩报数问题
  4. 修改StudentInfo项目输出学生信息
  5. STM32 单总线1-wire
  6. linux网卡rx,Linux网卡驱动分析之RTL8139(四)
  7. 自学Vue之路——Vue基础知识点
  8. 闪讯利用openwrt路由器拨号教程(二)
  9. 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月31日
  10. Error running Command line is too long. Shorten command line for