Sco*_*ott 29 android google-play-services google-vision
我一直在玩新的Google Barcode API中的示例代码.它将条形码和条形码值叠加在条形码的实时摄像机上.(也面临)
我无法告诉如何将条形码值返回到我的应用程序.A)如何判断检测事件何时发生以及B)如何访问ravValue以便在我的应用程序的其他部分中使用.有人能帮忙吗?
https://developers.google.com/vision/multi-tracker-tutorial
https://github.com/googlesamples/android-vision
更新: 在@ pm0733464的答案的基础上,我在Tracker类中添加了一个回调接口(称为onFound),我可以在Activity中访问该接口.调整Google多跟踪器示例:
GraphicTracker:
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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
主要活动:
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);
Run Code Online (Sandbox Code Playgroud)
pm0*_*464 40
直接使用条形码检测器
一种方法是直接在位图上使用条形码检测器,如下所示:
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
}
Run Code Online (Sandbox Code Playgroud)
接收通知
另一种方法是设置一个管道结构,用于从摄像机预览视频接收检测到的条形码(参见GitHub上的MultiTracker示例).您可以定义自己的跟踪器来接收检测到的条形码,如下所示:
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
}
}
Run Code Online (Sandbox Code Playgroud)
为每个条形码创建此跟踪器的新实例,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();
Run Code Online (Sandbox Code Playgroud)
稍后,您可以直接启动相机源,也可以将其与显示相机预览的视图一起使用(有关详细信息,请参阅MultiTracker示例).
| 归档时间: |
|
| 查看次数: |
28051 次 |
| 最近记录: |