Java 使用Firebase ML工具包的简单OCR应用程序存在问题

Java 使用Firebase ML工具包的简单OCR应用程序存在问题,java,android,firebase-mlkit,Java,Android,Firebase Mlkit,我是Android开发新手,但在使用Java中的Firebase创建第一个OCR应用程序的过程中,我一直在学习。我基本上是按照youtube视频创建应用程序的,但我有以下问题需要帮助: 1) 如果我在横向拍摄照片,应用程序可以检测到文本。然而,当我拍摄肖像照片时,拍摄的图像会旋转90度,应用程序无法检测到图像中的文本。我最简单的解决方法是什么 2) 目前,我用手机摄像头拍摄照片,该图像显示在应用程序中。我单击我的检测文本按钮,文本出现。但是我想在图片上看到一些边界框,显示Firebase ML

我是Android开发新手,但在使用Java中的Firebase创建第一个OCR应用程序的过程中,我一直在学习。我基本上是按照youtube视频创建应用程序的,但我有以下问题需要帮助:

1) 如果我在横向拍摄照片,应用程序可以检测到文本。然而,当我拍摄肖像照片时,拍摄的图像会旋转90度,应用程序无法检测到图像中的文本。我最简单的解决方法是什么

2) 目前,我用手机摄像头拍摄照片,该图像显示在应用程序中。我单击我的检测文本按钮,文本出现。但是我想在图片上看到一些边界框,显示Firebase ML kit看到的内容

3) 此外,当我拍摄智能手机pin屏幕的简单屏幕截图时,该应用程序可以检测到大多数数字,但似乎总是漏掉一个。我假设这是因为我使用的是Firebase ML kit的本地电话版本,但是否有可能在不在云上运行的情况下使其更准确。我目前正在使用:

implementation 'com.google.firebase:firebase-core:15.0.2'

implementation 'com.google.firebase:firebase-ml-vision:16.0.0'
谢谢

以下是我的主要活动中的代码(在Firebase上几乎是一样的):

公共类MainActivity扩展了AppCompatActivity{ 按钮captureImageBtn,detectTextBtn; 图像视图图像视图; 文本视图文本视图,输出文本; 位图图像位图; 静态最终整数请求\图像\捕获=1; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar ActionBar=getSupportActionBar(); actionBar.setTitle(“图像阅读器”); actionBar.setDisplayUseLogoEnabled(true); actionBar.setDisplayShowHomeEnabled(真); CaptureMageBTN=findViewById(R.id.capture\u image\u btn); detectTextBtn=findViewById(R.id.detect\u text\u image\u btn); imageView=findViewById(R.id.image\u视图); textView=findviewbyd(R.id.text\u显示); outputText=findViewById(R.id.outputText); outputText.setVisibility(View.INVISIBLE); setImageResource(R.mipmap.mi2_前台); CaptureMageBTN.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ DispatchTakePictureContent(); textView.setText(“”); } }); detectTextBtn.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ detectTextFromImage(); } }); } 公共布尔onCreateOptions菜单(菜单){ getMenuInflater().充气(R.menu.main,menu); 返回super.onCreateOptions菜单(菜单); } 私有无效DispatchTakePictureContent(){ Intent takePictureIntent=新的意图(MediaStore.ACTION\u IMAGE\u CAPTURE); if(takePictureContent.resolveActivity(getPackageManager())!=null){ startActivityForResult(获取图片内容、请求图像捕获); } } @凌驾 受保护的void onActivityResult(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据); if(requestCode==REQUEST\u IMAGE\u CAPTURE&&resultCode==RESULT\u OK){ Bundle extras=data.getExtras(); imageBitmap=(位图)extras.get(“数据”); 设置图像位图(图像位图); } } 私有无效检测TextFromImage() { FirebaseVisionImage FirebaseVisionImage=FirebaseVisionImage.fromBitmap(图像位图); FirebaseVisionTextDetector FirebaseVisionTextDetector=FirebaseVision.getInstance().getVisionTextDetector(); FireBaseVisionExtDetector.detectInImage(firebaseVisionImage).addOnSuccessListener(新OnSuccessListener(){ @凌驾 成功时公共无效(FirebaseVisionText FirebaseVisionText){ displayTextFromImage(firebaseVisionText); } }).addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常e){ Toast.makeText(MainActivity.this,“错误:+e.getMessage(),Toast.LENGTH_SHORT).show(); } }); } 私有void displayTextFromImage(FirebaseVisionText FirebaseVisionText){ List blockList=firebaseVisionText.getBlocks(); if(blockList.size()=0){ Toast.makeText(MainActivity.this,“在图像中找不到文本。”,Toast.LENGTH_SHORT.show(); }否则{ int i=0; 字符串完整=”; 对于(FirebaseVisionText.Block块:FirebaseVisionText.getBlocks()){ String text=block.getText(); complete=complete.concat(文本+“”); outputText.setVisibility(View.VISIBLE); outputText.setText(完成); } } }

'''public class MainActivity extends AppCompatActivity {
Button captureImageBtn, detectTextBtn;
ImageView imageView;
TextView textView, outputText;
Bitmap imageBitmap;
static final int REQUEST_IMAGE_CAPTURE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("Image Reader");
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setDisplayShowHomeEnabled(true);

    captureImageBtn = findViewById(R.id.capture_image_btn);
    detectTextBtn = findViewById(R.id.detect_text_image_btn);
    imageView = findViewById(R.id.image_view);
    textView = findViewById(R.id.text_display);

    outputText = findViewById(R.id.outputText);
    outputText.setVisibility(View.INVISIBLE);

    imageView.setImageResource(R.mipmap.mi2_foreground);

    captureImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dispatchTakePictureIntent();
            textView.setText("");
        }
    });

    detectTextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            detectTextFromImage();
        }
    });
}

public boolean onCreateOptionsMenu(Menu menu){

    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        imageBitmap = (Bitmap) extras.get("data");
        imageView.setImageBitmap(imageBitmap);
    }
}

private void detectTextFromImage()
{
    FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(imageBitmap);
    FirebaseVisionTextDetector firebaseVisionTextDetector = FirebaseVision.getInstance().getVisionTextDetector();
    firebaseVisionTextDetector.detectInImage(firebaseVisionImage).addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
        @Override
        public void onSuccess(FirebaseVisionText firebaseVisionText) {
            displayTextFromImage(firebaseVisionText);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(MainActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

private void displayTextFromImage(FirebaseVisionText firebaseVisionText) {
    List<FirebaseVisionText.Block> blockList = firebaseVisionText.getBlocks();
    if (blockList.size() == 0) {
        Toast.makeText(MainActivity.this, "No Text Found in Image.", Toast.LENGTH_SHORT).show();
    } else {
        int i = 0;
        String complete ="";
        for (FirebaseVisionText.Block block : firebaseVisionText.getBlocks()) {
            String text = block.getText();
            complete = complete.concat(text+" ");
        outputText.setVisibility(View.VISIBLE);
        outputText.setText(complete);
    }
}