Firebase ML套件和cameraview

时间:2019-10-24 03:17:03

标签: android kotlin android-camera firebase-mlkit

我正在尝试使用ML kit和camera view编写一个实时QR码扫描仪。但是,成功或失败都不会触发。我已经尝试过更改图像格式(即使相机视图文档指出了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")
        }
    }
}

0 个答案:

没有答案