Camera Linux is a Flutter FFI plugin designed specifically for the Linux platform. This plugin allows Flutter developers to access and capture images from the Linux camera, seamlessly integrating native code invocation using Dart's FFI.
- Dart FFI Integration: Built on top of Flutter's FFI (Foreign Function Interface) to directly invoke native functions.
- Platform-Specific: Tailored for Linux, ensuring optimal performance and compatibility.
- Easy Access to Camera: Provides straightforward functions to initialize, capture images, and stop the camera.
- Base64 Image Encoding: Captures images and converts them to base64 format for easy display and manipulation.
To use this plugin, add camera_linux
as a dependency in your pubspec.yaml
file:
dependencies:
camera_linux: ^0.1.0
Before using this plugin, ensure you have the necessary system dependencies installed. The main requirement is the OpenCV library. Here's how to install it on various Linux distributions:
sudo apt update
sudo apt install libopencv-dev
sudo dnf install opencv opencv-devel
sudo pacman -S opencv
sudo zypper install opencv opencv-devel
First, enable the EPEL repository:
sudo yum install epel-release
Then install OpenCV:
sudo yum install opencv opencv-devel
sudo emerge --ask media-libs/opencv
For other Linux distributions, please refer to their package management systems to install the equivalent OpenCV development libraries. The package might be named opencv
, libopencv
, or opencv-devel
depending on the distribution.
If your distribution doesn't provide pre-built OpenCV packages, you may need to compile OpenCV from source. Refer to the official OpenCV documentation for detailed instructions.
Here's a basic example of how to use the camera_linux
plugin:
import 'package:camera_linux/camera_linux.dart';
// Create an instance of the plugin
final cameraLinux = CameraLinux();
// Initialize the camera
await cameraLinux.initializeCamera();
// Capture an image
String base64Image = await cameraLinux.captureImage();
// Stop the camera
cameraLinux.stopCamera();
Initializes the camera and starts video capture in a separate thread.
Captures the latest frame from the camera and returns it as a base64-encoded string.
Stops the video capture and closes the camera.
The plugin includes an example app demonstrating its usage. The app provides buttons to start the camera, capture images, and stop the camera. Captured images are displayed in the app.
To run the example app:
- Navigate to the example directory:
cd example
- Run the app:
flutter run -d linux
src/
: Contains the native source code and CMakeLists.txt for building the dynamic library.lib/
: Contains the Dart code defining the plugin API and FFI bindings.linux/
: Contains build files for bundling the native code library with the platform application.
The pubspec.yaml
specifies this as an FFI plugin:
plugin:
platforms:
linux:
ffiPlugin: true
This configuration invokes the native build for Linux and bundles the binaries in Flutter applications using this FFI plugin.
The Dart bindings to native code are auto-generated from the header file (src/camera_linux.h
) using the package:ffigen
. To refresh these bindings, run:
flutter pub run ffigen --config ffigen.yaml