Android Studio中如何从Abbyy OCR的lines类获取识别字符串?
提取Abbyy RTR SDK识别的文本到变量/字符串
嘿,你找对地方了!onFrameProcessed方法里的lines数组确实是存储OCR识别结果的核心载体,咱们直接在这个方法里处理就能把文本存成变量或者完整字符串。下面是具体的实现步骤:
1. 先声明一个类级别的变量来存储文本
在你的Activity或者Fragment的类里,先定义一个字符串变量,用来保存最终的识别内容:
// 类级别变量,用来存储捕获到的文本 private String capturedFullText = "";
2. 在onFrameProcessed里提取并拼接文本
直接修改onFrameProcessed方法,遍历lines数组,把每一行的文本取出来,还可以加上换行符保持格式。另外建议检查resultStatus是否为STABLE——因为实时识别会有帧不稳定的情况,稳定状态下的结果更准确:
@Override public void onFrameProcessed(ITextCaptureService.TextLine[] lines, ITextCaptureService.ResultStabilityStatus resultStatus, ITextCaptureService.Warning warning) { // 只处理稳定的识别结果,避免中间不稳定的帧 if (resultStatus == ITextCaptureService.ResultStabilityStatus.STABLE) { StringBuilder textBuilder = new StringBuilder(); // 遍历所有识别到的文本行 for (ITextCaptureService.TextLine line : lines) { // 获取当前行的文本 String lineText = line.getText(); // 把每行文本拼接到StringBuilder,加上换行符保持原格式 textBuilder.append(lineText).append("\n"); } // 把拼接好的文本赋值给类变量 capturedFullText = textBuilder.toString().trim(); // 去掉末尾多余的换行 // 这里可以做你想做的操作,比如打印日志或者更新UI Log.d("OCR_RESULT", "捕获到的文本: " + capturedFullText); // 如果要更新UI,注意要切换到主线程 runOnUiThread(() -> { // 比如更新TextView显示识别内容 // textView.setText(capturedFullText); }); } }
3. 额外说明
line.getText()是获取单条文本行的关键方法,这个方法返回的就是该行的识别字符串。- 用
StringBuilder来拼接比直接用+=更高效,尤其是识别内容较多的时候。 - 一定要注意线程问题:
onFrameProcessed是在后台线程执行的,如果要更新UI,必须用runOnUiThread或者Handler切换到主线程,否则会抛出异常。
这样你就可以通过capturedFullText变量随时获取完整的识别文本啦,不管是用来保存到本地还是做其他业务逻辑都没问题。
内容的提问来源于stack exchange,提问作者wsNico
相关产品推荐
相关产品推荐

