[英]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.