Android-Ocr 在人像中使用 Tesseract

标签 android ocr zxing tesseract portrait

我在此链接中使用了 ocr 示例 https://github.com/rmtheis/android-ocr 一切正常,但我想在纵向 View 中使用它,我按照此链接中的步骤操作,Zxing Camera in Portrait mode on Android , 在纵向模式下启用 ocr 测试。 View 现在是纵向的,但相机仍在以横向模式拍照。

有什么帮助吗? enter image description here

enter image description here

  final class PreviewCallback implements Camera.PreviewCallback {

  private static final String TAG = PreviewCallback.class.getSimpleName();

  private final CameraConfigurationManager configManager;
  private Handler previewHandler;
  private int previewMessage;

  PreviewCallback(CameraConfigurationManager configManager) {
  this.configManager = configManager;
  }

  void setHandler(Handler previewHandler, int previewMessage) {
  this.previewHandler = previewHandler;
  this.previewMessage = previewMessage;
  }

 // (NV21) format.
 @Override
  public void onPreviewFrame(byte[] data, Camera camera) {
  Point cameraResolution = configManager.getCameraResolution();
  Handler thePreviewHandler = previewHandler;
  if (cameraResolution != null && thePreviewHandler != null) {
  Message message = thePreviewHandler.obtainMessage(previewMessage, cameraResolution.x,
      cameraResolution.y, data);
   message.sendToTarget();
   previewHandler = null;
   } else {
    Log.d(TAG, "Got preview callback, but no handler or resolution available");
   }
   }

最佳答案

您是否通过此方法使用预览数据:

public void onPreviewFrame(byte[] data, Camera camera) {}

如果是,那么我可以帮助你,因为我正在做非常相似的项目(即将开源)

这是我用来旋转预览图像的代码

public static Bitmap getBitmapImageFromYUV(byte[] data, int width,
        int height, int degree, Rect rect) {
    Bitmap bitmap = getBitmapImageFromYUV(data, width, height, rect);
    return rotateBitmap(bitmap, degree,rect);

}

public static Bitmap rotateBitmap(Bitmap source, float angle, Rect rect) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);

    source = Bitmap.createBitmap(source, 0, 0, source.getWidth(),
            source.getHeight(), matrix, true);
    source = Bitmap.createBitmap(source, rect.left, rect.top, rect.width(), rect.height());

    if(mShouldSavePreview)
        saveBitmap(source);
    return source;

}

public static Bitmap getBitmapImageFromYUV(byte[] data, int width,
        int height, Rect rect) {
    YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height,
            null);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    yuvimage.compressToJpeg(new Rect(0, 0, width, height), 90, baos);

    byte[] jdata = baos.toByteArray();
    BitmapFactory.Options bitmapFatoryOptions = new BitmapFactory.Options();
    bitmapFatoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length,
            bitmapFatoryOptions);

    Log.d(TAG,"getBitmapImageFromYUV w:"+bmp.getWidth()+" h:"+bmp.getHeight());


    return bmp;
}

关于Android-Ocr 在人像中使用 Tesseract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126877/

相关文章:

android - 9-patch 编辑器android studio突然黑

image-processing - 如何从文本图像中删除虚线带?

python - 如何使用python opencv删除文件夹中的特定图像

ios - MonoTouch,ZXing : Presenting ZXingScannerViewController failed

android - 如何使用zxing for android知道扫描结果的类型

android - 您如何从其源代码分发构建适用于 Android 的 FreeImage?

android - Android 中的自定义提醒弹出 View

php - 如何检测图像中的框并将它们作为单独的文件拉出?

java - 运行 zxing 的单元测试失败

Android Studio 错误 "output path is not specified for modules"