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

如何通过Flutter ML Kit文字识别提取指定行的价格数值

解决方案

核心结论

Flutter ML Kit的文字识别仅负责将图片内容转换为文本行列表,无法直接实现特定行提取或价格格式转换,这类逻辑需要你在识别返回的结果中自行处理。

具体实现步骤

  1. 筛选含"SUMME"的行:遍历识别返回的文本列表,找出包含目标关键词的行
  2. 提取价格字符串:从筛选出的行中分离出价格部分(需根据实际文本格式调整逻辑)
  3. 转换为double类型:将价格字符串转换为数值类型,注意处理格式差异(比如欧洲地区常用逗号作为小数点)

代码示例

假设你的takeImageforScan函数返回List<String>类型的识别结果,可添加以下处理逻辑:

// 调用ML Kit识别图片,获取全部文本行
List<String> recognizedLines = await takeImageforScan();

// 查找包含"SUMME"的行
String? summeLine = recognizedLines.firstWhere(
  (line) => line.contains("SUMME"),
  orElse: () => "",
);

if (summeLine.isNotEmpty) {
  // 用正则匹配价格(支持整数、小数,适配点/逗号作为小数点的情况)
  RegExp pricePattern = RegExp(r'\d+([.,]\d+)?');
  Match? priceMatch = pricePattern.firstMatch(summeLine);
  
  if (priceMatch != null) {
    String priceStr = priceMatch.group(0)!
        .replaceAll(',', '.'); // 统一替换逗号为点,适配double.parse
    try {
      double totalPrice = double.parse(priceStr);
      print("提取到的总价:$totalPrice");
      // 这里可以将totalPrice用于后续业务逻辑
    } catch (e) {
      print("价格格式解析失败:$e");
    }
  } else {
    print("SUMME行中未识别到有效价格");
  }
} else {
  print("未找到包含SUMME的行");
}

注意事项

  • 正则表达式需根据实际账单的文本格式调整,比如如果价格固定在行末尾,也可以用字符串分割的方式提取
  • 务必添加异常捕获,避免因识别结果格式不符合预期导致崩溃
  • 如果账单有多行含"SUMME",可改用where方法遍历所有匹配行,而非firstWhere

内容的提问来源于stack exchange,提问作者Koek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:57:26