ड्राइविंग एवं सुरक्षा
ट्रेसलेट कच्चे स्थान + एक्सेलेरोमीटर स्ट्रीम को सार्थक में बदल सकता है कोई उपकरण कैसे चल रहा है, इसके बारे में घटनाएँ - पूरी तरह से उपकरण पर, बिना किसी बादल के कॉल. 3.3.0 में जोड़ी गई, तीन स्वतंत्र विशेषताएं हैं:
| फ़ीचर | यह आपको क्या बताता है | आप इसे | के साथ सक्षम करें आप सुनिए | के साथ
|---|---|---|---|
| ड्राइविंग इवेंट | “ड्राइवर ने ज़ोर से ब्रेक लगाया / तेज़ गति से तेज़ किया / तेज़ मोड़ लिया / तेज़ गति से गाड़ी चला रहा है” | TelematicsConfig | Tracelet.onDrivingEvent |
| परिवहन मोड | “उपयोगकर्ता अब चल रहा है / दौड़ रहा है / साइकिल चला रहा है / वाहन में है” | ClassifierConfig | Tracelet.onModeChange |
| दुर्घटना एवं पतन | “अभी-अभी दुर्घटना (या गिरावट) हुई होगी” | ImpactConfig | Tracelet.onImpact |
यहां सब कुछ डिफ़ॉल्ट रूप से ऑप्ट-इन और ऑफ है। यदि आप कोई सुविधा सक्षम नहीं करते हैं, इसका इंजन कभी भी नहीं बनाया गया है - आपकी मौजूदा ट्रैकिंग बिल्कुल वैसा ही व्यवहार करती है पहले। केवल वही चालू करें जिसकी आपको आवश्यकता है।
यह किसके लिए है? (वास्तविक दुनिया के उदाहरण)
- उपयोग-आधारित बीमा/बेड़े की सुरक्षा → ड्राइविंग इवेंट आपको प्रति-यात्रा प्रदान करते हैं बिना किसी सर्वर-साइड के जोखिम भरी ड्राइविंग (कठोर ब्रेक लगाना, तेज़ गति) की तस्वीर प्रसंस्करण.
- डिलीवरी / फील्ड-सर्विस ऐप्स → परिवहन मोड आपको प्रत्येक यात्रा को इस प्रकार टैग करने देता है ड्राइविंग बनाम चलना (उदाहरण के लिए “वैन छोड़ कर, दरवाजे तक चलकर”)।
- अकेला-कार्यकर्ता / राइडशेयर / व्यक्तिगत-सुरक्षा ऐप्स → दुर्घटना और गिरावट का पता लगाना आपको एक भरोसेमंद ट्रिगर देता है (उपयोगकर्ता के साथ “मैं ठीक हूं” विंडो रद्द करें)। एक SOS प्रवाह प्रारंभ करें.
आप किसी भी संयोजन को सक्षम कर सकते हैं - वे स्वतंत्र हैं।
1. ड्राइविंग इवेंट (टेलीमैटिक्स)
30 सेकंड का संस्करण
// 1. Turn it on (e.g. with a 50 km/h limit for speeding)
await Tracelet.ready(Config(
telematics: TelematicsConfig(
enableDrivingEvents: true,
speedLimitKmh: 50,
),
));
// 2. Listen
Tracelet.onDrivingEvent((event) {
print('${event.kind} — severity ${event.severity}');
});
// 3. Start tracking as usual
await Tracelet.start();इतना ही। जैसे ही उपकरण चलेगा, आपको इस तरह की घटनाएं मिलेंगी:
harsh_braking — severity 0.82
speeding — severity 0.40प्रत्येक फ़ील्ड का क्या अर्थ है
प्रत्येक DrivingEvent में है:
| फ़ील्ड | मतलब |
|---|---|
kind | harsh_braking, harsh_acceleration, harsh_cornering, या speeding |
severity | 0.0–1.0 — यह सीमा से कितना आगे था (स्कोरिंग के लिए उपयोगी) |
value | मापी गई संख्या: कठोर घटनाओं के लिए जी-बल, तेज गति के लिए सीमा से अधिक किमी/घंटा |
speed | इस समय गति, मी/से. में |
latitude / longitude / timestamp | कहाँ और कब |
दहलीज़ को ट्यून करना
सभी सीमाएं g (1 g ≈ 9.81 m/s², गुरुत्वाकर्षण का खिंचाव) में हैं। डिफ़ॉल्ट सामान्य बीमा/बेड़े अभ्यास का पालन करें - आपको शायद ही कभी उन्हें बदलने की आवश्यकता होगी:
| विकल्प | डिफ़ॉल्ट | यह क्या करता है |
|---|---|---|
harshBrakingG | 0.40 | इससे अधिक जोर से ब्रेक लगाएं → harsh_braking |
harshAccelerationG | 0.35 | इससे अधिक तेज़ गति से चलें → harsh_acceleration |
harshCorneringG | 0.40 | इससे भी सख्त कोना → harsh_cornering |
speedLimitKmh | 0 (बंद) | गति सीमा; 0 गति का पता लगाना अक्षम कर देता है |
speedingToleranceKmh | 5 | इससे पहले कि यह मायने रखता है सीमा से अधिक अनुग्रह |
speedingMinDurationMs | 3000 | इतनी देर तक सीमा से अधिक होना चाहिए (संक्षिप्त ब्लिप्स से बचें) |
minSpeedForEventsKmh | 5 | इस गति (पार्किंग-स्थल शोर) से नीचे की घटनाओं पर ध्यान न दें |
कभी-कभी कोई इवेंट क्यों नहीं होता? ड्राइविंग इवेंट जीपीएस स्पीड से प्राप्त होते हैं, जो प्रति सेकंड लगभग एक बार अपडेट होता है और यह थोड़ा शोर वाला है। ट्रैसलेट जानबूझकर पक्षपात करता है संवेदनशीलता पर सटीकता - इसके बजाय यह एक सीमा रेखा घटना को चूकना पसंद करेगा अकारण शोर मचाना। सर्वोत्तम परिणामों के लिए, वास्तव में गाड़ी चलाते समय (पैदल नहीं) इसका उपयोग करें।
2. परिवहन साधन
आपको बताता है कि क्या उपयोगकर्ता still, walking, running, cycling, या में है
जीपीएस स्पीड के साथ एक्सेलेरोमीटर मूवमेंट को जोड़कर vehicle।
await Tracelet.ready(Config(
classifier: ClassifierConfig(enableFusedClassifier: true),
));
Tracelet.onModeChange((event) {
print('Now: ${event.mode} (confidence ${event.confidence})');
});| विकल्प | डिफ़ॉल्ट | यह क्या करता है |
|---|---|---|
enableFusedClassifier | false | मास्टर स्विच |
fusedClassifierAuthoritative | false | यदि true है, तो फ़्यूज़्ड मोड बैटरी निर्णयों के लिए OS की गतिविधि को ओवरराइड कर देता है। यदि false (डिफ़ॉल्ट) है, तो यह केवल एनोटेट करता है - ओएस मान प्रभारी रहता है |
modeSwitchDwellMs | 8000 | किसी नए मोड को रिपोर्ट किए जाने से पहले इसे लंबे समय तक जारी रखना चाहिए (फ्लिकरिंग बंद कर देता है) |
minModeConfidence | 0.6 | इसके नीचे, मोड को unknown |
एनोटेट बनाम ओवरराइड: डिफ़ॉल्ट रूप से क्लासिफायरियर एक दूसरी राय है - यह
एक मोड की रिपोर्ट करता है लेकिन यह नहीं बदलता कि ट्रैसलेट जीपीएस का नमूना कैसे लेता है। अधिकांश ऐप्स यही चाहते हैं.
यदि आप विशेष रूप से फ़्यूज्ड चाहते हैं तो केवल fusedClassifierAuthoritative: true सेट करें
बैटरी/सैंपलिंग व्यवहार को चलाने का परिणाम।
3. दुर्घटना एवं गिरावट का पता लगाना
उत्पादन के लिए तैयार। स्थिर ऑन-डिवाइस पाइपलाइन के साथ दुर्घटना का पता लगाने वाले जहाज: ए नियम इंजन डिफ़ॉल्ट रूप से, साथ ही एक वैकल्पिक लाइसेंस प्राप्त एआई क्रैश मॉडल प्रशिक्षित CC0 / सार्वजनिक-डोमेन क्रैश डेटासेट पर - इसलिए इसे व्यावसायिक उपयोग के लिए मंजूरी दे दी गई है प्रोडक्शन ऐप्स में. फ़ॉल डिटेक्शन ऑप्ट-इन और सर्वोत्तम प्रयास बना हुआ है। ट्रैक जारी है अंक #183 में सटीकता अनुसंधान।
संभावित दुर्घटना का पता लगाता है (एक कठिन प्रभाव चलते समय) या, वैकल्पिक रूप से, ए व्यक्तिगत गिरावट. क्योंकि झूठे अलार्म महंगे होते हैं, इसलिए पता लगाना पुष्ट होता है (अकेला एक बड़ा झटका कभी भी पर्याप्त नहीं होता) और उपयोगकर्ता को रद्द करने के लिए उलटी गिनती देता है।
await Tracelet.ready(Config(
impact: ImpactConfig(
enableCrashDetection: true,
confirmWindowMs: 15000, // 15s for the user to say "I'm fine"
),
));
Tracelet.onImpact((event) async {
if (event.isPotential) {
// Show a big "Are you OK?" countdown screen.
// If the user taps "I'm fine":
await Tracelet.cancelImpact(event.id);
// If they tap "Get help now":
// await Tracelet.confirmImpact(event.id);
} else {
// event.kind == 'crash' (or 'fall') — confirmed.
// The user didn't cancel in time → start your SOS flow.
}
});प्रवाह कैसे काम करता है
- तेजी से चलते समय एक कठिन प्रभाव → आपको एक
potential_crashईवेंट मिलता है एकconfirmDeadline। - उलटी गिनती यूआई दिखाएं। उपयोगकर्ता रद्द (
cancelImpact) या अभी पुष्टि कर सकता है (अनुवादित नहीं)। - यदि वे समय सीमा से पहले कुछ नहीं करते हैं → पुष्टि की गई
crashघटना सक्रिय हो जाती है।
| विकल्प | डिफ़ॉल्ट | यह क्या करता है |
|---|---|---|
enableCrashDetection | false | वाहन दुर्घटना का पता लगाना |
enableFallDetection | false | व्यक्तिगत गिरावट (सर्वोत्तम प्रयास - अधिक झूठे अलार्म) |
crashGThreshold | 2.0 | प्रभाव शक्ति (जी) को दुर्घटना के रूप में गिनना। एक बड़े फ़ील्ड-डेटा अध्ययन के आधार पर 3.0 से कम किया गया (3.0 ग्राम छूट गया ~वास्तविक क्रैश का आधा); रद्दीकरण-उलटी गिनती झूठे अलार्म पकड़ने के बाद से वापस बुलाने का पक्ष लेती है। यदि आपको बहुत अधिक संकेत दिखाई देते हैं तो ट्यून अप करें। |
crashMinSpeedKmh | 25 | इतनी तेजी से आगे बढ़ रहा होगा (पुष्टि) |
confirmWindowMs | 15000 | उलटी गिनती की लंबाई रद्द करें |
minImpactConfidence | 0.6 | कम आत्मविश्वास वाले उम्मीदवारों का दमन करें |
ट्रैसलेट आपको ट्रिगर और कैंसिल विंडो देता है - यह कभी फ़ोन नहीं करता है आपातकालीन सेवाओं को कॉल करें या संपर्क करें। वास्तविक एसओएस/आपातकालीन प्रवाह का निर्माण करना है आपके ऐप की ज़िम्मेदारी (और आपको UX और कानूनी प्रतिलिपि को नियंत्रित करने देती है)।
पुष्टिकरण ऐप के ख़त्म होने से बच जाता है
एक हिंसक प्रभाव अक्सर ओएस द्वारा ऐप को ख़त्म करने के साथ समाप्त होता है - फ़ोन फेंक दिया जाता है,
वाहन रुक जाता है, उपकरण डोज़ में चला जाता है। यदि रद्द-उलटी गिनती
केवल स्मृति में रहता था, पुष्टि की गई crash/fall चुपचाप कभी सक्रिय नहीं होगी।
ट्रेसलेट उलटी गिनती को प्रक्रिया-मृत्यु को सुरक्षित बनाता है: तत्काल ए
potential_crash/potential_fall बढ़ा दिया गया है, यह डिस्क पर कायम है और a
वेक-अप समय सीमा के ठीक बाद के लिए सशस्त्र है। यदि ऐप अभी भी जीवित है
सामान्य रूप से पुष्टि करता है और वेक-अप को निष्क्रिय कर देता है; यदि यह मारा गया, तो जाग जाओ
एक ताजा प्रक्रिया से पुष्टि की गई घटना को पुनः उत्सर्जित करता है ताकि आपका एसओएस प्रवाह अभी भी चलता रहे।
| प्लेटफार्म | तंत्र |
|---|---|
| एंड्रॉइड | एक सटीक AlarmManager अलार्म (setExactAndAllowWhileIdle, डोज़ में भी सक्रिय होता है) एक रिसीवर को जगाता है जो पुष्टि की गई घटना को फिर से वितरित करता है। |
| आईओएस | समय सीमा पर निर्धारित एक स्थानीय अधिसूचना ऐप के बंद होने पर भी उपयोगकर्ता को सचेत करती है; अगली बार जब SDK चलता है (पृष्ठभूमि पुन: लॉन्च या अग्रभूमि) तो पुष्टि की गई घटना पुनः वितरित की जाती है। उपयोगकर्ता-सामना वाले अलर्ट के लिए अधिसूचना अनुमति प्रदान करें - पुनः वितरण किसी भी तरह से काम करता है। |
एक उपयोगकर्ता रद्द करें मौजूदा उम्मीदवार को हटा देता है और वेक-अप को निष्क्रिय कर देता है, इसलिए a पुनः आरंभ करने के बाद रद्द किए गए उम्मीदवार की दोबारा पुष्टि नहीं की जाती है।
अतिरिक्त सुराग जो वास्तविक दुर्घटना या गिरावट की पुष्टि करते हैं
अपने आप में एक बड़ा झटका पर्याप्त नहीं है - यह बहुत सारे झूठे अलार्म पैदा करेगा। इसलिए ट्रैसलेट अतिरिक्त वास्तविक दुनिया के सुरागों की तलाश करता है जो आम तौर पर वास्तविकता के दौरान घटित होते हैं दुर्घटना या गिरना. वह जितने अधिक सुराग देखता है, वह उतना ही अधिक आश्वस्त होता है। ये सुराग ही कर सकते हैं ट्रैसलेट को अधिक आश्वस्त बनाएं - वे कभी भी किसी वास्तविक घटना को रद्द नहीं करते हैं।
- फोन गिर रहा था - इससे ठीक पहले कि कोई अपना फोन गिराए या उठाए गिरने पर, फ़ोन कुछ समय के लिए भारहीन हो जाता है। स्पॉटिंग से गिरावट अधिक होती है विश्वसनीय.
- बाद में सब कुछ स्थिर हो गया - वास्तविक गिरावट के बाद, व्यक्ति और फोन आमतौर पर हिलना बंद कर दें। वह अचानक शांति एक मजबूत संकेत है।
- कार अचानक रुक गई - वास्तविक दुर्घटना में वाहन तेजी से आगे बढ़ता है एक या दो सेकंड में लगभग रुक गया। गति में तेज गिरावट दुर्घटना का कारण बनती है।
- एक दबाव “पॉप” - एक गंभीर दुर्घटना (या एक एयरबैग का बंद हो जाना) एक त्वरित कारण बनता है कार के अंदर हवा के दबाव में बदलाव. जिन फ़ोनों में प्रेशर सेंसर हो सकता है इस पर ध्यान दें; बिना किसी नकारात्मक पक्ष के फ़ोन इस जांच को छोड़ देते हैं।
वैकल्पिक: लाइसेंस प्राप्त AI क्रैश मॉडल
डिफ़ॉल्ट रूप से क्रैश डिटेक्शन एक नियम इंजन (जी-थ्रेसहोल्ड + स्पीड) का उपयोग करता है उपरोक्त पुष्टि) - कोई अतिरिक्त सेटअप नहीं, बॉक्स से बाहर काम करता है। उच्च सटीकता के लिए आप एआई क्रैश मॉडल को सक्षम कर सकते हैं: एक प्रशिक्षित मॉडल जो गेट्स पर क्रैश हो जाता है एक निश्चित सीमा के बजाय सीखी गई संभाव्यता।
यह ऑप्ट-इन है और मांग पर डाउनलोड किया जाता है (एम्बेडेड नहीं), इसलिए आधार एसडीके आकार अपरिवर्तित है. इसे चालू करने के लिए, एक लाइसेंस कुंजी प्राप्त करें और अपनी कॉन्फ़िगरेशन को उस पर इंगित करें:
await Tracelet.ready(Config(
impact: ImpactConfig(
enableCrashDetection: true,
crashModelUnlockUrl: 'https://unlock.ikolvi.com/unlock',
crashModelLicenseKey: '<your license key>',
crashModelThreshold: 0.5074, // rf_probability_threshold from training
),
));| विकल्प | डिफ़ॉल्ट | यह क्या करता है |
|---|---|---|
crashModelUnlockUrl | null | लाइसेंसिंग समापन बिंदु जो मॉडल को सक्रिय करता है। null ⇒ शुद्ध नियम इंजन |
crashModelLicenseKey | null | आपकी लाइसेंस कुंजी (लाइसेंस प्राप्त करें पृष्ठ से) |
crashModelThreshold | 0.5 | संभाव्यता जिस पर मॉडल दुर्घटना को चिह्नित करता है |
यदि मॉडल किसी भी कारण से सक्रिय नहीं हो पाता है (ऑफ़लाइन, अमान्य कुंजी) तो SDK स्वचालित रूप से नियम इंजन पर वापस आ जाता है - आपका ऐप काम करता रहता है।
लाइसेंस प्राप्त करें
लाइसेंस प्राप्त करें पृष्ठ से एक कुंजी लें: साइन इन करें, अपना दर्ज करें
एप्लिकेशन आईडी, और रेडी-टू-पेस्ट कुंजी (या पूर्ण ImpactConfig) की प्रतिलिपि बनाएँ
स्निपेट)।
- डेव लाइसेंस - डिबग बिल्ड और एमुलेटर के लिए। बस आपकी ऐप आईडी, कोई अतिरिक्त नहीं स्थापित करना।
- उत्पाद लाइसेंस — आपके भेजे गए ऐप के लिए; आपके ऐप साइनिंग-सर्टिफिकेट की भी आवश्यकता है
SHA-256 (प्ले कंसोल → ऐप अखंडता → ऐप साइनिंग, या
./gradlew signingReport)।
पोर्टल आपकी जारी की गई चाबियों को भी सूचीबद्ध करता है और आपको तुरंत निरस्त करने देता है।
ड्राइविंग (सिमुलेशन) और डेटाबेस एक्सेस के बिना इसे आज़माना
ट्रैसलेट में टेलीमैटिक्स घटनाओं को संग्रहीत करने के लिए समर्पित डेटाबेस टेबल और डायग्नोस्टिक एपीआई का एक सेट शामिल है। ट्रेसलेट डॉक्टर डायग्नोस्टिक ओवरले द्वारा इनका भारी उपयोग किया जाता है, लेकिन आप इन्हें सीधे अपने ऐप में कस्टम डायग्नोस्टिक स्क्रीन बनाने या कार को भौतिक रूप से चलाने या दुर्घटनाग्रस्त करने की आवश्यकता के बिना अपने सुरक्षा प्रवाह का परीक्षण करने के लिए भी उपयोग कर सकते हैं।
डेटाबेस से टेलीमैटिक्स पुनर्प्राप्त करना
प्रत्येक ड्राइविंग और प्रभाव घटना स्वचालित रूप से स्थानीय SQLite डेटाबेस में बनी रहती है। जोखिम भरे ड्राइविंग व्यवहार का इतिहास प्रदर्शित करने के लिए आप इन संरचित रिकॉर्ड को पुनः प्राप्त कर सकते हैं:
// Fetch the 50 most recent telematics events from the database
final events = await Tracelet.getTelematicsEvents(50);
for (final event in events) {
print('Event Type: \${event.eventType}'); // e.g. harsh_braking, crash
print('Severity: \${event.severity}');
print('Location: \${event.latitude}, \${event.longitude}');
}घटनाओं का अनुकरण
आप मॉक टेलीमैटिक्स इवेंट को सीधे देशी ट्रैकिंग इंजन में इंजेक्ट कर सकते हैं। यह आपके ऐप की प्रतिक्रिया (जैसे किसी क्रैश पर एसओएस स्क्रीन दिखाना) या आपके यूआई घटकों का परीक्षण करने के लिए बिल्कुल सही है। उदाहरण ऐप का ड्राइविंग और सुरक्षा पृष्ठ और ट्रैसलेट डॉक्टर ओवरले इस एपीआई का उपयोग डेवलपर्स को बटन के माध्यम से घटनाओं को ट्रिगर करने की अनुमति देने के लिए करते हैं।
// Simulate a harsh braking event (named arguments)
await Tracelet.simulateTelematicsEvent(
eventType: 'harsh_braking',
severity: 0.85, // 0.0 to 1.0
latitude: 37.422,
longitude: -122.084,
);डेटाबेस साफ़ करना
यदि आपको डायग्नोस्टिक स्थिति को रीसेट करने या स्थानीय डेटाबेस से टेलीमैटिक्स घटनाओं के इतिहास को साफ़ करने की आवश्यकता है, तो आप कतार को शुद्ध कर सकते हैं:
await Tracelet.destroyTelematicsEvents();स्वचालित परीक्षणों में, आप इंजन को सीधे डार्ट से भी चला सकते हैं (वे flutter_rust_bridge के माध्यम से उजागर होते हैं) - example/integration_test/behavior_simulation_test.dart देखें।
अनुमतियां
- ड्राइविंग इवेंट को केवल उस स्थान की अनुमति की आवश्यकता है जिसके लिए आप पहले से ही उपयोग कर रहे हैं ट्रैकिंग - कुछ भी अतिरिक्त नहीं।
- ट्रांसपोर्ट मोड और क्रैश/फ़ॉल एक्सेलेरोमीटर का उपयोग करें। एंड्रॉइड पर वह है गति पहचान के लिए पहले से ही चल रहा है (कोई नई अनुमति नहीं)। iOS पर, जोड़ रहा हूँ मोशन और फिटनेस उपयोग विवरण सटीकता में सुधार करता है। देखें आईओएस और एंड्रॉइड सेटअप पेज।
जानकर अच्छा लगा
- ऑन-डिवाइस और नियतात्मक - सभी पहचान साझा रस्ट कोर में चलती है। नहीं नेटवर्क, कोई क्लाउड मॉडल नहीं, Android और iOS पर समान परिणाम।
- ड्राइविंग इवेंट वेब पर भी काम करते हैं (वे जीपीएस-व्युत्पन्न हैं)।
- साइड-चैनल - ये घटनाएँ आपके सामान्य के साथ-साथ वितरित की जाती हैं
onLocationस्ट्रीम; वे कभी भी आपका स्थान, ओडोमीटर या सिंक नहीं बदलते।