// ailia SDKでYOLOXモデルを実行
import 'dart:io';
import 'dart:typed_data';
import 'package:ailia/ailia.dart';
import 'package:ailia/ailia_model.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';

class YoloX {
  AiliaDetectorModel? _model;
  final List<String> category = ["2L", "L", "M", "S", "2S", "UNKNOWN"];

  void open() async {
    // 1.一旦assetsのモデルをファイルに保存…①
    final byteData = await rootBundle.load('assets/model.onnx');
    final tempDir = await getTemporaryDirectory();
    final file = File('${tempDir.path}/model.onnx');
    await file.writeAsBytes(byteData.buffer.asUint8List(
      byteData.offsetInBytes,
      byteData.lengthInBytes,
    ));

    // 2.保存したファイルを読み込む…②
    _model = AiliaDetectorModel();
    _model!.openFile(
      file.path,
      networkImageFormat: AILIA_NETWORK_IMAGE_FORMAT_RGB,
      numCategory: 6,
    );
  }

  List<AiliaDetectorObject> run(Uint8List data, int width, int height) {
    /* 物体検出モデルを使って推論を実行する…③
        data  : 画像データ(RGBの1次元配列)
        width : 画像の横幅
        height: 画像の高さ
    */
    List<AiliaDetectorObject> ret = _model!.run(data, width, height);
    return ret;
  }

  void close() {
    _model!.close();
  }
}
