Flutter插件flusseract的使用
Flutter插件flusseract的使用
Flusseract
Flusseract
是一个为 Flutter 应用提供的插件,它利用了 Tesseract OCR C++ 库。这个插件类似于 gosseract
SDK 对于 Golang 的支持。它实现了跨所有平台使用纯 Tesseract 解决方案进行 OCR(光学字符识别)的功能。然而,Android 和 MacOS/iOS 分别提供了通过 Google ML-Kit for Mobile 和 Apple’s Vision Framework 进行的原生 OCR 能力。这些原生能力可能具有更好的准确度模型,如果您的使用场景特定于这些生态系统,那么应该考虑使用原生能力。
开始使用
这个项目从源代码构建了 Tesseract OCR 库及其依赖项。该插件是通过 CMake 生成的 Make 文件构建的。构建根目录可以在 src/CMakeLists.txt
中找到,其中添加了作为外部子项目的 Tesseract 及其依赖项,它们直接从官方 Git 或下载站点下载。插件将 Tesseract API 包装在 Flusseract
Dart 类中,并暴露了最常用的 OCR 功能。
您可以使用 example
应用来在各种受支持的平台上构建和运行插件。如果您想开发此项目,请遵循以下说明来设置环境,以便在开发过程中运行单元测试。
安装
在您的 Flutter 应用的 pubspec.yaml
文件中添加插件作为依赖项:
dependencies:
.
.
flusseract: ^0.1.1
.
.
当在 Flutter 应用中使用时,初始构建插件大约需要 10 分钟,因为它会为目标平台下载并编译 Tesseract 及其依赖项。
对于 MacOS 和 iOS 构建,您可以在 <app>/<macos|ios>/Pods/flusseract/build/
文件夹内找到本地 C/C++ 库构建日志。
使用
Tesseract 数据文件需要被复制到沙箱文件夹中,才能被 Tesseract 库加载。您至少需要默认训练的语言模型(eng.trainedata
)才能初始化 Tesseract。训练模型可以在 tessdata
Git 存储库中找到。此初始化可以通过 TessData.Init()
异步调用完成,该调用需要在任何文本提取调用之前运行。
以下是完整的示例代码:
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flusseract/flusseract.dart' as flusseract;
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _ocrText = '';
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
await TessData.init();
}
Future<void> performOCR() async {
await rootBundle.load('assets/test-helloworld.png').then((imageData) {
final image = flusseract.PixImage.fromBytes(
imageData.buffer.asUint8List(),
);
final tesseract = flusseract.Tesseract(
tessDataPath: TessData.tessDataPath,
);
tesseract.utf8Text(image).then((ocrText) {
setState(() {
_ocrText = ocrText;
});
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flusseract Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: performOCR,
child: Text('Perform OCR'),
),
SizedBox(height: 20),
Text(_ocrText),
],
),
),
),
);
}
}
在 macOS 系统上开发
安装依赖
# 总是需要的包。
brew install \
nasm \
automake \
autoconf \
libtool \
pkgconfig
# 使用 g++ 构建的可选包。
brew install gcc
# 训练工具所需的包。
brew install pango
# 构建依赖。
brew install \
icu4c \
leptonica \
tesseract
# 用于额外功能的可选包。
brew install libarchive
构建和运行单元测试
mkdir build
cd build
PLATFORM_NAME=macosx cmake ../src
make test
更多关于Flutter插件flusseract的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件flusseract的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
针对帖子中提到的“Flutter未知功能插件flusseract的潜在使用”,虽然“flusseract”并非一个广为人知的Flutter插件(可能是个假设名称或拼写错误),但我可以基于Flutter插件开发的常规模式,展示如何探索和使用一个假想的Flutter插件。请注意,以下代码是一个假设性的示例,旨在说明如何集成和使用一个Flutter插件。
假设的Flutter插件:flusseract
假设flusseract
是一个提供特定功能(如数据同步、实时通信等)的Flutter插件。以下是如何在Flutter项目中集成和使用这个插件的示例。
1. 添加依赖
首先,在pubspec.yaml
文件中添加对flusseract
插件的依赖(注意:实际使用时,需替换为真实插件的依赖项):
dependencies:
flutter:
sdk: flutter
flusseract: ^1.0.0 # 假设的版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:flusseract/flusseract.dart';
3. 初始化并使用插件
假设flusseract
插件提供了数据同步功能,你可以这样使用它:
import 'package:flutter/material.dart';
import 'package:flusseract/flusseract.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flusseract Example'),
),
body: FlusseractExample(),
),
);
}
}
class FlusseractExample extends StatefulWidget {
@override
_FlusseractExampleState createState() => _FlusseractExampleState();
}
class _FlusseractExampleState extends State<FlusseractExample> {
FlusseractClient? _client;
String _data = 'No data yet';
@override
void initState() {
super.initState();
// 初始化Flusseract客户端
_client = FlusseractClient.init('your-api-key');
// 监听数据变化
_client?.onDataChanged.listen((newData) {
setState(() {
_data = newData;
});
});
// 示例:同步数据
_client?.syncData('some-data-id');
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Synchronized Data:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
_data,
style: TextStyle(fontSize: 24),
),
],
),
);
}
@override
void dispose() {
// 释放资源
_client?.dispose();
super.dispose();
}
}
注意事项
- 插件文档:实际使用时,务必参考插件的官方文档,了解其具体功能、API和初始化方法。
- 错误处理:示例代码省略了错误处理逻辑。在实际应用中,应添加适当的错误处理代码,以确保应用的健壮性。
- 权限管理:如果插件需要访问特定资源(如网络、存储等),请确保在
AndroidManifest.xml
和Info.plist
中声明必要的权限。
由于flusseract
是一个假设的插件名称,上述代码仅为示例性质。如果你有一个具体的插件名称和功能需求,建议查阅该插件的官方文档或GitHub仓库以获取准确的使用指南。