Flutter图像分类插件image_classifier的使用

Flutter图像分类插件image_classifier的使用

Figma导出的图像自动按比例分类的包

使用说明(英文)

flutter pub run [package name]:[program file name] -i [image directory]-o [ouput file directory]

--input, -i <image directory path>
--output, -o <output image directory path> 默认: 输入目录
--separator, -s <放大倍数前的分隔符> 默认: @

使用说明(韩文)

flutter pub run [package name]:[program file name] -i [image directory]-o [ouput file directory]

--input, -i <image directory path>
--output, -o <output image directory path> 默认: 输入目录
--separator, -s <放大倍数前的分隔符> 默认: @

使用指定的inputDirectory内的所有文件进行查询,并将复制的图像放入指定的outputDirectory。在outputDirectory中会创建与inputDirectory相同的目录结构,以便按每个比例分类。

完整示例Demo

创建一个新的Flutter项目

首先,确保你的环境已经安装了Flutter SDK,并且可以运行Flutter命令。然后,创建一个新的Flutter项目:

flutter create image_classifier_example
cd image_classifier_example

添加依赖

pubspec.yaml文件中添加image_classifier依赖项:

dependencies:
  flutter:
    sdk: flutter
  image_classifier: ^1.0.0 # 确保使用最新版本

运行flutter pub get以获取依赖项。

编写代码

lib/main.dart中编写以下代码:

import 'package:flutter/material.dart';
import 'package:image_classifier/image_classifier.dart'; // 导入图像分类插件

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Image Classifier Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String inputDir = 'assets/images'; // 输入目录
  final String outputDir = 'assets/classified_images'; // 输出目录

  void _classifyImages() async {
    try {
      await ImageClassifier.classifyImages(
        inputDirectory: inputDir,
        outputDirectory: outputDir,
      );
      print('Images have been classified successfully.');
    } catch (e) {
      print('Error occurred during classification: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Classifier Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _classifyImages,
          child: Text('Classify Images'),
        ),
      ),
    );
  }
}

运行应用

现在,你可以运行你的应用来测试图像分类功能:

flutter run

更多关于Flutter图像分类插件image_classifier的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图像分类插件image_classifier的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用image_classifier插件进行图像分类的示例代码。这个插件通常用于机器学习模型,特别是TensorFlow Lite模型,来对图像进行分类。

首先,确保你已经在pubspec.yaml文件中添加了image_classifier依赖:

dependencies:
  flutter:
    sdk: flutter
  image_classifier: ^0.x.x  # 请替换为最新版本号

然后,运行flutter pub get来获取依赖。

接下来,是完整的示例代码,展示如何使用image_classifier插件:

1. 导入必要的包

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_classifier/image_classifier.dart';
import 'dart:typed_data';
import 'dart:ui' as ui;

注意:image_picker插件用于从设备中选择图像,你可能也需要添加这个依赖。

2. 声明全局变量

late ImagePicker _picker = ImagePicker();
late ImageClassifier _classifier;
late List<String> _labels;

3. 初始化ImageClassifier

在你的State类的initState方法中,初始化ImageClassifier实例。这里假设你已经有一个训练好的TensorFlow Lite模型文件(比如model.tflite)和标签文件(比如labels.txt)。

@override
void initState() {
  super.initState();
  _loadModel();
}

Future<void> _loadModel() async {
  // 加载模型
  await _classifier.loadModel(
    modelPath: 'assets/model.tflite',
    labelsPath: 'assets/labels.txt',
    numThreads: 4,  // 可选,设置用于推理的线程数
  );
  
  // 获取标签
  _labels = await _classifier.getLabels();

  setState(() {});
}

4. 选择图像并进行分类

在你的UI中,添加一个按钮来选择图像,并显示分类结果。

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Uint8List? _imageBytes;
  String? _classificationResult;

  Future<void> _pickImage() async {
    final pickedFile = await _picker.pickImage(source: ImageSource.camera);

    if (pickedFile != null) {
      final File imageFile = File(pickedFile.path);
      final Uint8List imageBytes = await imageFile.readAsBytes();
      
      setState(() {
        _imageBytes = imageBytes;
      });

      _classifyImage();
    }
  }

  Future<void> _classifyImage() async {
    if (_imageBytes != null) {
      final List<Recognition> recognitions = await _classifier.classifyImage(
        image: _imageBytes!,
        inputSize: 224,  // 根据你的模型输入大小调整
      );

      setState(() {
        _classificationResult = recognitions.isNotEmpty
            ? '${recognitions.first.label}: ${(recognitions.first.confidence * 100).toStringAsFixed(2)}%'
            : 'No classification available';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Image Classifier Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              _imageBytes != null
                  ? Image.memory(_imageBytes!)
                  : Text('No image selected'),
              SizedBox(height: 20),
              Text(_classificationResult ?? 'Select an image to classify'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _pickImage,
                child: Text('Pick Image'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

5. 运行应用

确保你的项目目录中包含assets/model.tfliteassets/labels.txt文件,并在pubspec.yaml中声明这些资产:

flutter:
  assets:
    - assets/model.tflite
    - assets/labels.txt

然后,你可以运行你的Flutter应用,选择一张图像,并查看分类结果。

这个示例展示了如何在Flutter中使用image_classifier插件进行图像分类。根据实际需求,你可能需要调整代码中的参数和逻辑。

回到顶部