【实例简介】tess-two.tesseract3.01-leptonica1.68-LibJPEG6b

【实例截图】

【核心代码】

package com.example.ocr;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

import android.provider.MediaStore;

public class MainActivity extends Activity {

private static final String tag="MainActivity";

private int CHOOSE_IMAGE = 1;

private int CHOOSE_CAMERA = 2;

private String imageFilePath = "";

private boolean keyBack;

private Button btnGetpic = null;

private Button btnCamera = null;

private Button btnRecognition = null;

private ImageView imageView = null;

private TextView textView = null;

private Bitmap oriPicture = null;

//private Bitmap finPicture = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mainInitialize();

}

public void mainInitialize(){

btnCamera = (Button) findViewById(R.id.getCam);

btnGetpic = (Button) findViewById(R.id.getPic);

keyBack = false;

Log.i(tag, "initiate successfully");

btnGetpic.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//select a particular kind of data and return it

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("image/*"); //sending image

startActivityForResult(intent,CHOOSE_IMAGE);

}

});

btnCamera.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

long dataTake = System.currentTimeMillis();

imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()

"/tesseract/" dataTake ".jpg"; //save directory

File imageFile = new File(imageFilePath);

Uri imageFileUri = Uri.fromFile(imageFile);

//have the camera application capture an image and return it

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri);

//Launch the camera application for the result when it finished

startActivityForResult(intent,CHOOSE_CAMERA);

Log.i(tag, "ready to skip");

}

});

}

@Override

//Called when an activity you launched exits

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK){

setContentView(R.layout.show_image);

btnRecognition = (Button) findViewById(R.id.getResult);

textView = (TextView) findViewById(R.id.result);

imageView = (ImageView) findViewById(R.id.showImage);

textView.setVisibility(View.INVISIBLE);

keyBack = true;

Log.i(tag, "skip back successfully");

if (requestCode == CHOOSE_IMAGE) {

Uri uri = data.getData();

String[] proj = { MediaStore.Images.Media.DATA };

Cursor imagecursor = getContentResolver().query(uri,proj,null,null,null);

int actual_image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

imagecursor.moveToFirst();

String img_path = imagecursor.getString(actual_image_column_index); //get the image path

oriPicture = imageReceive(img_path); //get the image and resize it if needed

oriPicture = oriPicture.copy(Bitmap.Config.ARGB_8888, true);

imageView.setImageBitmap(oriPicture);

Log.i(tag, "Ready to recognize image");

btnRecognition.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

textView.setText("text recognized(pic):\n" Tesseract.getText(oriPicture)); //get the String and show it

textView.setVisibility(View.VISIBLE);

imageView.setImageBitmap(oriPicture);

}

});

}

if(requestCode == CHOOSE_CAMERA)

{

oriPicture = imageReceive(imageFilePath); //get the image and resize it if needed

oriPicture = oriPicture.copy(Bitmap.Config.ARGB_8888, true);

imageView.setImageBitmap(oriPicture);

Log.i(tag, "Ready to recognize image");

btnRecognition.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

textView.setText("text recognized(cam):\n" Tesseract.getText(oriPicture)); //get the String and show it

textView.setVisibility(View.VISIBLE);

imageView.setImageBitmap(oriPicture);

}

});

}

}

}

//get the image and resize it if it is too large for screen

public Bitmap imageReceive(String image_path){

Bitmap bmp = null;

try{

//get the screen size

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int dw = dm.widthPixels;

int dh = dm.heightPixels;

// Load up the image's dimensions not the image itself

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inJustDecodeBounds = true;

bmp = BitmapFactory.decodeFile(image_path,bmpFactoryOptions);

int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);

int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);

// If both of the ratios are greater than 1,

// one of the sides of the image is greater than the screen

if (heightRatio > 1 && widthRatio > 1)

{

if (heightRatio > widthRatio) {

// Height ratio is larger, scale according to it

bmpFactoryOptions.inSampleSize = heightRatio;

}

else {

// Width ratio is larger, scale according to it

bmpFactoryOptions.inSampleSize = widthRatio;

}

}

bmpFactoryOptions.inJustDecodeBounds = false; // Decode it for real

bmp = BitmapFactory.decodeFile(image_path,bmpFactoryOptions);

}

catch(Exception e)

{

e.printStackTrace();

}

return bmp;

}

public boolean onKeyDown(int keyCode, KeyEvent event) {

//Monitoring the return key

if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

if(keyBack){

setContentView(R.layout.activity_main);

mainInitialize();

}

else{

finish();

Log.i(tag, "app is over");

}

return true;

}

return super.onKeyDown(keyCode, event);

}

}

更多推荐