首页 > 解决方案 > 等待两个异步 firebase ml 视觉方法结果以在第三种方法中使用它们的最佳方法

问题描述

使用 firebase ml vision 识别图像中的二维码和/或文本时。等待异步文本和条形码检测器方法解决的最佳方法是什么,以便我可以在第三种方法中利用它们的结果。

我知道我可以从每个异步方法“onsuccess”侦听器中调用一个替代方法来设置一个“hasReturned”变量,并且只有在两种方法都返回后才继续,但我正在寻找正确的方法来做到这一点。

private void firebaseRecognitionFromImage(FirebaseVisionImage image) {

    //detect qr code
    FirebaseVisionBarcodeDetectorOptions options = new FirebaseVisionBarcodeDetectorOptions.Builder().setBarcodeFormats(FirebaseVisionBarcode.FORMAT_ALL_FORMATS).build();
    FirebaseVisionBarcodeDetector qrDetector = FirebaseVision.getInstance().getVisionBarcodeDetector(options);
    qrDetector.detectInImage(image).addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
        @Override
        public void onSuccess(List<FirebaseVisionBarcode> barcodes) { /* RESULT 1 */ }
    });

    //detect text
    FirebaseVisionTextRecognizer textDetector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
    textDetector.processImage(image).addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
        @Override
        public void onSuccess(FirebaseVisionText texts) { /* RESULT 2 */ }
    });

    //process qr code and text information or lack thereof
    thirdMedthod("RESULT 1", "RESULT 2");
}

标签: javaandroidfirebaseasynchronousfirebase-mlkit

解决方案


您应该使用Tasks.whenAll(). 它将创建一个新的 Task 对象,该对象在其他任务完成时完成。

Task<List<FirebaseVisionBarcode>> t1 = qrDetector.detectInImage(image);
Task<FirebaseVisionText> t2 = textDetector.processImage(image);
Tasks.whenAll(t1, t2).addOnSuccessListener(new OnSuccessListener<Void>() {
    // check the results of t1 and t2
});

此博客系列中了解有关Play Services Tasks API的更多信息。


推荐阅读