2017-01-09 12 views
0

Я использую tessaract для сканирования текста и преобразования его в строку, насколько это хорошо, но у меня проблема с полутоновым изображением. У меня есть изображения, снятые с моей камерой, и я хочу получить их в оттенках серого и для их масштабирования, чтобы сохранить некоторую память, я сделал это, используя BitmapFactory.Options и метод inSimpleSize (поместите его в 4). После этого я попытался получить изображение из папки, в которой она находится, и полутоновой. Но не получилось - текст не может быть извлечен из фотографии. Однако, когда я удалил гранулирование, работала. Вот мой код:Оттенки серого не влияют на мое изображение

 BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 4; 
     Bitmap bitmap = BitmapFactory.decodeFile(imgUri.getPath() , options); 
     // bitmap = toGrayscale(bitmap); 
     result = extractText(bitmap); 

     textView.setText(result); 

Метод extractText просто вызывает Tessaract и сканировать изображение, и это работает отлично без grayscaling.

Мой toGrayscale код, который я нашел в Интернете (он работает, я попробовал его в качестве фильтра и я была счастлива с ним):

public Bitmap toGrayscale(Bitmap bmpOriginal) 
    { 
     int width, height; 
     height = bmpOriginal.getHeight(); 
     width = bmpOriginal.getWidth(); 

     Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 
     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(bmpOriginal, 0, 0, paint); 
     return bmpGrayscale; 
    } 

Вот мой код для съемки фотографий с камеры:

if (captureImg != null) { 
     captureImg.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startCameraActivity(); 
      } 
    }); 
private void startCameraActivity() { 
    try { 
     String IMGS_PATH = Environment.getExternalStorageDirectory().toString() + "/Noetic/imgs"; 
     prepareDirectory(IMGS_PATH); 

     String img_path = IMGS_PATH + "/ocr.jpg"; 

     outputFileUri = Uri.fromFile(new File(img_path)); 

     final Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takePictureIntent, PHOTO_REQUEST_CODE); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} 

Я искал решение, но ничего не нашел. У меня есть некоторые теории, почему это не работает - один из них заключается в том, что мой метод градации серого создает тот же образ, но новый (так что BitmapFactory.Options.getSampleSize становится бесполезным). Любая помощь будет очень полезна. Спасибо заранее!

ответ

0

Попробуйте использовать Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); вместо Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);