Firebase ML Kit и камера обзора - PullRequest
       56

Firebase ML Kit и камера обзора

0 голосов
/ 24 октября 2019

Я пытаюсь написать сканер QR-кода в реальном времени, используя комплект ML и просмотр камеры . Тем не менее, ни успех, ни провал никогда не вызывают. Я попытался изменить формат изображения (даже несмотря на то, что документация о просмотре камеры указывает NV21), но ничего не изменилось.

class ScanningQrActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_scan_qr)
        camera_view.setLifecycleOwner(this)

        val options = FirebaseVisionBarcodeDetectorOptions.Builder()
            .setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
            .build()
        camera_view.addFrameProcessor {
            extractDataFromFrame(it, options) {
                Log.e("QR Callback: ", it)
            }
        }
    }

    private fun getVisionImageFromFrame(frame : Frame) : FirebaseVisionImage {
        val data = frame.data

        val imageMetaData = FirebaseVisionImageMetadata.Builder()
            .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
            .setRotation(frame.rotation)
            .setHeight(frame.size.height)
            .setWidth(frame.size.width)
            .build()

        val image = FirebaseVisionImage.fromByteArray(data, imageMetaData)
        return image
    }

    private fun extractDataFromFrame(frame: Frame, options: FirebaseVisionBarcodeDetectorOptions, callback: (String) -> Unit) {
        val objectDetector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)
        objectDetector.detectInImage(getVisionImageFromFrame(frame))
            .addOnSuccessListener { objects ->
                objects.forEach { item ->
                    Log.e("QR: ", item.rawValue)
                }
            callback(objects.first().rawValue!!)
        }
            .addOnFailureListener {
                callback("Unable to detect an object")
        }
    }
}
...