initialize method

Future<void> initialize({
  1. void onDownloadProgress(
    1. String model,
    2. int received,
    3. int total
    )?,
  2. bool useIsolateInterpreter = true,
})

Initializes the detector by loading TensorFlow Lite models.

Must be called before detect or detectFromMat.

When poseModel is AnimalPoseModel.hrnet, the HRNet model (~54.6 MB) is downloaded from GitHub Releases on first use and cached locally.

onDownloadProgress is called during any model download with (modelName, bytesReceived, totalBytes).

Implementation

Future<void> initialize({
  void Function(String model, int received, int total)? onDownloadProgress,
  bool useIsolateInterpreter = true,
}) async {
  if (_isInitialized) {
    await dispose();
  }

  _bodyDetector = AnimalBodyDetector();
  await _bodyDetector!.initialize(
    performanceConfig,
    useIsolateInterpreter: useIsolateInterpreter,
  );

  _classifier = SpeciesClassifier();
  await _classifier!.initialize(
    performanceConfig,
    useIsolateInterpreter: useIsolateInterpreter,
  );

  if (enablePose) {
    _poseEstimator = BodyPoseEstimator(model: poseModel);
    if (poseModel == AnimalPoseModel.hrnet) {
      final hrnetBytes = await ModelDownloader.getHrnetModel(
        onProgress: onDownloadProgress != null
            ? (r, t) => onDownloadProgress(ModelDownloader.modelHrnet, r, t)
            : null,
      );
      await _poseEstimator!.initializeFromBuffer(
        hrnetBytes,
        effectivePoseConfig,
        useIsolateInterpreter: useIsolateInterpreter,
      );
    } else {
      await _poseEstimator!.initialize(
        effectivePoseConfig,
        useIsolateInterpreter: useIsolateInterpreter,
      );
    }
  }

  _isInitialized = true;
}