Flutter图像识别插件google_vision_flutter的使用
Flutter图像识别插件 google_vision_flutter
的使用
简介
google_vision_flutter
是一个原生 Dart 包,用于将 Google Vision 的功能(包括图像标签、人脸、标志和地标检测)集成到 Flutter 应用程序中。
版本信息
项目评分
目录
最近的更改
新功能 v2.0.0
- 虽然此包在
web
平台上可以使用,但由于使用了universal_io
包(该包依赖于dart:io
),pub.dev 分析器不会显示其为web
平台兼容。此版本移除了universal_io
依赖,因此一些相关的方法签名已被移除。 - 移除了 v1.3.x 中已废弃的方法。
- 添加了日志记录功能。
final googleVision =
GoogleVision(LogLevel.all).withAsset('assets/service_credentials.json');
新功能 v1.4.0
- 从之前的版本中引入了一个 重大变更,即
GoogleVision
类现在遵循单例设计模式。对象实例化方式如下:
// 旧方法(v1.3.x 及更早版本)
// final googleVision = await GoogleVision.withJwtFile('service_credentials.json');
// 新方法
final googleVision = await GoogleVision().withJwtFile('service_credentials.json');
开始使用
在 pubspec.yaml
中添加依赖
要在项目中使用此包,需要在 pubspec.yaml
文件中添加依赖:
dependencies:
...
google_vision_flutter: ^2.0.0+6
获取授权凭证
要认证到 Cloud Vision API,需要 API 密钥或包含 JWT 令牌信息的 JSON 文件。JWT 令牌可以通过在 Google API 控制台中 创建服务账户 获得。
使用 GoogleVisionBuilder
小部件
以下是一个示例应用程序,展示了如何使用 GoogleVisionBuilder
小部件进行图像标签检测。
示例代码
import 'package:flutter/material.dart';
import 'package:google_vision_flutter/google_vision_flutter.dart';
class LabelDetectionPage extends StatelessWidget {
static const assetName = 'assets/setagaya_small.jpg';
final _processImage = Image.asset(
assetName,
fit: BoxFit.fitWidth,
);
final GoogleVision googleVision;
LabelDetectionPage({required this.googleVision, required String title});
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(title: Text('Label Detection')),
body: Column(
children: [
_processImage,
Expanded(
child: GoogleVisionImageBuilder.labelDetection(
googleVision: googleVision,
imageProvider: _processImage.image,
builder: (BuildContext context, List<EntityAnnotation>? entityAnnotations) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: entityAnnotations!
.map((entity) => Text(
'${(entity.score! * 100).toStringAsFixed(2)}% - ${entity.description}'))
.toList(),
),
);
},
),
),
],
),
),
);
}
}
主应用程序入口
import 'package:flutter/material.dart';
import 'package:google_vision_flutter/google_vision_flutter.dart';
import 'label_detection_page.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
final googleVision = GoogleVision().withAsset('assets/service_credentials.json');
runApp(MyApp(googleVision: googleVision));
}
class MyApp extends StatelessWidget {
final GoogleVision googleVision;
MyApp({required this.googleVision});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: LabelDetectionPage(googleVision: googleVision, title: 'Label Detection'),
);
}
}
贡献者
贡献
任何来自开源社区的帮助都是欢迎和支持的:
- 发现错误?
- 请填写一个详细的错误报告。
- 需要新功能?
- 打开一个功能请求,并附上使用场景。
- 正在使用并喜欢这个项目?
- 推广该项目:写一篇关于它的文章或帖子。
- 捐赠。
- 有使用此包的项目?
- 让我们互相推广,告诉我你的项目链接,我会添加一个链接到你的项目。
- 是开发者?
- 修复一个错误并发送一个拉取请求。
- 实现一个新功能。
- 改进单元测试。
- 已经以任何方式帮助过?
- 非常感谢你、贡献者以及所有使用此项目的用户!
如果你能捐赠 1 小时的时间,你可以贡献很多,因为其他人也会这样做,只需成为其中的一部分并从你的 1 小时开始。
更多关于Flutter图像识别插件google_vision_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图像识别插件google_vision_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 google_vision_flutter
插件进行图像识别的示例代码。google_vision_flutter
是 Flutter 的一个插件,它封装了 Google ML Kit 的图像识别功能,可以用于文本识别、物体检测、面部检测等多种任务。
首先,你需要在你的 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
google_vision_flutter: ^0.10.0 # 请检查最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示如何使用 google_vision_flutter
进行文本识别:
import 'package:flutter/material.dart';
import 'package:google_vision_flutter/google_vision_flutter.dart';
import 'dart:io';
import 'dart:typed_data';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ImageRecognitionScreen(),
);
}
}
class ImageRecognitionScreen extends StatefulWidget {
@override
_ImageRecognitionScreenState createState() => _ImageRecognitionScreenState();
}
class _ImageRecognitionScreenState extends State<ImageRecognitionScreen> {
File? _imageFile;
String _result = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Vision Flutter Example'),
),
body: Column(
children: [
Center(
child: _imageFile == null
? Text('No image selected.')
: Image.file(_imageFile!),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _pickImage,
child: Text('Pick Image'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _recognizeText,
child: Text('Recognize Text'),
enabled: _imageFile != null,
),
SizedBox(height: 20),
Text(_result),
],
),
);
}
Future<void> _pickImage() async {
final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
_imageFile = File(pickedFile.path);
});
}
}
Future<void> _recognizeText() async {
if (_imageFile == null) return;
final Uint8List imageBytes = await _imageFile!.readAsBytes();
final List<InputImage> images = [InputImage.fromBytes(imageBytes, metadata: InputImageMetadata())];
final TextRecognizer recognizer = GoogleVision.instance.textRecognizer();
final List<TextRecognitionResult> results = await recognizer.processImages(images);
setState(() {
_result = results.isNotEmpty ? results.first.text : 'No text recognized.';
});
}
}
在这个示例中,我们做了以下几件事:
- 使用
ImagePicker
插件让用户从图库中选择一张图片。 - 将选择的图片文件读取为字节数组。
- 使用
GoogleVision
的textRecognizer
方法对图片进行文本识别。 - 显示识别结果。
注意:
- 你需要在
android/app/src/main/AndroidManifest.xml
文件中添加必要的权限,比如读取存储权限(READ_EXTERNAL_STORAGE
)。 - 在实际项目中,你可能需要处理更多的错误情况,比如图片选择失败、文本识别失败等。
此外,如果你需要执行其他类型的图像识别任务(比如物体检测、面部检测等),你可以使用 GoogleVision
的其他识别器,如 objectDetector
或 faceDetector
,方法类似。