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

Flutter开发中如何使用Google ML Kit实现指定区域扫描?

需求可行性结论

该需求完全可以实现。Google ML Kit 文本识别模块没有提供“识别阶段直接跳过指定区域”的原生配置项,但通过前后置的简单处理即可达到仅识别目标区块、忽略发票抬头等无关内容的效果,实现成本很低。

具体实现路径
  • 前置裁剪输入(优先方案,性能最优)
    先固定发票在取景框内的对齐规则,提前标定好需要识别的商品明细、总金额区块的相对坐标范围,以及抬头等无关区域的边界。在将图像传入ML Kit识别接口前,先从原始相机帧/用户选择的发票图片中裁剪出目标区块的子图,仅把裁剪后的子图传给识别接口,从输入源头就排除无关内容,完全不会产生多余的识别计算。
    核心裁剪逻辑参考:

    // 提前标定目标区域占整图的相对比例(适配不同分辨率的图像)
    final Rect targetScanArea = Rect.fromLTRB(0.04, 0.22, 0.96, 0.92);
    // 从原图中裁剪目标区域
    final croppedImg = copyCrop(
      rawImage,
      x: (rawImage.width * targetScanArea.left).round(),
      y: (rawImage.height * targetScanArea.top).round(),
      width: (rawImage.width * targetScanArea.width).round(),
      height: (rawImage.height * targetScanArea.height).round(),
    );
    // 仅传入裁剪后的子图给ML Kit做识别
    final textResult = await textRecognizer.processImage(InputImage.fromBytes(/* 裁剪后子图数据 */));
    
  • 识别结果坐标过滤(兜底方案)
    如果不想修改输入图像,也可以直接传入全图做识别。ML Kit返回的识别结果中,每个文本块、每一行文本、每个单词都自带对应的边界坐标属性,你只需要遍历所有识别到的文本元素,筛掉坐标落在抬头等无关区域内的内容,仅保留坐标落在商品明细、总金额目标区块内的文本即可。
    注意:做坐标映射时必须适配相机旋转角度、设备方向,避免坐标错位导致内容漏筛或误删。

优化建议
  • 如果需要适配不同版式的发票,不需要死板使用固定坐标,可以先做一次轻量的全图识别,定位「商品明细」「合计」「总金额」这类锚点关键词的位置,根据锚点坐标动态划定待提取内容的区域,适配性会更强。
  • 两种方案可以搭配使用:先做粗裁剪减少识别计算量,拿到结果后再做一次精细的坐标过滤,识别准确率和速度都会更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:25:16