@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();
  }
  // 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;
  }
  @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();
  }
  @SmallTest
  public void testProgressValues() {
    final String inputText = "hello";
    final Bitmap bmp = getTextImage(inputText, 640, 480);
    final Rect imageBounds = new Rect(0, 0, bmp.getWidth(), bmp.getHeight());

    class Notifier implements ProgressNotifier {
      public boolean receivedProgress = false;

      @Override
      public void onProgressValues(ProgressValues progressValues) {
        receivedProgress = true;
        testProgressValues(progressValues, imageBounds);
      }
    }

    final Notifier notifier = new Notifier();

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

    // Ensure that we receive a progress callback.
    baseApi.getHOCRText(0);
    assertTrue(notifier.receivedProgress);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Example #5
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();
  }
Example #6
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);
  }
  @SmallTest
  public void testInit() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Attempt to shut down the API.
    baseApi.end();
  }
  @SmallTest
  public void testInit_ocrEngineMode() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    boolean result = baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE, TessBaseAPI.OEM_TESSERACT_ONLY);

    assertTrue("Init was unsuccessful.", result);

    // Attempt to shut down the API.
    baseApi.end();
  }
  @SmallTest
  public void testGetInitLanguagesAsString() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Check the last-used language code.
    String lang = baseApi.getInitLanguagesAsString();
    assertEquals("Got incorrect init languages value.", lang, DEFAULT_LANGUAGE);

    // Attempt to shut down the API.
    baseApi.end();
  }
Example #10
0
  @SmallTest
  public void testSetImage_pix() throws IOException {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Set the image to a Pix.
    Pix pix = new Pix(640, 480, 32);
    baseApi.setImage(pix);

    // Attempt to shut down the API.
    baseApi.end();
    pix.recycle();
  }
Example #11
0
  @SmallTest
  public void testSetImage_bitmap() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Set the image to a Bitmap.
    final Bitmap bmp = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888);
    baseApi.setImage(bmp);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Example #12
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);
  }
Example #13
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;
 }
Example #15
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();
  }
Example #16
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();
  }
Example #17
0
  @SmallTest
  public void testSetImage_file() throws IOException {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Create an image file.
    File file = File.createTempFile("testSetImage", ".bmp");
    FileOutputStream fileStream = new FileOutputStream(file);

    Bitmap bmp = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888);
    bmp.compress(CompressFormat.JPEG, 85, fileStream);

    // Set the image to a File.
    baseApi.setImage(file);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Example #18
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();
  }
Example #19
0
  @SmallTest
  public void testGetThresholdedImage() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Set the image to a Bitmap.
    final Bitmap bmp = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888);
    baseApi.setImage(bmp);

    // Check the size of the thresholded image.
    Pix pixd = baseApi.getThresholdedImage();
    assertNotNull("Thresholded image is null.", pixd);
    assertEquals(bmp.getWidth(), pixd.getWidth());
    assertEquals(bmp.getHeight(), pixd.getHeight());

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
    pixd.recycle();
  }
Example #20
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();
  }
Example #21
0
  @SmallTest
  public void testSetPageSegMode() {
    // Attempt to initialize the API.
    final TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);

    // Check the default page segmentation mode.
    assertEquals(
        "Found unexpected default page segmentation mode.",
        baseApi.getPageSegMode(),
        DEFAULT_PAGE_SEG_MODE);

    // Ensure that the page segmentation mode can be changed.
    final int newPageSegMode = TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR;
    baseApi.setPageSegMode(newPageSegMode);
    assertEquals(
        "Found unexpected page segmentation mode.", baseApi.getPageSegMode(), newPageSegMode);

    // Attempt to shut down the API.
    baseApi.end();
  }
Example #22
0
  private void testGetHOCRText(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, DEFAULT_LANGUAGE);
    baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
    baseApi.setImage(bmp);

    // Ensure that getHOCRText() produces a result.
    final String hOcr = baseApi.getHOCRText(0);
    assertNotNull("HOCR result not found.", hOcr);
    assertTrue(hOcr.length() > 0);

    final String outputText = Html.fromHtml(hOcr).toString().trim();
    assertEquals(inputText, outputText);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }
Example #23
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();
  }
Example #24
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.
  }
 @Override
 protected void onDestroy() {
   super.onDestroy();
   baseApi.end();
 }
Example #26
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();
  }
Example #27
0
  @SmallTest
  public void testProgressValues_setRectangle() {
    class Notifier implements ProgressNotifier {
      public boolean receivedProgress = false;
      private Rect bounds;

      public void reset(Rect bounds) {
        this.bounds = bounds;
        receivedProgress = false;
      }

      @Override
      public void onProgressValues(ProgressValues progressValues) {
        receivedProgress = true;
        testProgressValues(progressValues, bounds);
      }
    }

    final Notifier notifier = new Notifier();

    final int width = 640;
    final int height = 480;
    final Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    final Paint paint = new Paint();
    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 Canvas canvas = new Canvas(bmp);
    canvas.drawColor(Color.WHITE);
    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);

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

    // Attempt to restrict recognition to a sub-rectangle of the image.
    final Rect left = new Rect(0, 0, width / 2, height);
    baseApi.setRectangle(left);
    notifier.reset(left);

    // Ensure a progress callback is received.
    baseApi.getHOCRText(0);
    assertTrue(notifier.receivedProgress);

    // Attempt to restrict recognition to a sub-rectangle of the image.
    final Rect right = new Rect(width / 2 + 5, 7, width - 5, height - 7);
    baseApi.setRectangle(right);
    notifier.reset(right);

    // Ensure a progress callback is received.
    baseApi.getHOCRText(0);
    assertTrue(notifier.receivedProgress);

    // Attempt to shut down the API.
    baseApi.end();
    bmp.recycle();
  }