hand_landmarker 3.0.1
hand_landmarker: ^3.0.1 copied to clipboard
A Flutter plugin for real-time hand landmark detection on Android using Google's MediaPipe Hand Landmarker task and a JNI bridge.
Changelog #
All notable changes to this project will be documented in this file.
3.0.1 - 2026-07-05 #
🛠️ Maintenance #
- Updates minimum supported SDK version to Flutter 3.44/Dart 3.12.
- Migrates to built-in Kotlin
3.0.0 - 2026-06-19 #
💥 Breaking Changes #
- Asynchronous Streaming API: The synchronous
detect()method has been completely removed from the Dart API.- Action Required: Consumers must now use the non-blocking, fire-and-forget
processFrame()method to pass camera frames, and listen to the newlandmarkStreamto receive hand tracking data asynchronously.
- Action Required: Consumers must now use the non-blocking, fire-and-forget
⚡ Performance Enhancements #
- Zero-Blocking Inference: Transitioned the core MediaPipe architecture from
IMAGEmode toLIVE_STREAMmode. Inference now runs entirely on a native background worker thread, completely eliminating Flutter UI jank and dropped frames. - Direct YUV to ARGB Conversion: Replaced the expensive YUV -> NV21 -> JPEG -> Bitmap conversion pipeline with a direct YUV to ARGB8888 Bitmap conversion using fast integer math. This drastically reduces CPU load and memory allocations on every camera frame.
- Optimized Native Bridging: Implemented a Kotlin
companion objectto capture background results and route them directly to a standard FlutterEventChannel, bypassing complex JNI callback mapping and keeping the bridge lightweight.
2.3.0 - 2026-06-17 #
🛠️ Maintenance & Dependencies #
- JNI Configuration Migration: Migrated the
jnigenconfiguration fromjnigen.yamlto a Dart-based script attool/jnigen.dartfor compatibility withjnigen0.16.0. - Context Refactor: Refactored native context retrieval in
hand_landmarker.dartto useandroidApplicationContextvia the newjni_flutterpackage. - SDK Constraints: Updated the minimum Dart SDK requirement to
>=3.3.0for both the plugin and the example app. - Dependency Bumps:
- Bumped
jnito^1.0.0. - Added
jni_flutterat^1.0.1. - Bumped
jnigen(dev dependency) to^0.16.0. - Bumped
camerato^0.12.0+1. - Bumped Android MediaPipe
tasks-visiondependency to0.10.29inandroid/build.gradle.
- Bumped
2.2.0 - 2025-12-13 #
💥 Breaking Changes #
- Delegate Enum Case Change: The values for the
HandLandmarkerDelegateenum have been changed fromALL_CAPS(CPU,GPU) tolowerCamelCase(cpu,gpu) to adhere to Dart linter standards.- Action Required: Users must update all usage from
HandLandmarkerDelegate.CPUorHandLandmarkerDelegate.GPUtoHandLandmarkerDelegate.cpuorHandLandmarkerDelegate.gpurespectively.
- Action Required: Users must update all usage from
🛠️ Maintenance #
- Major Build Toolchain Upgrade: Modernized the Android build configuration for both the plugin and the example app. Note: This update requires a compatible development environment, including JDK 17 and Android Studio Giraffe (or newer), to successfully build the plugin.
- Upgraded Android Gradle Plugin (AGP) to
8.11.1. - Retained Kotlin at
2.1.0due to currentjnigentoolchain limitations. - Updated Java source/target compatibility and
jvmTargettoVERSION_17(previouslyVERSION_11). - Updated
compileSdkto36. - Updated the Gradle Wrapper to version
8.14.
- Upgraded Android Gradle Plugin (AGP) to
- Dependency Updates: Updated core dependencies:
jnito0.15.2andjnigento0.15.0, andplugin_platform_interfaceto2.1.8.
2.1.2 - 2025-11-03 #
🐛 Bug Fixes #
- Fixed potential crashes in Android release builds by adding consumer ProGuard rules. This ensures MediaPipe's essential classes are not stripped by R8. (46a978a)
🛠️ Maintenance #
- Updated
cameraplugin dependency to version0.11.3.
📝 Documentation #
- Added additional examples for plugin usage in
README.md.
2.1.1 - 2025-10-27 #
2.1.0 - 2025-07-15 #
✨ Features #
- Configurable Options: Added the ability to configure the hand landmarker with the following options:
numHands: The maximum number of hands to detect.minHandDetectionConfidence: The minimum confidence score for hand detection to be considered successful.delegate: The delegate to use for inference, allowing for selection betweenCPUandGPU.
- see e1dff3e
2.0.0 - 2025-07-08 #
💥 Breaking Changes #
- Synchronous API: The plugin's core methods are now synchronous to improve performance. This affects how you create, use, and dispose of the plugin.
HandLandmarkerPlugin.create()no longer returns a Future.HandLandmarkerPlugin.dispose()is now synchronous.- The
detect()method is now a synchronous, blocking call. You must manage how frequently you call it to avoid blocking the UI thread.
✨ Features & Performance #
- Native Image Processing (BREAKING): Rearchitected the plugin to perform all YUV image conversion natively in Kotlin. This eliminates the Dart background isolate and significantly reduces data transfer overhead for much lower latency. (347f5f1)
- GPU Acceleration: Enabled the MediaPipe GPU delegate by default to accelerate model inference, resulting in smoother real-time performance. (4749d8c)
1.0.0 #
- Initial release of the project.