Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:typed_data';
- import 'package:flutter/material.dart';
- import 'package:mlkit/mlkit.dart';
- void main() => runApp(MyApp());
- class MyApp extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- title: 'Tflite add',
- theme: ThemeData(
- primarySwatch: Colors.blue,
- ),
- home: MyHomePage(),
- );
- }
- }
- class MyHomePage extends StatefulWidget {
- @override
- _MyHomePageState createState() => _MyHomePageState();
- }
- class _MyHomePageState extends State<MyHomePage> {
- String _left = "1.2";
- String _right = "3.4";
- String _output = "";
- FirebaseModelInterpreter interpreter = FirebaseModelInterpreter.instance;
- FirebaseModelManager manager = FirebaseModelManager.instance;
- Future<void> initTflite() {
- return this.manager.registerRemoteModelSource(
- FirebaseRemoteModelSource(
- modelName: "add",
- enableModelUpdates: true,
- ),
- );
- }
- void _onLeftOpChanged(String op) {
- setState(() {
- _left = op;
- });
- }
- void _onRightOpChanged(String op) {
- setState(() {
- _right = op;
- });
- }
- @override
- void initState() {
- super.initState();
- initTflite();
- }
- void _onActionButtonPressed() async {
- final leftNum = double.parse(_left);
- final rightNum = double.parse(_right);
- const ROW = 2;
- const COLUMN = 5;
- const options = FirebaseModelInputOutputOptions([
- FirebaseModelIOOption(FirebaseModelDataType.FLOAT32, [ROW, COLUMN]),
- FirebaseModelIOOption(FirebaseModelDataType.FLOAT32, [ROW, COLUMN]),
- ], [
- FirebaseModelIOOption(FirebaseModelDataType.FLOAT32, [ROW, COLUMN]),
- ]);
- final left = List<double>(ROW * COLUMN);
- final right = List<double>(ROW * COLUMN);
- for (var i = 0; i < ROW; i++) {
- for (var j = 0; j < COLUMN; j++) {
- left[COLUMN * i + j] = leftNum;
- right[COLUMN * i + j] = rightNum;
- }
- }
- final concat = <double>[]..addAll(left)..addAll(right);
- print(concat);
- final input = float32ListToUint8List(Float32List.fromList(concat));
- print(input);
- final output = await this.interpreter.run("add", options, input);
- print(output);
- setState(() {
- _output = (output[0][0][0] as double).toStringAsFixed(2);
- });
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: Padding(
- padding: const EdgeInsets.all(16.0),
- child: Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- TextField(
- decoration: InputDecoration(
- labelText: 'left-hand operand',
- ),
- onChanged: _onLeftOpChanged,
- keyboardType: TextInputType.numberWithOptions(
- signed: true,
- decimal: true,
- ),
- ),
- TextField(
- decoration: InputDecoration(
- labelText: 'right-hand operand',
- ),
- onChanged: _onRightOpChanged,
- keyboardType: TextInputType.numberWithOptions(
- signed: true,
- decimal: true,
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(top: 32.0),
- child: Text(
- _output,
- style: Theme.of(context).textTheme.display1,
- ),
- ),
- ],
- ),
- ),
- ),
- floatingActionButton: FloatingActionButton(
- onPressed: _onActionButtonPressed,
- tooltip: 'Execute',
- child: Icon(Icons.add),
- ),
- );
- }
- }
- Uint8List float32ListToUint8List(Float32List list) {
- return list.buffer.asUint8List();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement