createCompiledFromBuffer static method
Future<SelfieSegmentation>
createCompiledFromBuffer(
- Uint8List modelBytes, {
- SegmentationConfig config = const SegmentationConfig(),
- Set<
Accelerator> accelerators = const {Accelerator.gpu, Accelerator.cpu}, - Precision precision = Precision.fp16,
Creates a selfie segmentation model backed by LiteRT CompiledModel.
All variants compile, including the binary general/landscape models
built on the Convolution2DTransposeBias custom op (verified to match
the Interpreter output on macOS arm64). Should a platform's LiteRT
runtime reject a model, this throws a SegmentationException; callers
that need guaranteed availability should fall back to
createFromBuffer, as FaceDetector's segmentation isolate does.
Implementation
static Future<SelfieSegmentation> createCompiledFromBuffer(
Uint8List modelBytes, {
SegmentationConfig config = const SegmentationConfig(),
Set<Accelerator> accelerators = const {Accelerator.gpu, Accelerator.cpu},
Precision precision = Precision.fp16,
}) async {
final effectiveModel = config.model;
final inW = _segmentationInputWidth;
final inH = _inputHeightFor(effectiveModel);
final outChannels = _expectedOutputChannels(effectiveModel);
final CompiledModel compiledModel;
try {
compiledModel = _isDefaultAccelerators(accelerators)
? CompiledModel.fromBufferWithGpuFallback(
modelBytes,
precision: precision,
onFallback: _onGpuFallback,
)
: CompiledModel.fromBuffer(
modelBytes,
accelerators: accelerators,
precision: precision,
);
} catch (e) {
throw SegmentationException(
SegmentationError.interpreterCreationFailed,
'Failed to compile ${effectiveModel.name} segmentation model: $e',
e,
);
}
final obj = SelfieSegmentation._compiled(
compiledModel,
inW,
inH,
outChannels,
config,
effectiveModel,
);
try {
obj._initializeCompiledModel();
return obj;
} catch (_) {
obj.dispose();
rethrow;
}
}