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

如何在Flutter中检测扫描文档的方向?

在Flutter中检测扫描文档的方向方案

方案一:利用Google ML Kit文本识别

ML Kit的文本识别能力可以直接检测文本的旋转角度,以此判断文档方向(通常为0°、90°、180°、270°)。

  1. 添加依赖到pubspec.yaml:
dependencies:
  google_mlkit_text_recognition: ^0.12.0
  image_picker: ^1.0.4 # 用于获取扫描文档图片
  1. 核心代码实现:
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:math' as math;

Future<int?> detectDocumentOrientation() async {
  final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery);
  if (pickedFile == null) return null;

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

  // 取第一个文本块的角度作为文档方向(多数场景下有效)
  if (recognizedText.blocks.isNotEmpty) {
    final angle = recognizedText.blocks.first.angle;
    // 将弧度转换为近似的角度值(0/90/180/270)
    final degrees = (angle * 180 / math.pi).round();
    // 处理负数角度,转为0-360范围内
    final normalizedDegrees = (degrees + 360) % 360;
    return normalizedDegrees;
  }

  await textRecognizer.close();
  return null;
}

方案二:集成Tesseract OCR

Tesseract是成熟的OCR引擎,内置文本方向检测能力,可通过Flutter第三方包快速集成。

  1. 添加依赖:
dependencies:
  tesseract_ocr: ^0.6.4
  image_picker: ^1.0.4
  1. 核心代码:
import 'package:tesseract_ocr/tesseract_ocr.dart';
import 'package:image_picker/image_picker.dart';

Future<int?> getDocumentOrientation() async {
  final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery);
  if (pickedFile == null) return null;

  // 初始化Tesseract,指定语言包(需提前下载对应语言的traineddata)
  await TesseractOcr.init('eng');
  // 获取方向信息,Tesseract会返回0/90/180/270中的一个
  final orientation = await TesseractOcr.getOrientation(pickedFile.path);
  
  await TesseractOcr.dispose();
  return orientation;
}

方案三:调用原生平台API(自定义实现)

如果需要更高的定制性,可以直接在iOS/Android原生层实现方向检测,再通过MethodChannel与Flutter通信:

  • Android:使用Google ML Kit或Tesseract原生库,检测文本方向后返回给Flutter
  • iOS:利用Vision框架的VNDetectTextRectanglesRequest,获取文本的边界框角度,计算文档方向

注意事项

  • 扫描文档的文本方向通常为0°、90°、180°、270°,无需处理任意角度
  • 确保图片质量清晰,避免模糊、倾斜过度的文档导致检测失败
  • 使用ML Kit或Tesseract时,需注意权限申请(如存储权限、相机权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:45:47