首页 > 解决方案 > 我无法显示从图库中挑选的图像

问题描述

我正在编写一个植物物种识别应用程序。应用程序从图库中获取图像并预测植物种类。所以我应该从图库中选择图像并显示准确度分数。

我在颤振机器学习书中所做的一切都完全相同,但应用程序没有显示挑选的图像和准确度得分。我从图库中选择图像,但它仍然显示“未选择图像”。

如果我删除这些行,我可以从图库中选择图像并显示在屏幕上。但后来我不能应用人工智能操作。

await analyzeTFLite();
await recognizeImage(File(image.path));

屏幕应该是第一张照片。但我的是第二张照片。整个代码如下。谢谢你的帮助。

import 'dart:io';
import 'package:tflite/tflite.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

class PlantSpeciesRecognition extends StatefulWidget {
  var model;

  PlantSpeciesRecognition(this.model);

  @override
  _PlantSpeciesRecognitionState createState() =>
      _PlantSpeciesRecognitionState();
}

class _PlantSpeciesRecognitionState extends State<PlantSpeciesRecognition> {
  File _image;
  bool _busy = false;
  List _recognitions;

  Future chooseImageGallery() async {
    debugPrint("choose image function");
    var image = await ImagePicker().getImage(source: ImageSource.gallery);
    //var image = await ImagePicker.pickImage(source: ImageSource.gallery);

    if (image == null) {
      debugPrint("choose image if");
      return;
    }
    setState(() {
      _busy = true;
    });

    await analyzeTFLite();
    await recognizeImage(File(image.path));

    setState(() {
      debugPrint("choose image set state");
      _busy = false;
      //_image = image as File;
      _image = File(image.path);
    });
  }

  Future analyzeTFLite() async {
    Tflite.close();
    String res = await Tflite.loadModel(
        model: "assets/model.tflite",
        labels: "assets/labels.txt"
    );
    print('Model Loaded: $res');}

  Future recognizeImage(File image) async{
    var recognitions = await Tflite.runModelOnImage(path: _image.path);

    setState(() {
      _recognitions = recognitions;
    });
    print("Recognition Result: $_recognitions");
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> stackChildren = [];
    Size size = MediaQuery.of(context).size;

    stackChildren.clear();

    stackChildren.add(Positioned(
      top: 0.0,
      left: 0.0,
      width: size.width,
      child: _image == null
          ? Center(child: Text("No Image Selected"))
          : Image.file(_image),
    ));

    stackChildren.add(Center(
      child: Column(
        children: _recognitions != null
            ? _recognitions.map((res) {
          return Text(
            "${res["label"]}: ${res["confidence"].toStringAsFixed(3)}",
            style: TextStyle(
              color: Colors.black,
              fontSize: 20.0,
              background: Paint()
                ..color = Colors.white,
            ),
          );
        }).toList() : [],
      ),
    ));


    return Scaffold(
      appBar: AppBar(
        title: const Text('Plant Species Recognition'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: chooseImageGallery,
        tooltip: 'Pick Image',
        child: Icon(Icons.image),
      ),
      body: Stack(
        children: stackChildren,
      ),
    );
  }
}

标签: androidandroid-studioflutterdart

解决方案


推荐阅读