Tesseract在Android上的使用
来源:互联网 发布:mac魅可 编辑:程序博客网 时间:2024/06/03 19:36
上一篇文章介绍了Tesseract在Mac平台上的使用,现在看看怎么实现在Android上进行OCR识别。这里基于个人之前自己做的一个APP上集成,首先,修改app/build.gradle,增加对tess-two的支持,见76行:
把上一篇文章最后训练过的normal.trainneddata放到assert文件夹下:
编写测试界面如下:
编写页面对应java文件:
package com.linjk.ihouse.activity;import android.app.ActionBar;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.MenuItem;import android.widget.TextView;import com.googlecode.tesseract.android.TessBaseAPI;import com.linjk.ihouse.R;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import butterknife.Bind;import butterknife.ButterKnife;/** * Created by LinJK on 07/06/2017. */public class ActivityTesseractOCR extends Activity { @Bind(R.id.ocr_result) TextView tvOCRResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tesseract_ocr); setTitle("TesseractOCR"); ButterKnife.bind(this); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); try { copyLanguagePackageToSDCard(); TessBaseAPI lvBaseAPI = new TessBaseAPI(); lvBaseAPI.init(Environment.getExternalStorageDirectory().getPath(), "normal"); lvBaseAPI.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO); Bitmap lvBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.name); lvBaseAPI.setImage(lvBitmap); String result = lvBaseAPI.getUTF8Text(); tvOCRResult.setText(result); lvBaseAPI.clear(); lvBaseAPI.end(); } catch (Exception e) { Log.e("OCR", e.getMessage()); } } // 把字库文件拷贝到SD卡,要求SD卡根目录有tessdata文件夹,字库在该文件夹下 private void copyLanguagePackageToSDCard() { try { String filePath = Environment.getExternalStorageDirectory().getPath() + "/tessdata/normal.traineddata"; File lvFile = new File(filePath); if (!lvFile.exists()) { Log.i("file", "创建路径"); if (lvFile.mkdir()) { Log.i("file", "创建成功"); } else { Log.i("file", "创建失败"); } } InputStream lvInputStream; OutputStream lvOutputStream = new FileOutputStream(filePath); // 拷贝文件 lvInputStream = this.getAssets().open("normal.traineddata"); byte[] buffer = new byte[1024]; int length = lvInputStream.read(buffer); while (length > 0) { lvOutputStream.write(buffer, 0, length); length = lvInputStream.read(buffer); } lvOutputStream.flush(); lvInputStream.close(); lvOutputStream.close(); } catch (Exception e) { Log.e("OCR<copy>", e.getMessage()); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } }}代码那里首先把assets文件的字库拷贝到sd卡根目录下的tessdata文件夹下,然后初始化OCR引擎,接着读取照片进行解析。这里还有很多可以改进的,识别应放到Handler来处理,这样就不会阻塞Ui线程,这只是测试功能而已就这么写了。
阅读全文
0 0
- Tesseract在Android上的使用
- 在vs2013上的编译tesseract-ocr
- 使用Tesseract-OCR识别图片上的中文
- tesseract的使用
- tesseract 在vs2010 下使用API的配置
- tesseract-ocr在mac下的使用汇总
- 如何在windows上编译Tesseract OCR
- Android之Tesseract OCR tess-two的使用
- Tesseract(tesseract-ocr)在Visual Studio 2013中的使用
- Tesseract-OCR4.0版本在VS2015上的编译与运行
- Tesseract-OCR4.0版本在VS2015上的编译与运行
- C++在android上的使用注意事项
- pjsip在android上使用的例子
- 在Android上的使用《贝赛尔曲线》!
- 在Android上的使用 贝赛尔曲线
- Log4J在Android上的使用
- log4j 在android上的使用
- Android---Leakcanary在Eclipse上的使用
- Open-Sourcing LayoutKit
- 隐藏算法的性能指标
- java集合
- malloc和new的区别
- org.hibernate.HibernateException: save is not valid without active transaction at org.hibernate.co
- Tesseract在Android上的使用
- angular学习网站
- wcf返回datatable必须给tablename赋值
- Location-Aware-Instant:开发即时位置感知的Android客户端
- 搜索引擎选择: Elasticsearch与Solr
- google vr 入门之VrPanoramaView制作全景图列表
- Eclipse开发SpringMVC简单小程序
- 业界良心? 谷歌宣布Chrome将自带广告拦截功能
- [P1052]过河