我创建的应用必须从图像中识别条形码,尤其是QR码。研究表明,对我而言,最好使用Firebase的ML-Kit来执行此操作。我已遵循https://firebase.google.com/docs/ml-kit/android/read-barcodes此处提供的指南。
但是,问题是条形码检测器从不会真正失败,而是返回的条形码列表始终为空,大小为0。这是有效的QR码还是随机图片都没有关系。即使图像中有2个或更多QR码也没有。
我尝试了此处所述的解决方案:Firebase- ML Kit library fails to detect barcode in Samsung J5 device,并且还检查了各种YouTube指南,但均未成功。
这是扫描图像中的条形码的代码。参数是有效的图像,因为我还将这些图像保存到应用程序的Pictures目录中,该目录确实包含这些图像。
private void attemptToFindQRCode(byte[] imageBytes) throws CameraAccessException {
Bitmap bitmapImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length, null);
FirebaseVisionImage visionImage = FirebaseVisionImage.fromBitmap(bitmapImage);
FirebaseVisionBarcodeDetector detector = setUpQRDetector();
Task<List<FirebaseVisionBarcode>> result = detector.detectInImage(visionImage)
.addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
@Override
public void onSuccess(List<FirebaseVisionBarcode> barcodes) {
processVisionBarcodeResult(barcodes);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@android.support.annotation.NonNull Exception e) {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
我认为这可能与我设置条形码检测器的方式有关,所以这是该代码:
private FirebaseVisionBarcodeDetector setUpQRDetector(){
FirebaseApp.initializeApp(this);
FirebaseVisionBarcodeDetectorOptions options =
new FirebaseVisionBarcodeDetectorOptions.Builder()
.setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
.build();
return FirebaseVision.getInstance().getVisionBarcodeDetector(options);
}
我试图删除选件,以便检测器可以扫描任何有效的条形码,但仍然找不到任何东西。
任何帮助将不胜感激。