快过年了,博主的新应用-屏幕取词之了老花镜的编码工作也在紧锣密鼓的进行中。下面分享一下这个应用中的核心功能ocr,也就是图片识词功能。先来看下我的实现效果。上图是在网上随便截下来的一个带有英文的页面,下图是我的应用的实现效果。
![20140127143620238.bmp](https://img.php1.cn/3cd4a/1eebe/cd5/0d80e8a685a9a87b.png)
![20140127143623239.bmp](https://img.php1.cn/3cd4a/1e618/c5a/d5d40da532c3a782.png)
2.实现
(1)首先要下载我的源码和语言包,博客下方会给出地址。(源码设为10分,是想让大家珍惜别人的劳动成果) (2)把代码中的lib中的两个文件夹和jar文件导入。 (3)需要注意的有两点请认真看下面贴出的代码的注释
package com.example.tess;
import java.io.File;
import com.googlecode.tesseract.android.TessBaseAPI;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text;
TessBaseAPI baseApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt=new Button(getBaseContext());
bt=(Button)findViewById(R.id.button1);
text=new TextView(getBaseContext());
text=(TextView)findViewById(R.id.textView1);
baseApi=new TessBaseAPI();
//(注意)前面的地址是语言包的父级。eng表示解析的是英文
baseApi.init(/mnt/sdcard/tesseract/, eng);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View sourse) {
// text.setText(sb);
//设置要ocr的图片bitmap,要解析的图片地址(注意)
baseApi.setImage(getDiskBitmap(/mnt/sdcard/mypic.bmp));
//根据Init的语言,获得ocr后的字符串
String text1= baseApi.getUTF8Text();
text.setText(text1);
//释放bitmap
baseApi.clear();
}
}
);
}
/*
* 将本地图片转换为bitmap
*/
private Bitmap getDiskBitmap(String pathString)
{
Bitmap bitmap = null;
try
{
File file = new File(pathString);
if(file.exists())
{
bitmap = BitmapFactory.decodeFile(pathString);
}
} catch (Exception e)
{
// TODO: handle exception
}
return bitmap;
}
}
(4)图片越大耗时越长,本例耗时差不多半分钟
3.源码及相关文件下载地址
实例源码
语言包eng