initializeSegmentation method

Future<void> initializeSegmentation({
  1. SegmentationConfig? config,
  2. Set<Accelerator>? accelerators,
  3. Precision? precision,
})

Initializes the optional segmentation model.

Call this after initialize to enable segmentation features. Does nothing if segmentation is already initialized.

config: Segmentation configuration. If null, uses SegmentationConfig.safe.

Throws SegmentationException on model load failure.

Example:

final detector = FaceDetector();
await detector.initialize();
await detector.initializeSegmentation();

final mask = await detector.getSegmentationMask(imageBytes);

Implementation

Future<void> initializeSegmentation({
  SegmentationConfig? config,
  Set<Accelerator>? accelerators,
  Precision? precision,
}) async {
  _requireReady();
  if (_segmentationInitialized) return;
  if (accelerators != null) _accelerators = accelerators;
  if (precision != null) _precision = precision;
  final effectiveConfig = config ?? SegmentationConfig.safe;
  final segModelFile = segmentationModelFile(effectiveConfig.model);
  final segmentationRpc = IsolateRpcClient();
  final data = await rootBundle.load(
    'packages/face_detection_tflite/assets/models/$segModelFile',
  );
  try {
    await _spawnSegmentationIsolate(
      rpc: segmentationRpc,
      modelBytes: data.buffer.asUint8List(),
      config: effectiveConfig,
    );
    _segmentationRpc = segmentationRpc;
    _segmentationInitialized = true;
  } catch (_) {
    await segmentationRpc.disposeGracefully(disposeOp: 'dispose');
    rethrow;
  }
}