Чтение информации о штрих-коде из растрового изображения с помощью комплекта ML

Я хочу получить некоторую информацию из штрих-кода с помощью моей камеры. Это работает, когда я использую png-изображение, загруженное с сайта, но когда я пытаюсь заставить его работать с фотографией, которую я сделал, он выводит мне пустой массив. Похоже, мне нужно сделать некоторые приготовления с изображением, чтобы заставить его работать. Вот мой код:

fun getTheBarCode(bitmap: Bitmap) {
    val options = FirebaseVisionBarcodeDetectorOptions.Builder()
            .setBarcodeFormats(
                    FirebaseVisionBarcode.FORMAT_AZTEC)
            .build()

    val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)
    val bm = BitmapFactory.decodeResource(getResources(), R.drawable.barcode) //this is the place where I can load my downloaded barcode to make everything work!
    val newBitmap = Bitmap.createScaledBitmap(bitmap, 300, 500, false)
    val image = FirebaseVisionImage.fromBitmap(newBitmap)

    photoImage.setImageBitmap(newBitmap)

    detector.detectInImage(image)
            .addOnSuccessListener {
                Log.d("Success", "Success")
                //empty array here, when I take picture.
            }
            .addOnFailureListener {
                Log.d("Failed", it.message)
            }
}

Вот как я получаю изображение с камеры

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            val photo = data.extras.get("data") as Bitmap

            getTheBarCode(photo)

        }
    }

Изменить:

Я сделал снимок своим телефоном, уменьшил его до 1500x1000 пикселей и поместил в каталог своего приложения, а затем загрузил в виде растрового изображения. До сих пор не работает.


person nutella_eater    schedule 15.05.2018    source источник
comment
1. Как и в другом ответе ниже, я подозреваю, что вы возвращаете миниатюру фотографии низкого качества. 2. В зависимости от типа штрих-кода, который вы пытаетесь проанализировать, требуются разные разрешения. А вот 1280*960 в большинстве случаев можно. См. общедоступную документацию здесь: firebase.google.com/docs/reference/android/com/google/firebase/. Кроме того, обнаружение штрих-кода осуществляется на устройстве, поэтому вам не нужно изменять размер изображения перед его передачей в API.   -  person Isabella Chen    schedule 16.05.2018
comment
@IsabellaChen, пожалуйста, проверьте комментарий ниже. Большие изображения также не работают.   -  person nutella_eater    schedule 16.05.2018
comment
Но вы все еще масштабируете его до 300 * 500? Не могли бы вы удалить логику изменения размера? Также попробуйте FirebaseVisionImage.fromFilePath. Если все еще не работает, поделитесь со мной изображением, и я посмотрю?   -  person Isabella Chen    schedule 16.05.2018
comment
привет решил проблему? Я также сталкиваюсь с той же проблемой, я использую фотографию полного качества после developer.android.com /training/camera/photobasics руководство... штрих-код не работает...   -  person anoop4real    schedule 12.07.2018


Ответы (1)


Используемый вами подход вернет вам только миниатюру фотографии (согласно https://developer.android.com/training/camera/photobasics) ... этого может быть недостаточно для того, что вы пытаетесь сделать. Эта ссылка также содержит информацию о том, как получить доступ к полноразмерной фотографии.

person John O'Reilly    schedule 15.05.2018
comment
Да, это была миниатюра. Поэтому я попытался сделать снимок, а затем сохранить его в формате png в своем проекте. Я загрузил его как растровое изображение и сделал сканирование. Опять получил пустой массив. Похоже, мне определенно нужно сделать некоторые приготовления с изображением, чтобы оно заработало! - person nutella_eater; 15.05.2018