Tesseract OCR Android

转载 2015年11月19日 14:55:38

转自:Android之Tesseract OCR

 本文将介绍android平台上如何使用tesseract实现OCR。 tesseract出生于HP实验室,如今由Google负责维护,是最好的开源OCR Engine之一,并且支持中文。tesseract个人觉得有两个需要考虑的点,一是大,二是慢,特别是中文。如果系统对空间和时间要求非常高,那么tesseract可能不是最好的选择。

   1.  准备工具tesseract-two

          tesseract是用c++实现的,需要封装Java API用于Android平台的调用。这里我们使用的是tesseract-two, 网址是https://github.com/rmtheis/tess-two。tesseract-two 是Tesseract Tools for Android的一个git分支,选择它是由于操作简单,并且集成了leptonica,一个图形处理工具。出发之前请先安装git和android-ndk。接着便是下载和编译,我是在windows上编译的。

       git下载(Git Bash操作):  git clone https://github.com/rmtheis/tess-two.git tess 

       ndk编译(cmd命令行):  先cd到刚才Git下载的tess目录。敲如下命令(编译的时间会有点久):

[plain] view plaincopy
  1. cd tess-two  
  2. ndk-build  
  3. android update project -t 1 --path .  
  4. ant release  
  5.   
  6.   
  7. cd ..  
  8. cd eyes-two  
  9. ndk-build  
  10. android update project -t 1 --path .  
  11. ant release  

    2. 调用tesseract识别图片

      eclipse里面导入编译好的android project,共三个项目,tess-two, tess-two-test 以及eyes-two。其中tess-two和eyes-two为android lib项目,供其它项目引用。tess-two封装Tesseract的Android API,eyes-two封装leptonica的Android API。tess-two-test为OCR的测试,先读一下TessBaseAPITest.java的代码,了解API的使用方法。
[java] view plaincopy
  1.        private static final String TESSBASE_PATH = "/mnt/sdcard/tesseract/";  
  2. private static final String DEFAULT_LANGUAGE = "eng";  
  3. private static final String CHINESE_LANGUAGE = "chi_sim";  
  4.   
  5.        TessBaseAPI baseApi = new TessBaseAPI();  
  6.        baseApi.init(TESSBASE_PATH, CHINESE_LANGUAGE);  
  7. baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO);  
  8. baseApi.setImage(params[0]);  
  9.   
  10. // Ensure that the result is correct.  
  11. final String outputText = baseApi.getUTF8Text();  
  12. baseApi.end();  


基本的API调用步骤非常之简单。不过模拟器启动之后,还需要把Tesseract的trained data放到模拟器里面,下载地址为https://code.google.com/p/tesseract-ocr/downloads/list

adb shell 
cd /mnt/sdcard/

mkdir tesseract

cd tesseract

mkdir tessdata

Ctrl+C退出Shell

adb push chi_sim.traineddata /mnt/sdcard/tesseract/tessdata

adb push eng.traineddata /mnt/sdcard/tesseract/tessdata

尝试自己写个Activity,显示张图片并识别一下吧。


3.  写在最后

    OCR的识别率取决于两个方面,图片质量和OCR engine的能力。通常为了提高识别率,需要对图片作预处理。比如常见的二值化(黑白),放大,切割,锐化等。可以直接调用leptonica接口实现。至于Tesseract Engine,只能说是非常好的英文OCR engine,处理中文还是有待提高。选择好一个OCR engine之后,能做的估计也就是在图片的预处理上下功夫了。


Android图片的二值化(黑白处理)

Android图片的二值化(黑白处理)换了一家新公司,做的是自己的产品,也终于从外包转战到了产品行列。 入职后的第一天做的是一个图片处理的项目,主要是把彩色图片转换成黑白图片,同时读取图片的byte...
  • mao_zedong
  • mao_zedong
  • 2015年03月18日 18:00
  • 4268

Android-OCR相机取景图像识别

  • 2013年06月07日 20:26
  • 8.34MB
  • 下载

Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案)

遇到一个需求,要用手机扫描纸质面单,获取面单上的手机号,最后决定用tesseract这个开源OCR库,移植到Android平台是tess-two Android平台tess-two地址:https:...
  • Mr_Sk
  • Mr_Sk
  • 2017年06月06日 13:57
  • 4840

浅析android OCR文字识别--转载

【转载注明出处:360个人图书馆>UNIVERSSKY>浅析android OCR文字识别 】   这学期有门课程老师要求用JAVA实现一个OCR文字识别的程序,所以就花了一些时间研究了一下在...
  • u014717231
  • u014717231
  • 2017年10月13日 16:50
  • 80

安卓Android、iOS移动端车牌识别OCR技术原理

核心内容:移动端车牌识别、安卓端车牌识别、Android车牌识别、iOS端车牌识别、OCR识别技术 一、安卓Android、iOS移动端车牌识别OCR技术识别流程 安卓Android、iO...
  • wintoneocr
  • wintoneocr
  • 2017年11月06日 15:17
  • 176

Android文字图像识别并翻译的简单实现

本文是对图像文字识别的简单实现所做,并没有深入研究。本程序所实现的app对楷体字识别最有效。例如要识别在一张白纸上的“中国”二个楷体黑字,使用手机摄像头先进行扫描识别,然后自动翻译为“China”,再...
  • yang786654260
  • yang786654260
  • 2015年08月05日 14:55
  • 9418

Android上图片文字识别

一款实现拍照和相册选取的安卓文字识别
  • u011502387
  • u011502387
  • 2017年04月19日 09:24
  • 4151

android文字识别止痛

  • 2016年01月05日 00:16
  • 31.1MB
  • 下载

OpenCV的+安卓+号牌识别(OpenCV + Android + 图像水平矫正)

百度翻译此文   有道翻译此文 问 题  I'm developing a Android app to detect vehicle number plate. i did i...
  • qq_15602525
  • qq_15602525
  • 2017年11月27日 15:01
  • 48

Android扫描车牌,车牌拍照识别SDK

Android扫描车牌,车牌拍照识别SDK   Android扫描车牌,车牌拍照识别SDK开发包是移动平台的车牌识别应用程序,支持Android等多种主流移动操作系统。该产品采用手机、平板电脑摄像头...
  • jinweiyi_tse
  • jinweiyi_tse
  • 2017年03月28日 21:38
  • 467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tesseract OCR Android
举报原因:
原因补充:

(最多只允许输入30个字)