![](/img/trans.png)
[英]How can I find context and start a new Activity from Android firebase ML-Kit BarcodeScannerProcessor onSuccess
[英]Can't read barcodes contents with the new ML kit
到目前为止,更新我的应用程序以使用新的 ML 套件进行条形码扫描是失败的。 我正在使用Camera2
API 并以这种方式处理我的图像:
imageToProcess = InputImage.fromMediaImage(image, 0);
Task<List<Barcode>> result = scannerCodeBarre.process(imageToProcess)
.addOnSuccessListener(codesBarres -> {
// my code to exploit the result given by the ML
}
})
.addOnFailureListener(e -> {
// my code to inform finding a barcode content failed
});
我可以添加只有在获得上一个处理图像的结果时才开始处理新图像,但无论预览图像是否包含 2D 或 3D 条形码, Task
总是触发它的OnFailureListener
的onFailure
function 。
谁能告诉我我可能会遗漏什么?
public void onImageAvailable(ImageReader lecteurImage) {
Image image;
Object objetImage;
image = lecteurImage.acquireNextImage();
if (image != null) {
objetImage = transformeImage(image);
traitementImage(objetImage);
}
image.close();
}
}
protected Object transformeImage(Image image) {
return (InputImage.fromMediaImage(image, rotation));
}
protected void traitementImage(Object image) {
Task<List<Barcode>> résultat = scannerCodeBarre.process((InputImage) image)
.addOnSuccessListener(codesBarres -> {
AlertDialog.Builder constructeur;
View vueBoite;
CharBuffer cb;
constructeur = new AlertDialog.Builder(activite);
vueBoite = activite.getLayoutInflater().inflate(R.layout.resultat_lecture, null);
constructeur.setView(vueBoite);
constructeur.setTitle("Résultat de la lecture du code barre...");
constructeur.setCancelable(false);
constructeur.setNeutralButton(R.string.OK, (boite, i) -> {
boite.dismiss();
});
for (Barcode codeBarres : codesBarres) {
byte[] donnéeBrute;
donnéeBrute = codeBarres.getRawBytes();
switch (codeBarres.getFormat()) {
case FORMAT_CODE_128: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.Code128);
break;
}
case FORMAT_CODE_39: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.Code39);
break;
}
case FORMAT_CODE_93: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.Code93);
break;
}
case FORMAT_CODABAR: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.Codabar);
break;
}
case FORMAT_EAN_13: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.EAN13);
break;
}
case FORMAT_EAN_8: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.EAN8);
break;
}
case FORMAT_ITF: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.ITF);
break;
}
case FORMAT_UPC_A: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.UPCA);
break;
}
case FORMAT_UPC_E: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.UPCE);
break;
}
case FORMAT_QR_CODE: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.QRCode);
break;
}
case FORMAT_PDF417: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.PDF417);
break;
}
case FORMAT_AZTEC: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.AZTEC);
break;
}
case FORMAT_DATA_MATRIX: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.DataMatrix);
break;
}
default: {
((TextView) vueBoite.findViewById(R.id.TypeCodeBarre)).setText(R.string.Inconnu);
}
}
try {
cb = csd.decode(ByteBuffer.wrap(donnéeBrute));
((TextView) vueBoite.findViewById(R.id.MessageCodeBarre)).setText(cb);
constructeur.create().show();
} catch (CharacterCodingException e) {
e.printStackTrace();
}
}
})
.addOnFailureListener(e -> {
Log.d("Lecteur code-barres", "Traitement terminé en échec...");
});
}
测试以下代码。
Task<List<Barcode>> result = scannerCodeBarre.process(imageToProcess);
while (!result.isComplete()) {
anytextView.setText("");
}
if (result.isComplete() & result.isSuccessful()) yourResultProcessingMethod(result.getResult());// my code to exploit the result given by the ML
else yourFailureHandlingMethod();// my code to inform finding a barcode content failed
scannerCodeBarre.close();
请注意,这两个侦听器没有编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.