Как мы можем улучшить вывод результатов распознавания текста комплектом Firebase ML на устройстве? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь интегрировать распознавание текста в мобильные устройства для извлечения чисел из изображений. Для этого я решил использовать Firebase ml kit , поскольку он предоставляет решение на устройстве (действительно полезно, когда у вас нет соединения inte rnet для связи с API).

Я интегрировал Firebase ml kit в свое приложение и использую функцию getOnDeviceTextRecognizer () для выполнения операции OCR, но возвращаемый результат совсем не годится.

Как вы можете видеть на примере, результаты плохие, даже если в качестве входных данных предоставлено довольно хорошее изображение.

enter image description here

Это это пример кода, используемого для запуска OCR (очень похожий на тот, который приведен в официальной документации)

public class PictureActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.test2));
            recognizeText(image);

        } catch(IOException ex){
            Log.d("exception","test");
        }
    }

    private void recognizeText(FirebaseVisionImage image) {

        // [START get_detector_default]
        FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance()
                .getOnDeviceTextRecognizer();
        // [END get_detector_default]

        // [START run_detector]
        Task<FirebaseVisionText> result =
                detector.processImage(image)
                        .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
                            @Override
                            public void onSuccess(FirebaseVisionText firebaseVisionText) {
                                // Task completed successfully
                                // [START_EXCLUDE]
                                // [START get_text]
                                for (FirebaseVisionText.TextBlock block : firebaseVisionText.getTextBlocks()) {
                                    Rect boundingBox = block.getBoundingBox();
                                    Point[] cornerPoints = block.getCornerPoints();
                                    String text = block.getText();
                                    Log.d("TESTING", text);
                                    setContentView(R.layout.activity_picture);
                                    TextView output = findViewById(R.id.outputResult);
                                    output.setText(text);

                                    for (FirebaseVisionText.Line line: block.getLines()) {
                                        // ...
                                        for (FirebaseVisionText.Element element: line.getElements()) {
                                            // ...
                                        }
                                    }
                                }
                                // [END get_text]
                                // [END_EXCLUDE]
                            }
                        })
                        .addOnFailureListener(
                                new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        // Task failed with an exception
                                        // ...
                                    }
                                });
        // [END run_detector]
    }

Мне интересно, есть ли какие-то параметры, которые мы можем изменить, чтобы оптимизировать OCR для нашего например, вы можете сделать с Tesseract. Я проверил документацию, но не нашел никакого полезного предложения.

Кроме того, я не сфокусирован на Firebase ml kit. Так что, если у вас есть другие предложения, которые могут работать на мобильных устройствах (без запросов к inte rnet API), не стесняйтесь поделиться.

Tesseract была хорошей альтернативой, но все android найденные обертки больше не поддерживаются.

1 Ответ

1 голос
/ 19 марта 2020

Попробуйте использовать облачный режим, FirebaseVisionTextRecognizer Detector = FirebaseVision.getInstance () .getCloudTextRecognizer ();

, и если у вас есть определенный тип c изображений, то вы можете создать пользовательские модели машинного обучения. и загрузите эту модель в Firebase, тогда вы получите 99% точности.

для подробностей проверьте ниже ссылку https://firebase.google.com/docs/ml-kit/android/use-custom-models

...