You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:08:24