Xtr*_*evX 7 machine-learning dart flutter tensorflow tensor
我正在尝试在我的项目中使用 Tensorflow Lite ML 模型,但不幸的是,我在运行我的项目时遇到了错误:
?
** BUILD FAILED **
Xcode's output:
?
/Users/tejasravishankar/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/tflite-1.1.1/ios/Classes/TflitePlugin.mm:21:9: fatal error: 'metal_delegate.h' file not found
#import "metal_delegate.h"
^~~~~~~~~~~~~~~~~~
1 error generated.
note: Using new build system
note: Building targets in parallel
note: Planning build
note: Constructing build description
Could not build the application for the simulator.
Error launching application on iPhone 11 Pro Max.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过flutter clean,并尝试从目录中删除Podfile和,但这并没有改变任何东西。Podfile.lockios
这是我的代码:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:tflite/tflite.dart';
import 'package:image_picker/image_picker.dart';
void main() => runApp(TensorflowApp());
const String pet = 'Pet Recognizer';
class TensorflowApp extends StatefulWidget {
@override
_TensorflowAppState createState() => _TensorflowAppState();
}
class _TensorflowAppState extends State<TensorflowApp> {
String _model = pet;
File _image;
double _imageWidth;
double _imageHeight;
// ignore: unused_field
bool _isLoading = false;
List _predictions;
_selectFromImagePicker() async {
PickedFile _pickedImage =
await ImagePicker().getImage(source: ImageSource.gallery);
File _pickedImageFile = _pickedFileFormatter(_pickedImage);
if (_pickedImage == null) {
return;
} else {
setState(() {
_isLoading = true;
});
_predictImage(_pickedImageFile);
}
}
_predictImage(File image) async {
await _petRecognizerV1(image);
FileImage(image).resolve(ImageConfiguration()).addListener(
ImageStreamListener(
(ImageInfo info, bool _) {
setState(() {
_imageWidth = info.image.height.toDouble();
_imageHeight = info.image.height.toDouble();
});
},
),
);
setState(() {
_image = image;
_isLoading = false;
});
}
_petRecognizerV1(File image) async {
List<dynamic> _modelPredictions = await Tflite.detectObjectOnImage(
path: image.path,
model: pet,
threshold: 0.3,
imageMean: 0.0,
imageStd: 255.0,
numResultsPerClass: 1,
);
setState(() {
_predictions = _modelPredictions;
});
}
_pickedFileFormatter(PickedFile pickedFile) {
File formattedFile = File(pickedFile.path);
return formattedFile;
}
renderBoxes(Size screen) {
if (_predictions == null) {
return [];
} else {
if (_imageHeight == null || _imageWidth == null) {
return [];
}
double factorX = screen.width;
double factorY = _imageHeight / _imageHeight * screen.width;
return _predictions.map((prediction) {
return Positioned(
left: prediction['rect']['x'] * factorX,
top: prediction['rect']['y'] * factorY,
width: prediction['rect']['w'] * factorX,
height: prediction['rect']['h'] * factorY,
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.green, width: 3.0),
),
child: Text(
'${prediction["detectedClass"]} ${(prediction["confidenceInClass"]) * 100.toStringAsFixed(0)}',
style: TextStyle(
background: Paint()..color = Colors.green,
color: Colors.white,
fontSize: 15.0,
),
),
),
);
}).toList();
}
}
@override
void initState() {
super.initState();
_isLoading = true;
_loadModel().then((value) {
setState(() {
_isLoading = false;
});
});
}
_loadModel() async {
Tflite.close();
try {
String response;
if (_model == pet) {
response = await Tflite.loadModel(
model: 'assets/pet_recognizer.tflite',
labels: 'assets/pet_recognizer.txt',
);
}
} catch (error) {
print(error);
}
}
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
title: Text('TFLite Test'),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.image),
tooltip: 'Pick Image From Gallery',
onPressed: () => _selectFromImagePicker,
),
body: Stack(
children: <Widget>[
Positioned(
top: 0.0,
left: 0.0,
width: size.width,
child: _image == null
? Text('No Image Selected')
: Image.file(_image),
),
renderBoxes(size),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我个人认为我的代码没有问题,我尝试运行
flutter pub get
Run Code Online (Sandbox Code Playgroud)
它已经成功地使用成功代码 0 成功运行了几次,尽管它没有解决问题......
我不太确定该怎么做才能继续进行下去,并且非常感谢我得到的任何帮助!谢谢,干杯,我感谢你的帮助:)
将 TensorFlowLiteC 降级到 2.2.0 对我有用
见https://github.com/shaqian/flutter_tflite/issues/139#issuecomment-668252599
在你的Podfile最后添加这个:
pod 'TensorFlowLiteC', '2.2.0'
Run Code Online (Sandbox Code Playgroud)
删除Podfile.lock
删除Pods文件夹
删除.symlinks文件夹
flutter run
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |