我正在尝试从实时摄像头源中检测具有特定格式的文本,并在自动检测到该文本时显示提示消息。 我能够检测到文本并在其周围放置一个框。但我很难显示 toast 消息。
这是来自处理器的 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
}
}
}
}
-> toast 不是我的最终目标,如果我能解决这个问题,我就会解决主要问题。 -> 我在文本视觉 api 的代码实验室教程之上构建
最佳答案
首先将上下文从 OcrCaptureActivity
传递到 OcrDetectorProcessor
类,并从该上下文传递到 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();
}
});
}
关于android-vision - 当从相机识别文本时显示 toast 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281293/