当从相机识别文本时显示吐司消息

Show a toast message when a text is recognized from camera

我正在尝试从实时摄像头源中检测具有特定格式的文本,并在自动检测到该文本时显示提示消息。 我能够检测到文本并在其周围放置一个框。但我很难显示该消息。

这是来自处理器的 receiveDetections 方法

@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
    mGraphicOverlay.clear();
    SparseArray<TextBlock> items = detections.getDetectedItems();
    for (int i = 0; i < items.size(); ++i) {
        TextBlock item = items.valueAt(i);
        if (item != null && item.getValue() != null) {
            Log.d("OcrDetectorProcessor", "Text detected! " + item.getValue());

            // Check if it is the correct format
            if (item.getValue().matches("^\d{3} \d{3} \d{4} \d{4}")){
                OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
                mGraphicOverlay.add(graphic);

                // Show the toast message

            }
        }


    }
}

-> 祝酒词不是我的最终目标,如果我能解决这个问题,我会解决主要问题。 -> 我正在构建文本视觉的代码实验室教程 api

首先将上下文从 OcrCaptureActivity 传递到 OcrDetectorProcessor class,然后从该上下文传递到 runUiThread。这段代码一次显示所有文本。如果你想一个一个地显示单词,你需要从 TextBlock 项中拆分。

Context context;

OcrDetectorProcessor(GraphicOverlay<OcrGraphic> ocrGraphicOverlay, Context context) {
    mGraphicOverlay = ocrGraphicOverlay;
    this.context = context;
}

@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
    mGraphicOverlay.clear();
    final String result;
    String detectedText = "";
    SparseArray<TextBlock> items = detections.getDetectedItems();
    for (int i = 0; i < items.size(); ++i) {

        final TextBlock item = items.valueAt(i);
        OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
        mGraphicOverlay.add(graphic);
        detectedText += item.getValue();
    }
    result = detectedText;
    ((OcrCaptureActivity)context).runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
        }
    });
}