使用Firebase ML Kit的简单OCR应用的java问题
我是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上基本相同):
'''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);
}
}
}
共 (0) 个答案