Android Application ID OCR (Java XML) mit Google MLKIAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Android Application ID OCR (Java XML) mit Google MLKI

Post by Anonymous »

Ich habe eine Hardtime -Verarbeitung, ich möchte, dass mein OCR ohne die Verwendung von Regex ist. Ich möchte, dass dieser Mlkit es für mich ermittelt, wenn es Name, Adresse, ID -Nummer und Nationalität ist, wenn eine dieser Informationen in der ID vorhanden ist. Daher wird. Art des Problems Es gibt mir auch Datenkonsistenz. < /p>

Code: Select all

package com.system.universal_idscanner;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.util.Size;
import android.util.SparseArray;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCaptureException;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.google.android.gms.vision.Frame;
import com.google.android.gms.vision.text.TextBlock;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.text.TextRecognition;
import com.google.mlkit.vision.text.TextRecognizer;
import com.google.mlkit.vision.text.latin.TextRecognizerOptions;

import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_CAMERA_PERMISSION = 100;
private PreviewView previewViewer;
private ImageCapture imageCapture;
private ExecutorService cameraExecutor;

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

previewViewer = findViewById(R.id.previewView);
findViewById(R.id.captureButton).setOnClickListener(v -> captureImage());

cameraExecutor = Executors.newSingleThreadExecutor();

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
}

private void startCamera() {
ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
Preview preview = new Preview.Builder().build();
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK) // Use front camera
.build();

imageCapture = new ImageCapture.Builder()
.setTargetResolution(new Size(1920, 1080))
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.setJpegQuality(100) // Best quality
.build();

preview.setSurfaceProvider(previewViewer.getSurfaceProvider());
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);

} catch (Exception e) {
Log.e("CameraX", "Error starting camera: " + e.getMessage());
}
}, ContextCompat.getMainExecutor(this));
}

private void captureImage() {
File file = new File(getExternalFilesDir(null), "captured_image.jpg");
ImageCapture.OutputFileOptions options = new ImageCapture.OutputFileOptions.Builder(file).build();

imageCapture.takePicture(options, cameraExecutor, new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
processImage(file);
}

@Override
public void onError(@NonNull ImageCaptureException exception) {
Log.e("CameraX", "Error capturing image: " + exception.getMessage());
}
});
}

private void processImage(File imageFile) {
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());

// Check image size
if (bitmap.getWidth() < 720 || bitmap.getHeight() <  1280) {
//DO SOMETHING
return;
}

// Initialize the Google Play Services ML Kit TextRecognizer
com.google.android.gms.vision.text.TextRecognizer recognizer =
new com.google.android.gms.vision.text.TextRecognizer.Builder(this).build();

if (!recognizer.isOperational()) {
Log.e("MLKit", "Text recognition dependencies are not yet available.");
//DO SOMETHING
return;
}

// Process the image
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
SparseArray textBlocks = recognizer.detect(frame);

StringBuilder extractedText = new StringBuilder();
for (int i = 0; i < textBlocks.size(); i++) {
TextBlock textBlock = textBlocks.valueAt(i);
extractedText.append(textBlock.getValue()).append("\n");
}

String result = extractedText.toString().trim();
if (result.isEmpty()) {
//DO SOMETHING
} else {
// Call extractIDDetails to parse the ID details
extractIDDetails(result);
}
}

private void extractIDDetails(String text) {
StringBuilder extractedData = new StringBuilder();
String[] lines = text.split("\n");

for (String line : lines) {
line = line.trim();
if (!line.isEmpty()) {  // Avoid adding empty lines
extractedData.append(line).append("\n");
}
}

// Pass extracted details to IDDetailsActivity
Intent intent = new Intent(this, IDDetailsActivity.class);
intent.putExtra("extractedData", extractedData.toString());

runOnUiThread(() -> startActivity(intent)); // Start activity in UI thread
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post