Flutter图像识别插件google_vision_flutter的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter图像识别插件 google_vision_flutter 的使用

简介

google_vision_flutter 是一个原生 Dart 包,用于将 Google Vision 的功能(包括图像标签、人脸、标志和地标检测)集成到 Flutter 应用程序中。

版本信息

  • SDK 版本: SDK version
  • 支持的平台: Supported platforms
  • 支持的 SDKs: Supported SDKs

项目评分

  • 流行度: popularity
  • 评分: Pub Score
  • 喜欢数: likes

目录

最近的更改

新功能 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

1 回复

更多关于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.';
    });
  }
}

在这个示例中,我们做了以下几件事:

  1. 使用 ImagePicker 插件让用户从图库中选择一张图片。
  2. 将选择的图片文件读取为字节数组。
  3. 使用 GoogleVisiontextRecognizer 方法对图片进行文本识别。
  4. 显示识别结果。

注意

  • 你需要在 android/app/src/main/AndroidManifest.xml 文件中添加必要的权限,比如读取存储权限(READ_EXTERNAL_STORAGE)。
  • 在实际项目中,你可能需要处理更多的错误情况,比如图片选择失败、文本识别失败等。

此外,如果你需要执行其他类型的图像识别任务(比如物体检测、面部检测等),你可以使用 GoogleVision 的其他识别器,如 objectDetectorfaceDetector,方法类似。

回到顶部