gpt4 book ai didi

android - 如何使用 Google Play 服务中的新 Barcode API 捕获条形码值?

转载 作者:IT老高 更新时间:2023-10-28 22:02:48 35 4
gpt4 key购买 nike

我一直在使用新的 Google Barcode API 中的示例代码。它在条码的实时摄像头馈送上覆盖一个框和条码值。 (还有脸)

我不知道如何将条形码值返回到我的应用程序。 A)如何判断检测事件何时发生,B)如何访问 ravValue 以在我的应用程序的其他部分中使用。有人可以帮忙吗?

https://developers.google.com/vision/multi-tracker-tutorial

https://github.com/googlesamples/android-vision

更新:基于@pm0733464 的回答,我向可以在Activity 中访问的Tracker 类添加了一个回调接口(interface)(称为onFound)。调整 Google 多跟踪器示例:

图形跟踪器:

class GraphicTracker<T> extends Tracker<T> {
private GraphicOverlay mOverlay;
private TrackedGraphic<T> mGraphic;
private Callback mCallback;

GraphicTracker(GraphicOverlay overlay, TrackedGraphic<T> graphic, Callback callback) {
mOverlay = overlay;
mGraphic = graphic;
mCallback = callback;
}

public interface Callback {
void onFound(String barcodeValue);
}

@Override
public void onUpdate(Detector.Detections<T> detectionResults, T item) {
mCallback.onFound(((Barcode) item).rawValue);
mOverlay.add(mGraphic);
mGraphic.updateItem(item);
}

BarcodeTrackerFactory:

class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
private GraphicOverlay mGraphicOverlay;
private GraphicTracker.Callback mCallback;

BarcodeTrackerFactory(GraphicOverlay graphicOverlay, GraphicTracker.Callback callback) {
mGraphicOverlay = graphicOverlay;
mCallback = callback;
}

@Override
public Tracker<Barcode> create(Barcode barcode) {
BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay);
return new GraphicTracker<>(mGraphicOverlay, graphic, mCallback);
}
}

主要 Activity :

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay, new GraphicTracker.Callback() {
@Override
public void onFound(String barcodeValue) {
Log.d(TAG, "Barcode in Multitracker = " + barcodeValue);
}
});
MultiProcessor<Barcode> barcodeMultiProcessor = new MultiProcessor.Builder<>(barcodeFactory).build();
barcodeDetector.setProcessor(barcodeMultiProcessor);

最佳答案

直接使用条码检测器

一种方法是直接在位图上使用条形码检测器,如下所示:

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
SparseArray<Barcode> barcodes = barcodeDetector.detect(frame);
if (barcodes.size() > 0) {
// Access detected barcode values
}

接收通知

另一种方法是设置管道结构,用于接收从摄像头预览视频中检测到的条形码(参见 GitHub 上的 MultiTracker example)。您可以定义自己的 Tracker 来接收检测到的条形码,如下所示:

class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
@Override
public Tracker<Barcode> create(Barcode barcode) {
return new MyBarcodeTracker();
}
}

class MyBarcodeTracker extends Tracker<Barcode> {
@Override
public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode barcode) {
// Access detected barcode values
}
}

为每个条形码创建一个新的跟踪器实例,onUpdate 方法接收检测到的条形码值。

然后您设置摄像头源以将图像连续流式传输到检测器中,并在您的跟踪器中接收结果:

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory();
barcodeDetector.setProcessor(
new MultiProcessor.Builder<>(barcodeFactory).build());

mCameraSource = new CameraSource.Builder(context, barcodeDetector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1600, 1024)
.build();

稍后,您可以直接启动相机源,或者将其与显示相机预览的 View 结合使用(有关详细信息,请参阅 MultiTracker example)。

关于android - 如何使用 Google Play 服务中的新 Barcode API 捕获条形码值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32021193/

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