android - 使用 tflite 时,“String”类型不是“index”类型“int”的子类型 - 颤振
问题描述
我tflite
在我的应用程序中使用包,并且在程序的一部分中,我收到了type 'String' is not a subtype of type 'int' of 'index'
. 我将单独提及该行,并且还将在代码中提供行号。
现在,在那个特定的行,当我在写时_output[0]['label']
,会显示这个错误。但是如果我写了_output[0][0]
,错误就会消失,但会显示一个随机文本。现在,我该如何纠正它?
首先,代码 -
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:tflite/tflite.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool _isLoading=true;
File _image = File("");
List _output = [];
final picker = ImagePicker();
@override
void initState() {
super.initState();
loadModel().then((value) {
setState(() {
});
});
}
detectImage(File image) async {
var output = await Tflite.runModelOnImage(
path: image.path,
numResults: 2,
threshold: 0.6,
imageMean: 127.5,
imageStd: 127.5,
);
setState(() {
_output.add(output);
_isLoading = false;
});
output!=null ? output.clear() : null;
}
loadModel() async {
await Tflite.loadModel(
model: 'assets/model_unquant.tflite',
labels: 'assets/labels.txt',
);
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
pickImage() async {
var image = await picker.getImage(source: ImageSource.camera);
if(image == null)
return null;
setState(() {
_image = File(image.path);
});
detectImage(_image);
}
pickGalleryImage() async {
var image = await picker.getImage(source: ImageSource.gallery);
if(image == null)
return null;
setState(() {
_image = File(image.path);
});
detectImage(_image);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.grey[400],
body: Center(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 20.0,),
Center(
child: Text(
'Cats and Dogs Detector app',
style: TextStyle(
fontSize: 25.0,
fontWeight: FontWeight.bold,
color: Colors.white70,
),
),
),
SizedBox(height: 200.0),
Center(
child: _isLoading ? Container(
width: MediaQuery.of(context).size.width*0.9,
child: Column(
children: [
Image.asset("assets/cats n dogs 2.jpg", fit: BoxFit.cover,)
],
),
) : Container(
child: Column(
children: [
Container(
height: 250,
child: Image.file(_image),
),
SizedBox(height: 20.0,),
_output!=null ? Text('${_output[0]['label']}', style: TextStyle(color: Colors.white, fontSize: 15.0),) : Container(),
SizedBox(height: 10.0,),
],
),
),
),
SizedBox(
height: 20.0,
),
Center(
child: Container(
width: MediaQuery.of(context).size.width*0.6,
alignment: Alignment.center,
child: Column(
children: [
ElevatedButton(
onPressed: () {
pickImage();
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.grey),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 15.0),
child: Text(
'Capture a pic',
style: TextStyle(
color: Colors.white,
fontSize: 17.5,
),
),
),
),
SizedBox(
height: MediaQuery.of(context).size.height*0.01,
),
ElevatedButton(
onPressed: () {
pickGalleryImage();
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.grey),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 15.0),
child: Text(
'Select from gallery',
style: TextStyle(
color: Colors.white,
fontSize: 17.50,
),
),
),
),
],
),
),
),
],
),
),
),
),
);
}
}
然后错误/异常 -
The following _TypeError was thrown building Home(dirty, dependencies: [MediaQuery], state: _HomeState#17a68):
type 'String' is not a subtype of type 'int' of 'index'
The relevant error-causing widget was:
Home file:///C:/Users/Hp/AndroidStudioProjects/dog_cat_classification/lib/main.dart:15:13
When the exception was thrown, this was the stack:
#0 _HomeState.build (package:dog_cat_classification/home.dart:120:59)
#1 StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
#3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
...
====================================================================================================
Reloaded 1 of 569 libraries in 1,022ms.
Lost connection to device.
行号 120 -_output!=null ? Text('${_output[0]['label']}', style: TextStyle(color: Colors.white, fontSize: 15.0),) : Container(),
解决方案
请帮助我了解您在此处为 _output 分配值但您尝试访问第 122 行中的“标签”,但没有为列表分配标签属性。
这是正确的还是我误解了什么。
detectImage(File image) async {
var output = await Tflite.runModelOnImage(
path: image.path,
numResults: 2,
threshold: 0.6,
imageMean: 127.5,
imageStd: 127.5,
);
setState(() {
_output.add(output);
_isLoading = false;
});
output!=null ? output.clear() : null;
}
推荐阅读
- rest - 使用soapUI时监控数据包
- c# - 找不到也无法使用 System.Web.Services.dll
- python - 在 GMail API 中,使用 Python 3,我如何跳到结果的最后一页?
- crystal-reports - Crystal Reports 11:查找数据被过滤掉的位置
- java - 单个类中的 JUnit 多个测试
- javascript - window.open 正在使用 orgin/url 打开一个新选项卡
- sql - 将不带小数的数字转换为包含小数
- javascript - Jquery 顶级包选择器
- java - 使用 .map 和 .collect 方法时如何忽略 ArrayIndexOutOfBoundsException: 0?
- python - 使用python从文本文件中获取不同的单词