Anonymous
Android Application ID OCR (Java XML) mit Google MLKI
Post
by Anonymous » 28 Feb 2025, 04:50
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
}
}
1740714657
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]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 } } [/code]