Сканер штрих-кода ML Kit дает пустой вывод - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы со сканером штрих-кода ML Kit. Когда я пытаюсь декодировать образец QR-кода,

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.qr_code_sample);
        FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
        FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance().getVisionBarcodeDetector();
        Task<List<FirebaseVisionBarcode>> result = detector.detectInImage(image)
                .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
                    @Override
                    public void onSuccess(List<FirebaseVisionBarcode> barcodes) {
                        for (FirebaseVisionBarcode barcode:barcodes) {
                            Log.e("Log", "QR Code: "+barcode.getUrl().getUrl());
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("Log", "Decode QR Code failed");
                    }
                });

Вывод выглядит так:

QR Code: ""

Как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Чтобы извлечь заголовок и URL из штрих-кода, вам нужно иметь Url Bookmark внутри штрих-кода, а не только Url.

Необработанные данные штрих-кода, содержащие закладку URL, будут выглядеть примерно так: MEBKM: TITLE: MyBookmark; URL-адрес: www.google.com ;;

Когда вы используете ML KIT для сканирования штрих-кода,состоит только из URL-адреса и вы получаете необработанные данные следующим образом: www.google.com

Таким образом, чтобы иметь возможность извлекать данные заголовка и URL-адреса из объекта типа FirebaseVisionBarcode.UrlBookmark, необходимо, чтобы эти данные были внутри этого объекта.

Попробуйте сгенерировать QR-код здесь: https://www.montreallisting.ca/article/qr-code-quick-response-scan-mobile-android-iphone-blackberry/, а затем использовать эту картинку для извлечения данных, которые вы хотите, и вы увидите, как разница.

0 голосов
/ 11 мая 2018

В соответствии с API Reference , getUrl() составляет:

set iff getValueType () is TYPE_URL

Таким образом, ваш штрих-код, вероятно, не является URL / закладкой, или ML Kit не распознает его как таковой.

Я рекомендую напечатать эти 3 значения:

@Override
    public void onSuccess(List<FirebaseVisionBarcode> barcodes) {
        for (FirebaseVisionBarcode barcode:barcodes) {
            Log.e("Log", "QR Code: "+barcode.getDisplayValue()); //Returns barcode value in a user-friendly format.
            Log.e("Log", "Raw Value: "+barcode.getRawValue());//Returns barcode value as it was encoded in the barcode. 
            Log.e("Log", "Code Type: "+barcode.getValueType()); //This will tell you the type of your barcode
        }
    }

Вы, вероятно, найдете желаемый результат в одной из первых двух строк. В третьей строке указывается тип сканированного штрих-кода.

...