image_background_remover 1.0.0 copy "image_background_remover: ^1.0.0" to clipboard
image_background_remover: ^1.0.0 copied to clipboard

A Flutter package that removes the background from images using an ONNX model.

example/lib/main.dart

import 'dart:ui' as ui;

import 'package:example/image_picker.dart';
import 'package:flutter/material.dart';
import 'package:image_background_remover/image_background_remover.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final ValueNotifier<ui.Image?> outImg = ValueNotifier<ui.Image?>(null);

  @override
  void initState() {
    BackgroundRemover.instance.initializeOrt();
    super.initState();
  }

  @override
  void dispose() {
    BackgroundRemover.instance.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Background Remover'),
      ),
      body: ValueListenableBuilder(
        valueListenable: ImagePickerService.pickedFile,
        builder: (context, image, _) {
          return GestureDetector(
            onTap: () async {
              await ImagePickerService.pickImage();
            },
            child: Container(
              alignment: Alignment.center,
              child: image == null
                  ? const Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Icon(
                          Icons.image,
                          size: 100,
                        ),
                        Text('No image selected.'),
                      ],
                    )
                  : SingleChildScrollView(
                      child: Column(
                        children: [
                          Image.file(image),
                          const SizedBox(
                            height: 20,
                          ),
                          TextButton(
                            onPressed: () async {
                              outImg.value = await BackgroundRemover.instance
                                  .removeBg(image.readAsBytesSync());
                            },
                            child: const Text('Remove Background'),
                          ),
                          ValueListenableBuilder(
                            valueListenable: outImg,
                            builder: (context, img, _) {
                              return img == null
                                  ? const SizedBox()
                                  : FutureBuilder(
                                      future: img
                                          .toByteData(
                                              format: ui.ImageByteFormat.png)
                                          .then((value) =>
                                              value!.buffer.asUint8List()),
                                      builder: (context, snapshot) {
                                        if (snapshot.connectionState ==
                                            ConnectionState.waiting) {
                                          return const CircularProgressIndicator();
                                        } else if (snapshot.connectionState ==
                                            ConnectionState.done) {
                                          return Column(
                                            children: [
                                              Image.memory(snapshot.data!),
                                              FutureBuilder(
                                                  future: BackgroundRemover
                                                      .instance
                                                      .addBackground(
                                                          image: snapshot.data!,
                                                          bgColor:
                                                              Colors.orange),
                                                  builder: (context, snapshot) {
                                                    if (snapshot
                                                            .connectionState ==
                                                        ConnectionState
                                                            .waiting) {
                                                      return const CircularProgressIndicator();
                                                    } else if (snapshot
                                                            .connectionState ==
                                                        ConnectionState.done) {
                                                      return Image.memory(
                                                          snapshot.data!);
                                                    } else {
                                                      return const Text(
                                                          'Error');
                                                    }
                                                  }),
                                            ],
                                          );
                                        } else {
                                          return const Text('Error');
                                        }
                                      },
                                    );
                            },
                          ),
                        ],
                      ),
                    ),
            ),
          );
        },
      ),
    );
  }
}
29
likes
150
points
802
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package that removes the background from images using an ONNX model.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, image, onnxruntime

More

Packages that depend on image_background_remover