android - 我无法显示从图库中挑选的图像
问题描述
我正在编写一个植物物种识别应用程序。应用程序从图库中获取图像并预测植物种类。所以我应该从图库中选择图像并显示准确度分数。
我在颤振机器学习书中所做的一切都完全相同,但应用程序没有显示挑选的图像和准确度得分。我从图库中选择图像,但它仍然显示“未选择图像”。
如果我删除这些行,我可以从图库中选择图像并显示在屏幕上。但后来我不能应用人工智能操作。
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,
),
);
}
}
解决方案
推荐阅读
- python - 无论如何要在python的新列表中获取列表的随机索引
- parsing - 两个 Haskell 程序如何通过 stdin 和 stdout 交换整数值而不将数据视为文本?
- asp.net-core-mvc - ASP.NET Core MVC 的生产数据库创建/迁移困境
- javascript - 为什么我的函数未定义且未加载
- grpc - 我们如何在同一个流中继续与助手通信?
- typescript - 展平嵌套元组类型并保留顺序
- ruby-on-rails - 手动定义的方法有效,但 define_method 无效,没有给出错误
- c++ - 改变输出的变量
- python - AttributeError: 'float' 对象没有属性 'upper'
- java - 是三元运算符问题还是 BigDecimal 问题?