gpt4 book ai didi

java - 无法使用 Firebase ML Kit 读取更多 30 个字符的条形码

转载 作者:行者123 更新时间:2023-12-04 08:54:16 25 4
gpt4 key购买 nike

我正在尝试使用 firebase ML kit 独立 API 读取条形码 128 和二维码。我能够读取条形码和二维码。但如果我的条码长度超过 30-35 个字符,则条码扫描器无法检测到条码。我能够检测二维码,但不能检测条形码。
这是我的代码:

// Use this dependency to use the dynamically downloaded model in Google Play Services
implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:16.1.2'
implementation 'com.google.mlkit:barcode-scanning:16.0.3'
扫描仪 Activity :
    executor = Executors.newSingleThreadExecutor();
PreviewView previewView = findViewById(R.id.cameraPreviewView);
cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
Preview preview = new Preview.Builder().build();
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();

preview.setSurfaceProvider(
previewView.createSurfaceProvider());

ImageCapture imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build();

ImageAnalysis imageAnalysis =
new ImageAnalysis.Builder()
.build();

imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), new ImageAnalysis.Analyzer() {

private BarcodeScanner scanner = buildBarCodeScanner();

@Override
public void analyze(ImageProxy imageProxy) {
@SuppressLint("UnsafeExperimentalUsageError") Image mediaImage = imageProxy.getImage();
if (mediaImage != null) {
InputImage image =
InputImage.fromMediaImage(mediaImage, imageProxy.getImageInfo().getRotationDegrees());
Task<List<Barcode>> result = scanner.process(image);

result.addOnSuccessListener(new OnSuccessListener<List<Barcode>>() {
@Override
public void onSuccess(List<Barcode> barcodes) {
processBarCodes(barcodes);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
Log.i("CameraXApp3", "scanner task failed. Error:" + e);

}
}).addOnCompleteListener(new OnCompleteListener<List<Barcode>>() {
@Override
public void onComplete(@NonNull Task<List<Barcode>> task) {
mediaImage.close();
imageProxy.close();
}
});
}
}

private BarcodeScanner buildBarCodeScanner() {
BarcodeScannerOptions options =
new BarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_CODE_128)
.build();
return BarcodeScanning.getClient(options);
}

private void processBarCodes(List<Barcode> barcodes) {
for (Barcode barcode : barcodes) {
confirmCounter++;
if (confirmCounter >= CONFIRM_VALUE) {
confirmCounter = 0;
final Rect boundingBox = barcode.getBoundingBox();
final Point[] cornerPoints = barcode.getCornerPoints();
String rawValue = barcode.getRawValue();
int valueType = barcode.getValueType();
if (valueType == Barcode.TYPE_TEXT) {
toast(MainActivity.this, "Received Message:" + rawValue);
}
}
}
}

public void toast(final Context context, final String text) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(() -> Toast.makeText(context, text, Toast.LENGTH_LONG).show());
}
});

Camera camera = cameraProvider.bindToLifecycle(
((LifecycleOwner) this),
cameraSelector,
preview,
imageCapture,
imageAnalysis);

} catch (InterruptedException | ExecutionException e) {

}
}, ContextCompat.getMainExecutor(this));
我也试图通过点击来增加更多的焦点,但没有运气:
 previewView.setOnTouchListener((v, event) -> {
v.performClick();
if (event.getAction() == MotionEvent.ACTION_UP) {
final MeteringPointFactory factory = previewView.getMeteringPointFactory();
final MeteringPoint point = factory.createPoint(event.getX(), event.getY());
final FocusMeteringAction action = new FocusMeteringAction.Builder(point).build();
camera.getCameraControl().startFocusAndMetering(action);
return false;
}
return true;
});

最佳答案

ML Kit 条码要求最细条的宽度至少为 3 像素。 Code-128 每个字符是 11 条宽,所以就像素而言,它是 33 像素宽,对于 35 个这样的字符,它需要 1155 像素的宽度。因此,条码在图像中至少需要 1155 像素宽。这种粗略的计算忽略了 + + 字符。
您可能需要增加此格式的图像分辨率。

关于java - 无法使用 Firebase ML Kit 读取更多 30 个字符的条形码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63919991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com