Pub.dev Package: Link
GitHub Repository: Link
Imagine getting into a serious car crash in a remote area—a mountain pass, a highway dead zone, or a rural road with zero cell signal.
You open your safety app, or its automated background trigger fires... only to hang indefinitely because it relies on a cloud API to process sensor data or verify the crash.
That single point of failure bugged me for months. Emergency safety features shouldn’t depend on a stable 5G connection. If an engine can detect a crash instantly via onboard physics, our software should be able to do the same on-device.
So, I built and open-sourced offline_sos_system—a pure Dart, 100% offline crash detection engine powered by on-device TensorFlow Lite.
💡 Why Build This?
Most existing Flutter solutions for safety or impact detection suffer from one of three issues:
- Cloud Dependency: They stream raw accelerometer data to a backend server for ML inference. (Fails in dead zones).
-
Simple Threshold Logic: They rely solely on basic
G-force > Xspikes, leading to massive false-positive rates (like dropping your phone on a table or hitting a pothole). - Heavy Native Dependencies: They require complex, platform-specific iOS/Android native code bindings that are difficult to maintain or integrate into clean Dart architectures.
I wanted a solution that was pure Dart/Flutter at the developer layer, handled complex multi-axis motion patterns via Edge AI, and never made a single network request.
⚙️ How It Works Under the Hood
The package handles the entire pipeline locally on the device:
- Continuous Telemetry Buffering: Ingests high-frequency raw data from the device’s accelerometer and gyroscope sensors.
- Signal Preprocessing & Feature Extraction: Filters noise, down-samples vector streams, and converts raw hardware readings into structured tensor windows.
-
On-Device Inference: Runs the preprocessed window through an embedded TensorFlow Lite model using
tflite_flutter. - Headless Event Stream: Outputs a clean, reactive stream of crash confidence events—allowing your application logic to decide what happens next (e.g., triggering a local alarm, queuing an offline SMS, or fetching last-known GPS coordinates).
🛠️ Quick Implementation
Here is how simple it is to initialize and listen for crash events in Flutter:
dart
import 'package:offline_sos_system/offline_sos_system.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize the offline SOS engine
final sosEngine = OfflineSosSystem();
await sosEngine.initialize();
// Listen to real-time crash detection events
sosEngine.crashStream.listen((CrashEvent event) {
if (event.isCrashDetected) {
print('CRASH DETECTED!');
print('Confidence Score: ${event.confidence}');
print('Impact Force: ${event.gForce}G');
// Trigger your app's local emergency protocols here
}
});
// Start monitoring sensor telemetry
await sosEngine.startMonitoring();
}
Top comments (1)
Great insight!!!!