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

在Flutter中使用google_mlkit_text_recognition遇变量错误求助

解决google_mlkit_text_recognition的文本提取错误

针对你遇到的两个错误,直接给出解决方案:

错误1:TextBlock无rect属性

google_mlkit_text_recognition库中,TextBlock的边界矩形属性名为boundingBox而非rect,直接替换即可。

错误2:List<Point>无法赋值给List

block.cornerPoints返回的是List<Point<int>>类型,需要将每个Point<int>转换为Offset,可以通过map方法遍历转换后再转为列表。

修正后的完整代码

final inputImage = InputImage.fromFilePath(path!.path);
final textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);
final RecognizedText recognizedText = await textRecognizer.processImage(inputImage);

String text = recognizedText.text;
for (TextBlock block in recognizedText.blocks) {
  // 替换rect为boundingBox
  final Rect rect = block.boundingBox;
  // 将List<Point<int>>转换为List<Offset>
  final List<Offset> cornerPoints = block.cornerPoints
      .map((point) => Offset(point.x.toDouble(), point.y.toDouble()))
      .toList();
  final String blockText = block.text;
  final List<String> languages = block.recognizedLanguages;

  for (TextLine line in block.lines) {
    // 同样替换rect为boundingBox,转换cornerPoints类型
    final Rect lineRect = line.boundingBox;
    final List<Offset> lineCornerPoints = line.cornerPoints
        .map((point) => Offset(point.x.toDouble(), point.y.toDouble()))
        .toList();
    final String lineText = line.text;
    
    for (TextElement element in line.elements) {
      final Rect elementRect = element.boundingBox;
      final List<Offset> elementCornerPoints = element.cornerPoints
          .map((point) => Offset(point.x.toDouble(), point.y.toDouble()))
          .toList();
      final String elementText = element.text;
    }
  }
}
// 记得使用完后释放识别器资源
await textRecognizer.close();

额外提示:使用完TextRecognizer后调用close()方法释放资源,避免内存泄漏。

内容的提问来源于stack exchange,提问作者mohammed aref saeed alsrkal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:00:46