Esempio n. 1
0
  @SmallTest
  public void testWordConfidences() {
    final String inputText = "one two three";
    final Bitmap bmp = getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_BLOCK);

    baseApi.setImage(bmp);
    String text = baseApi.getUTF8Text();

    assertNotNull("Recognized text is null.", text);

    // Ensure that a mean confidence value is returned.
    int conf = baseApi.meanConfidence();
    boolean validConf = conf > 0 && conf <= 100;
    assertTrue("Mean confidence value is incorrect.", validConf);

    // Ensure that word confidence values are returned.
    int numWords = text.split("\\s+").length;
    int[] wordConf = baseApi.wordConfidences();
    assertEquals("Found the wrong number of word confidence values.", numWords, wordConf.length);
    for (int i = 0; i < wordConf.length; i++) {
      boolean valid = 0 <= wordConf[i] && wordConf[i] <= 100;
      assertTrue("Found an invalid word confidence value.", valid);
    }

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 2
0
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow()
        .setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    window.requestFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.capture);
    baseApi = new TessBaseAPI();

    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    Bitmap mp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

    mp = mp.copy(Bitmap.Config.ARGB_8888, false);
    baseApi.setImage(mp);

    String value = baseApi.getUTF8Text();
    //		Log.d("tag", " the value is ===> " + value);
    baseApi.clear();
    baseApi.end();

    mainSurface = (SurfaceView) findViewById(R.id.mainSurface);
    textView = (TextView) findViewById(R.id.text);
    msurfaceHolder = mainSurface.getHolder();
  }
Esempio n. 3
0
  @SmallTest
  public void testEnd() {
    final String inputText = "hello";
    final Bitmap bmp = getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
    baseApi.setImage(bmp);

    // Ensure that getUTF8Text() fails after end() is called.
    baseApi.end();
    try {
      baseApi.getUTF8Text();
      fail("IllegalStateException not thrown");
    } catch (IllegalStateException e) {
      // Continue
    } finally {
      bmp.recycle();
    }

    // Ensure that reinitializing the API is successful.
    boolean success = baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    assertTrue("API failed to initialize after end()", success);

    // Ensure setImage() does not throw an exception.
    final Bitmap bmp2 = getTextImage(inputText, 640, 480);
    baseApi.setImage(bmp2);

    // Attempt to shut down the API.
    baseApi.end();
    bmp2.recycle();
  }
Esempio n. 4
0
  // Scan the photo for text using the tess-two API
  public static String scanPhoto(Bitmap bitmap) {

    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.setDebug(true);
    baseApi.init(DATA_PATH, lang);
    // set the black list
    baseApi.setVariable("tessedit_char_blacklist", "':;,.?/\\}][{!@#$%^&*()-_=+~");
    baseApi.setVariable("save_blob_choices", "T");

    baseApi.setImage(bitmap);

    String recognizedText = baseApi.getUTF8Text();

    // Iterate over the results and print confidence values for debugging purposes
    final ResultIterator iterator = baseApi.getResultIterator();
    String lastUTF8Text;
    float lastConfidence;
    iterator.begin();
    do {
      lastUTF8Text = iterator.getUTF8Text(PageIteratorLevel.RIL_WORD);
      lastConfidence = iterator.confidence(PageIteratorLevel.RIL_WORD);
      if (lastConfidence > 50) {
        Log.d(TAG, String.format("%s => %.2f", lastUTF8Text, lastConfidence));
      }

    } while (iterator.next(PageIteratorLevel.RIL_WORD));

    baseApi.end();

    Log.d(TAG, recognizedText);

    return recognizedText;
  }
Esempio n. 5
0
  public void ocr_main() {
    Log.v(TAG, "entering tess");

    // Getting uri of image/cropped image
    try {
      myimage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), image_uri);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    // Log.v(TAG, "bitmap " + myimage.getByteCount());
    //        Bitmap argb = myimage;
    //        argb = argb.copy(Bitmap.Config.ARGB_8888, true);
    //        Log.v(TAG, "bitmap after argb:" + argb.getByteCount());
    //
    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inSampleSize = 2;
    myimage = BitmapFactory.decodeFile(filepath, opt);
    // Log.v(TAG, "bitmap after comp:" + myimage.getByteCount());

    // TessBase starts
    TessBaseAPI baseApi = new TessBaseAPI();

    baseApi.setDebug(true);
    baseApi.init(DATA_PATH, lang);
    Log.v(TAG, "Before baseApi");
    baseApi.setImage(myimage);
    Log.v(TAG, "Before baseApi2");
    String recognizedText = baseApi.getUTF8Text();
    Log.v(TAG, "Before baseApi3");
    baseApi.end();

    Log.v(TAG, "OCRED TEXT: " + recognizedText);

    if (lang.equalsIgnoreCase("eng")) {
      recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");
    }

    // recognizedText is the final OCRed text
    recognizedText = recognizedText.trim();

    //		String ocrtext = "And...BAM! OCRed: " + recognizedText;
    //		Toast toast = Toast.makeText(this.getApplicationContext(), ocrtext,
    //				Toast.LENGTH_LONG);
    //		toast.show();

    // deleting temporary crop file created
    File file =
        new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            "temp.bmp");
    boolean deleted = file.delete();
    Log.i(TAG, "File deleted: " + deleted);

    Intent intent = new Intent(this, ResultActivity.class);
    intent.putExtra("ocrText", recognizedText);
    startActivity(intent);
  }
Esempio n. 6
0
  @SmallTest
  public void testSetRectangle() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR);

    final int width = 640;
    final int height = 480;
    final Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    final Paint paint = new Paint();
    final Canvas canvas = new Canvas(bmp);

    canvas.drawColor(Color.WHITE);

    paint.setColor(Color.BLACK);
    paint.setStyle(Style.FILL);
    paint.setAntiAlias(true);
    paint.setTextAlign(Align.CENTER);
    paint.setTextSize(32.0f);

    // Draw separate text on the left and right halves of the image.
    final String leftInput = "A";
    final String rightInput = "B";
    canvas.drawText(leftInput, width / 4, height / 2, paint);
    canvas.drawText(rightInput, width * 3 / 4, height / 2, paint);

    baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, leftInput + rightInput);
    baseApi.setImage(bmp);

    // Ensure the result is correct for a rectangle on the left half of the image.
    Rect left = new Rect(0, 0, width / 2, height);
    baseApi.setRectangle(left);
    String leftResult = baseApi.getUTF8Text();
    assertEquals("Found incorrect text.", leftInput, leftResult);

    // Ensure the result is correct for a rectangle on the right half of the image.
    Rect right = new Rect(width / 2, 0, width, height);
    baseApi.setRectangle(right);
    String rightResult = baseApi.getUTF8Text();
    assertEquals("Found incorrect text.", rightInput, rightResult);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 7
0
  @SuppressWarnings("unused")
  private OcrResult getOcrResult() {
    OcrResult ocrResult;
    String textResult;
    long start = System.currentTimeMillis();

    try {
      baseApi.setImage(ReadFile.readBitmap(bitmap));
      textResult = baseApi.getUTF8Text();
      timeRequired = System.currentTimeMillis() - start;

      // Check for failure to recognize text
      if (textResult == null || textResult.equals("")) {
        return null;
      }
      ocrResult = new OcrResult();
      ocrResult.setWordConfidences(baseApi.wordConfidences());
      ocrResult.setMeanConfidence(baseApi.meanConfidence());
      if (ViewfinderView.DRAW_REGION_BOXES) {
        ocrResult.setRegionBoundingBoxes(baseApi.getRegions().getBoxRects());
      }
      if (ViewfinderView.DRAW_TEXTLINE_BOXES) {
        ocrResult.setTextlineBoundingBoxes(baseApi.getTextlines().getBoxRects());
      }
      if (ViewfinderView.DRAW_STRIP_BOXES) {
        ocrResult.setStripBoundingBoxes(baseApi.getStrips().getBoxRects());
      }

      // Always get the word bounding boxes--we want it for annotating the bitmap after the user
      // presses the shutter button, in addition to maybe wanting to draw boxes/words during the
      // continuous mode recognition.
      ocrResult.setWordBoundingBoxes(baseApi.getWords().getBoxRects());

      //      if (ViewfinderView.DRAW_CHARACTER_BOXES || ViewfinderView.DRAW_CHARACTER_TEXT) {
      //        ocrResult.setCharacterBoundingBoxes(baseApi.getCharacters().getBoxRects());
      //      }
    } catch (RuntimeException e) {
      Log.e(
          "OcrRecognizeAsyncTask",
          "Caught RuntimeException in request to Tesseract. Setting state to CONTINUOUS_STOPPED.");
      e.printStackTrace();
      try {
        baseApi.clear();
        activity.stopHandler();
      } catch (NullPointerException e1) {
        // Continue
      }
      return null;
    }
    timeRequired = System.currentTimeMillis() - start;
    ocrResult.setBitmap(bitmap);
    ocrResult.setText(textResult);
    ocrResult.setRecognitionTimeRequired(timeRequired);
    return ocrResult;
  }
Esempio n. 8
0
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   if (requestCode == 10) {
     if (resultCode == RESULT_OK) {
       byte[] datas = data.getExtras().getByteArray("data");
       baseApi.setImage(BitmapFactory.decodeByteArray(datas, 0, datas.length));
       tv_capture.setText(baseApi.getUTF8Text());
     }
   }
 }
Esempio n. 9
0
  public void doOCR(Bitmap bitmap) {
    Bitmap BiBitmap = Binary.preProcess(bitmap);
    mImage2.setImageBitmap(BiBitmap);
    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(datapath, language);
    // 必须加此行,tess-two要求BMP必须为此配置
    bitmap = BiBitmap.copy(Bitmap.Config.ARGB_8888, true);
    baseApi.setImage(bitmap);
    String result = baseApi.getUTF8Text();
    baseApi.clear();
    baseApi.end();

    mResult.setText(result);
  }
Esempio n. 10
0
  /**
   * 识别图片并取值
   *
   * @param bitmap
   * @return
   */
  public String decodeBitmapValue(Bitmap bitmap) {
    if (bitmap == null) {
      return null;
    }
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false);
    baseApi.setImage(bitmap); // 识别图片

    String value = baseApi.getUTF8Text();
    //		Log.d("tag", " the value is ===> " + value);
    baseApi.clear();
    baseApi.end();
    return value;
  }
 protected String tessProcess(Bitmap bMap) {
   TessBaseAPI tessapi = new TessBaseAPI();
   // tessapi.init("/storage/sdcard0/", "eng");
   tessapi.init(Environment.getExternalStorageDirectory().toString(), "eng");
   // ImageView image = (ImageView)findViewById(R.id.test_image);
   // Bitmap bMap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().toString() +
   // "/tessdata/sample_input.bmp");
   // image.setImageBitmap(bMap);
   tessapi.setImage(bMap);
   String txt = tessapi.getUTF8Text();
   tessapi.end();
   // Log.i(TAG, "OCR output:\n" + txt);
   // TextView my_out_1 = (TextView)findViewById(R.id.my_out);
   // my_out_1.setText("Hello:" + txt);
   return txt;
 }
Esempio n. 12
0
  public String getTextContent() {
    Log.d("whathaeljf", "The second image path is " + imagePath);
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath);

    /*
            Matrix matrix = new Matrix();
            matrix.postRotate(180);
            Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    */
    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.setDebug(true);
    baseApi.init(DATA_PATH, lang);

    baseApi.setImage(bitmap);
    String recognizedText = baseApi.getUTF8Text();
    return recognizedText;
  }
Esempio n. 13
0
  /*Begin citation: http://gaut.am/making-an-ocr-android-app-using-tesseract/
  gets the image from the external storage directory and uses the tess-two library
  to process the image and return the recognized text
   */
  public String getOCRText() {
    Bitmap bitmap = BitmapFactory.decodeFile(DIR + "ocrImage.jpg");

    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.setDebug(true);
    baseApi.init(DIR, "eng");
    baseApi.setImage(bitmap);

    String recognizedText = baseApi.getUTF8Text();
    baseApi.end();

    if ("eng".equalsIgnoreCase("eng")) {
      recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9 ]+", " ");
    }

    Log.d(DolchListActivity.TAG, recognizedText);

    return recognizedText.trim();
  }
Esempio n. 14
0
  @SmallTest
  public void testClear() {
    final String inputText = "hello";
    final Bitmap bmp = getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
    baseApi.setImage(bmp);

    // Ensure that the getUTF8Text() operation fails after clear() is called.
    baseApi.clear();
    String text = baseApi.getUTF8Text();

    assertNull("Received non-null result after clear().", text);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 15
0
  @SmallTest
  public void testSetVariable() {
    final String inputText = "hello";
    final Bitmap bmp = getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);

    // Ensure that setting the blacklist variable works.
    final String blacklistedCharacter = inputText.substring(1, 2);
    baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, blacklistedCharacter);
    baseApi.setImage(bmp);
    final String outputText = baseApi.getUTF8Text();
    assertFalse("Found a blacklisted character.", outputText.contains(blacklistedCharacter));

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 16
0
  private void textExtraction(Bitmap croppedPic) {
    int width, height;
    height = croppedPic.getHeight();
    width = croppedPic.getWidth();

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(croppedPic, 0, 0, paint);

    baseApi.setImage(bmpGrayscale);
    baseApi.setImage(baseApi.getThresholdedImage());
    String recognizedText = baseApi.getUTF8Text();
    recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9\\s]+", "");
    extractedText.setText(recognizedText);

    croppedImage.setImageBitmap(bmpGrayscale);
  }
Esempio n. 17
0
  @SmallTest
  public void testChoiceIterator() {
    final String inputText = "hello";
    final Bitmap bmp = TessBaseAPITest.getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TessBaseAPITest.TESSBASE_PATH, TessBaseAPITest.DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
    baseApi.setVariable(TessBaseAPI.VAR_SAVE_BLOB_CHOICES, TessBaseAPI.VAR_TRUE);

    // Ensure that text is recognized.
    baseApi.setImage(bmp);
    String recognizedText = baseApi.getUTF8Text();
    assertTrue("No recognized text found.", recognizedText != null && !recognizedText.equals(""));

    // Iterate through the results.
    ResultIterator iterator = baseApi.getResultIterator();
    List<Pair<String, Double>> choicesAndConfidences;
    iterator.begin();
    do {
      choicesAndConfidences = iterator.getChoicesAndConfidence(PageIteratorLevel.RIL_SYMBOL);
      assertNotNull("Invalid result.", choicesAndConfidences);

      for (Pair<String, Double> choiceAndConfidence : choicesAndConfidences) {
        String choice = choiceAndConfidence.first;
        Double conf = choiceAndConfidence.second;
        assertTrue("No choice value found.", choice != null && !choice.equals(""));
        assertTrue("Found an incorrect confidence value.", conf >= 0 && conf <= 100);
      }
    } while (iterator.next(PageIteratorLevel.RIL_SYMBOL));
    iterator.delete();

    assertNotNull("No ChoiceIterator values found.", choicesAndConfidences);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 18
0
  private void testGetUTF8Text(String language, int ocrEngineMode) {
    final String inputText = "hello";
    final Bitmap bmp = getTextImage(inputText, 640, 480);

    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, language, ocrEngineMode);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
    baseApi.setImage(bmp);

    // Ensure that the result is correct.
    final String outputText = baseApi.getUTF8Text();
    assertEquals("\"" + outputText + "\" != \"" + inputText + "\"", inputText, outputText);

    // Ensure getRegions() works.
    final Pixa regions = baseApi.getRegions();
    assertEquals("Found incorrect number of regions.", regions.size(), 1);
    regions.recycle();

    // Ensure getTextlines() works.
    final Pixa textlines = baseApi.getTextlines();
    assertEquals("Found incorrect number of textlines.", textlines.size(), 1);
    textlines.recycle();

    // Ensure getStrips() works.
    final Pixa strips = baseApi.getStrips();
    assertEquals("Found incorrect number of strips.", strips.size(), 1);
    strips.recycle();

    // Ensure getWords() works.
    final Pixa words = baseApi.getWords();
    assertEquals("Found incorrect number of words.", words.size(), 1);
    words.recycle();

    // Ensure getConnectedComponents() works.
    final Pixa connectedComponents = baseApi.getConnectedComponents();
    assertTrue("Connected components not found.", connectedComponents.size() > 0);
    connectedComponents.recycle();

    // Iterate through the results.
    final ResultIterator iterator = baseApi.getResultIterator();
    String lastUTF8Text;
    float lastConfidence;
    int[] lastBoundingBox;
    Rect lastBoundingRect;
    int count = 0;
    iterator.begin();
    do {
      lastUTF8Text = iterator.getUTF8Text(PageIteratorLevel.RIL_WORD);
      lastConfidence = iterator.confidence(PageIteratorLevel.RIL_WORD);
      lastBoundingBox = iterator.getBoundingBox(PageIteratorLevel.RIL_WORD);
      lastBoundingRect = iterator.getBoundingRect(PageIteratorLevel.RIL_WORD);
      count++;
    } while (iterator.next(PageIteratorLevel.RIL_WORD));
    iterator.delete();

    assertEquals("Found incorrect number of results.", count, 1);
    assertEquals("Found an incorrect result.", lastUTF8Text, outputText);
    assertTrue("Result was not high-confidence.", lastConfidence > 80);
    assertTrue("Result bounding box not found.", lastBoundingBox[2] > 0 && lastBoundingBox[3] > 0);

    boolean validBoundingRect =
        lastBoundingRect.left < lastBoundingRect.right
            && lastBoundingRect.top < lastBoundingRect.bottom;
    assertTrue("Result bounding box Rect is incorrect.", validBoundingRect);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Esempio n. 19
0
  protected void onPhotoTaken() {
    _taken = true;

    /*BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4;


    Bitmap oldbitmap = BitmapFactory.decodeFile(_path, options);


    Pix pix = ReadFile.readBitmap(oldbitmap);*/

    BitmapFactory.Options otherOptions = new BitmapFactory.Options();
    otherOptions.inScaled = false;
    Bitmap oldbitmap2 = BitmapFactory.decodeFile(_path, otherOptions);

    Pix pix = ReadFile.readBitmap(oldbitmap2);

    pix = AdaptiveMap.backgroundNormMorph(pix);
    pix = Enhance.unsharpMasking(pix);
    pix = GrayQuant.pixThresholdToBinary(pix, 125);

    // pix = Scale.scale(pix, 10, 10);

    Bitmap bitmap = WriteFile.writeBitmap(pix);

    try {
      ExifInterface exif = new ExifInterface(_path);
      int exifOrientation =
          exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

      Log.v(TAG, "Orient: " + exifOrientation);

      int rotate = 0;

      switch (exifOrientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
          rotate = 90;
          break;
        case ExifInterface.ORIENTATION_ROTATE_180:
          rotate = 180;
          break;
        case ExifInterface.ORIENTATION_ROTATE_270:
          rotate = 270;
          break;
      }

      Log.v(TAG, "Rotation: " + rotate);

      if (rotate != 0) {

        // Getting width & height of the given image.
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();

        // Setting pre rotate
        Matrix mtx = new Matrix();
        mtx.preRotate(rotate);

        // Rotating Bitmap
        bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
      }

      // Convert to ARGB_8888, required by tess
      bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

    } catch (IOException e) {
      Log.e(TAG, "Couldn't correct orientation: " + e.toString());
    }

    // _image.setImageBitmap( bitmap );

    Log.v(TAG, "Before baseApi");

    TessBaseAPI baseApi = new TessBaseAPI();
    // baseApi.setDebug(true);
    baseApi.init(DATA_PATH, lang);
    baseApi.setImage(bitmap);

    String recognizedText = baseApi.getUTF8Text();

    baseApi.end();

    // You now have the text in recognizedText var, you can do anything with it.
    // We will display a stripped out trimmed alpha-numeric version of it (if lang is eng)
    // so that garbage doesn't make it to the display.

    Log.v(TAG, "OCRED TEXT: " + recognizedText);

    /*if ( lang.equalsIgnoreCase("eng") ) {
        recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");
    }*/

    recognizedText = recognizedText.trim();

    Intent myIntent = new Intent(OCR.this, getInfo.class);
    myIntent.putExtra("text", recognizedText); // Optional parameters
    OCR.this.startActivity(myIntent);

    // Cycle done.
  }