在Flutter中实现OCR功能,推荐以下几种主流方案:
1. Google ML Kit(推荐)
Google官方提供的跨平台解决方案,支持文本识别:
import 'package:google_ml_kit/google_ml_kit.dart';
Future<String> recognizeText(String imagePath) async {
final inputImage = InputImage.fromFilePath(imagePath);
final textRecognizer = TextRecognizer();
try {
final RecognizedText recognizedText =
await textRecognizer.processImage(inputImage);
String result = '';
for (TextBlock block in recognizedText.blocks) {
for (TextLine line in block.lines) {
result += '${line.text}\n';
}
}
return result;
} finally {
textRecognizer.close();
}
}
依赖配置:
dependencies:
google_ml_kit: ^0.16.0
2. Tesseract OCR
使用 tesseract_ocr 插件:
import 'package:tesseract_ocr/tesseract_ocr.dart';
Future<String> recognizeTextWithTesseract(String imagePath) async {
return await TesseractOcr.extractText(imagePath);
}
依赖配置:
dependencies:
tesseract_ocr: ^2.2.0
3. 自定义后端API
调用开源OCR服务(如PaddleOCR、Tesseract服务):
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<String> recognizeTextWithAPI(String imagePath) async {
final bytes = await File(imagePath).readAsBytes();
final base64Image = base64Encode(bytes);
final response = await http.post(
Uri.parse('你的OCR服务地址'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'image': base64Image}),
);
if (response.statusCode == 200) {
return jsonDecode(response.body)['text'];
}
throw Exception('OCR识别失败');
}
实现建议
- 预处理图像:裁剪、调整对比度提高识别率
- 权限配置:Android和iOS需要相机和存储权限
- 性能优化:大图片先压缩再识别
- 错误处理:网络异常、识别失败等情况
Google ML Kit在准确性和易用性方面表现最佳,推荐作为首选方案。