如何通过tesseract ocr 中文开源OCR引擎创建Android OCR应用

google开源OCR项目之tesseract-ocr - 记录技术点点之路 - ITeye技术网站
google 的图片搜索就是拿这个做的啊
javaEEdevelop
浏览: 267935 次
来自: 广州
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
public ParameterRequestWrapper( ...
拒绝访问是因为.htc文件必须和网页同域名,写绝对路径不一定行 ...
millton0518 写道我照你这样的配置,失败了呀??出现 ...
我照你这样的配置,失败了呀??tesseract-ocr.rar android-ocr - 下载频道
- CSDN.NET
&&&&tesseract-ocr.rar android-ocr
tesseract-ocr.rar android-ocr
当前识别的图片路径为/mnt/sdcard/test5.jpg。 当前语言包的存放路径为/mnt/sdcard/tesseract/tessdata/。引擎为第三版本,可识别第三版本的语言包,支持中文识别。语言包需自行下载,中文包(chi_sim.traineddata.gz),英文包(eng.traineddata.gz)
若举报审核通过,可奖励20下载分
被举报人:
wuzhiqun27
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行知名的开源OCR引擎Tesseract 3.0版本日前发布,可以在项目网站下载:, 新版本支持中文,中文语言包定义。
Tesseract是于年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。该项目目前支持Windows、Linux和Mac OS等主流平台。但作为一个引擎,它只提供命令行工具。
执行识别图像的命令格式为:
tesseract &imagename&   &outputbase& [-l lang] [configfile [[+|-]varfile]...]
其中tesseract是命令;&imagename&是待识别的图片,例如图片 eurotext.tif;&outputbasename&是输出文本文件的名称,默认生成的是你所给定的输出文件名称,加上.txt扩展名;[-l lang]可选的,指定识别图像中的语言。
Tesseract还有相应的.net版本,下载地址如下:。另外发现这个用法非常简单,注意还需要下载语言包,另外为了提高验证率,还可以自己进行训练,tesseract-OCR还支持训练功能,以提高(对不同字体的)识别效率或者对新语种的支持。大致就是通过给定的包含已知字符的tiff文件生成相应的box文件,经过手工更正后,训练tesseract-OCR的识别能力。也可以用一些完成这个过程。
Tesseract是图盲,默认情况下只能看得懂未压缩的TIFF图像,如果直接用tesseract处理其它格式的图片,会报错如下:
Tesseract Open Source OCR Engine
name_to_image_type:Error:Unrecognized image type:code.jpg
IMAGE::read_header:Error:Can’t read this image type:code.jpg
tesseract:Error:Read of file failed:code.jpg
所以我们需要用ImageMagick来转换图片格式,ImageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。通常来说,它可以支持以下程序语言: Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。这使得自动的动态的修改创建图片变为可能。ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, FAX, FITS, FPX, FRACTAL, G, G3, GIF, GIF87, GRADIENT, GRAY, HDF, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, MPG, MSL, MTV, MVG, NULL, O, OTB, P7, PAL, PALM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PFA, PFB, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, TIF, TIFF, TILE, TIM, TTC, TTF, TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, XBM, XC, XCF, XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV,具体参考。
ImageMagick .NET的相关项目:
to convert, compose, and edit images from Windows .NET.
is a .NET application written in C# that utilizes the ImageMagick command line to allow conversion of multiple image formats to different formats.
假设需要识别的图片验证码为code.jpg,我们需要做的只有两步:
d:\ImageMagick\convert.exe -compress none -depth 8 -alpha off ./code.gif ./code.tif
D:\\tesseract\\tesseract.exe ./code.tif ./result
结果就在文本文件./result.txt里面了,tesseract会自动地在./result后面添加上后缀名.txt。然后再对两个命令做点解释。
convert.exe:ImageMagick套件的一部分,负责图片格式转换,各个参数的意义如下:
-compress none:转换后的图片不要压缩,如果没有加这一项,后续tesseract处理的时候会报错:read_tif_image:Error:Illegal image format:Compression
-depth 8:设置转换后图像的色深为8位,也就是bpp为8。如果没有此参数,后果如下:
Tesseract Open Source OCR Engine
check_legal_image_size:Error:Only 1,2,4,5,6,8 bpp are supported:16
Segmentation fault
-alpha off:在转换后的图像中不要添加alpha图层。如果没有此参数,后果同上。
紧跟着就是待转换的图片的文件名,最后是转换后的图片的文件名。
阅读(...) 评论()10217人阅读
& & 本文将介绍android平台上如何使用tesseract实现OCR。 tesseract出生于HP实验室,如今由Google负责维护,是最好的开源OCR Engine之一,并且支持中文。tesseract个人觉得有两个需要考虑的点,一是大,二是慢,特别是中文。如果系统对空间和时间要求非常高,那么tesseract可能不是最好的选择。
& & 1. &准备工具tesseract-two
& tesseract是用c++实现的,需要封装Java API用于Android平台的调用。这里我们使用的是tesseract-two, 网址是。tesseract-two
是Tesseract Tools for Android的一个git分支,选择它是由于操作简单,并且集成了leptonica,一个图形处理工具。出发之前请先安装git和android-ndk。接着便是下载和编译,我是在windows上编译的。
& & & &git下载(Git
Bash操作): &git clone /rmtheis/tess-two.git tess&
& & & &ndk编译(cmd命令行):
&先cd到刚才Git下载的tess目录。敲如下命令(编译的时间会有点久):
cd tess-two
android update project -t 1 --path .
ant release
cd eyes-two
android update project -t 1 --path .
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的使用方法。
private static final String TESSBASE_PATH = &/mnt/sdcard/tesseract/&;
private static final String DEFAULT_LANGUAGE = &eng&;
private static final String CHINESE_LANGUAGE = &chi_sim&;
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(TESSBASE_PATH, CHINESE_LANGUAGE);
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO);
baseApi.setImage(params[0]);
// Ensure that the result is correct.
final String outputText = baseApi.getUTF8Text();
baseApi.end();
基本的API调用步骤非常之简单。不过模拟器启动之后,还需要把Tesseract的trained data放到模拟器里面,下载地址为。
/mnt/sdcard/
mkdir tesseract
cd tesseract
mkdir tessdata
Ctrl+C退出Shell
adb push chi_sim.traineddata /mnt/sdcard/tesseract/tessdata
push eng.traineddata /mnt/sdcard/tesseract/tessdata
尝试自己写个Activity,显示张图片并识别一下吧。
3. &写在最后
& & OCR的识别率取决于两个方面,图片质量和OCR engine的能力。通常为了提高识别率,需要对图片作预处理。比如常见的二值化(黑白),放大,切割,锐化等。可以直接调用leptonica接口实现。至于Tesseract
Engine,只能说是非常好的英文OCR engine,处理中文还是有待提高。选择好一个OCR engine之后,能做的估计也就是在图片的预处理上下功夫了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:189377次
积分:2801
积分:2801
排名:第6390名
原创:57篇
评论:97条
阅读:31387
(4)(2)(2)(1)(4)(1)(2)(2)(2)(3)(7)(1)(12)(3)(2)(1)(1)(1)(11)如何通过Tesseract开源OCR引擎创建Android OCR应用_百度知道
如何通过Tesseract开源OCR引擎创建Android OCR应用
提问者采纳
  要编译Android平台的Tesseract,需要使用Google提供的tesseract-android-tools。  代码获取方式:  git clone https://code.。/p/tesseract-android-tools/  打开README,在命令行工具中执行下面的步骤:  cd &project-directory&  curl -O https://tesseract-ocr。googlecode.。com/files/tesseract-ocr-3.02.02.tar.gz  curl -O http://leptonica。googlecode。com/files/leptonica-1.69.tar.gz  tar -zxvf tesseract-ocr-3.02.02.tar.gz  tar -zxvf leptonica-1.69.tar.gz  rm -f tesseract-ocr-3.02.02.tar.gz  rm -f leptonica-1.69.tar.gz  mv tesseract-3.02.02 jni/com_googlecode_tesseract_android/src  mv leptonica-1.69 jni/com_googlecode_leptonica_android/src  ndk-build -j8  android update project --target 1 --path .  ant debug (release)  注意:如果你在使用NDK r9,编译的时候会出现错误:  format not a string literal and no format arguments [-Werror=format-security]  解决的方法就是在Application.mk中加入一行:  APP_CFLAGS += -Wno-error=format-security  编译之后会生成class.jar和一些*.so。  Android OCR Application  创建一个Android应用,把生成的jar和so导入进来。  创建TessOCR:  public class TessOCR {  private TessBaseAPI mT    public TessOCR() {  // TODO Auto-generated constructor stub  mTess = new TessBaseAPI();  String datapath = Environment.getExternalStorageDirectory() + &/tesseract/&;  String language = &eng&;  File dir = new File(datapath + &tessdata/&);  if (!dir.exists())  dir.mkdirs();  mTess.init(datapath, language);  }    public String getOCRResult(Bitmap bitmap) {    mTess.setImage(bitmap);  String result = mTess.getUTF8Text();      }    public void onDestroy() {  if (mTess != null)  mTess.end();  }    }  构造函数中需要在存储卡上创建一个目录tessdata,如果不创建程序运行就会出错。因为源码中会检测这个目录,不存在就抛出异常:  public boolean init(String datapath, String language) {  if (datapath == null) {  throw new IllegalArgumentException(&Data path must not be null!&);  }  if (!datapath.endsWith(File.separator)) {  datapath += File.  }    File tessdata = new File(datapath + &tessdata&);  if (!tessdata.exists() || !tessdata.isDirectory()) {  throw new IllegalArgumentException(&Data path must contain subfolder tessdata!&);  }    return nativeInit(datapath, language);  }  就这么简单。现在通过三种方式获取图片做OCR:  在图库中选取一张图,选择发送或者分享,选择OCR应用  在AndroidManifest.xml中加入IntentFilter,让OCR应用出现在图库的分享列表中:  &intent-filter&  &action android:name=&android.intent.action.SEND& /&    &category android:name=&android.intent.category.DEFAULT& /&  &data android:mimeType=&text/plain& /&  &data android:mimeType=&image/*& /&  &/intent-filter&  获得URI之后,对URI解码,获取bitmap:  if (Intent.ACTION_SEND.equals(intent.getAction())) {  Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);  uriOCR(uri);  }  private void uriOCR(Uri uri) {  if (uri != null) {  InputStream is =  try {  is = getContentResolver().openInputStream(uri);  Bitmap bitmap = BitmapFactory.decodeStream(is);  mImage.setImageBitmap(bitmap);  doOCR(bitmap);  } catch (FileNotFoundException e) {  // TODO Auto-generated catch block  e.printStackTrace();  } finally {  if (is != null) {  try {  is.close();  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }  }  }  }  }  启动OCR应用,从图库中选择一张图做OCR  发送Intent调用图库,在onActivityResult中获取返回的URI做OCR:  Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  startActivityForResult(intent, REQUEST_PICK_PHOTO);  启动OCR应用,拍照之后做OCR  为了获取高质量的图片,在Intent中加入图片路径。返回之后就可以直接使用这个图片路径解码:  private void dispatchTakePictureIntent() {  Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  // Ensure that there's a camera activity to handle the intent  if (takePictureIntent.resolveActivity(getPackageManager()) != null) {  // Create the File where the photo should go  File photoFile =  try {  photoFile = createImageFile();  } catch (IOException ex) {  // Error occurred while creating the File    }  // Continue only if the File was successfully created  if (photoFile != null) {  takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,  Uri.fromFile(photoFile));  startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);  }  }  }  最后不要忘记下载语言包,并push到存储卡的tessdata目录下。
来自团队:
其他类似问题
为您推荐:
android的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 tesseract android 的文章

 

随机推荐