Чтение номерного знака в Android JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Чтение номерного знака в Android Java

Сообщение Anonymous »

Я пытаюсь прочитать номерные знаки транспортных средств в Android с помощью Java. Приведенный ниже код продолжает давать сообщение: пластина не обнаружена. Нужно ли в поле предварительного просмотра (Androidx.camera.view.previewView) какие -то конкретные атрибуты или размер? Нужно ли добавить какие -либо конкретные зависимости? < /P>
Что я делаю не так? < /P>
public class MainActivity extends AppCompatActivity {
private PreviewView previewView;
private ImageCapture imageCapture;
private Executor executor = Executors.newSingleThreadExecutor();

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

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

findViewById(R.id.captureButton).setOnClickListener(v -> captureAndRecognizeText());
}

private void startCamera() {
ListenableFuture cameraProviderFuture =
ProcessCameraProvider.getInstance(this);

cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
Preview preview = new Preview.Builder().build();
imageCapture = new ImageCapture.Builder().build();

CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;

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

} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}, ContextCompat.getMainExecutor(this));
}

private void captureAndRecognizeText() {
File photoFile = new File(getCacheDir(), "plate.jpg");

ImageCapture.OutputFileOptions outputFileOptions =
new ImageCapture.OutputFileOptions.Builder(photoFile).build();

imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
runOnUiThread(() -> recognizeText(photoFile));
}

@Override
public void onError(@NonNull ImageCaptureException exception) {
Log.e("Camera", "Photo capture failed: " + exception.getMessage(), exception);
}
});
}

private void recognizeText(File imageFile) {
InputImage image;
try {
image = InputImage.fromFilePath(this, Uri.fromFile(imageFile));
} catch (IOException e) {
e.printStackTrace();
return;
}

TextRecognizer recognizer = TextRecognition.getClient();
recognizer.process(image)
.addOnSuccessListener(visionText -> {
String resultText = visionText.getText();
// Filter only possible license plate format (example logic)
for (Text.TextBlock block : visionText.getTextBlocks()) {
String text = block.getText();
if (text.matches(".*[A-Z]{2,3}\\s*\\d{3,4}.*")) {
Toast.makeText(this, "Plate: " + text, Toast.LENGTH_LONG).show();
return;
}
}
Toast.makeText(this, "Plate not detected", Toast.LENGTH_LONG).show();
})
.addOnFailureListener(
e -> Toast.makeText(this, "Failed to read text", Toast.LENGTH_SHORT).show());
}
}
< /code>
Я добавил разрешения < /p>





...




Подробнее здесь: https://stackoverflow.com/questions/796 ... droid-java

Вернуться в «JAVA»