الفئة المستهدفة: هذه المقالة موجَّهة إلى مهندسي البرمجيات الثابتة (firmware)، ومصممي تجربة المستخدم (UX)، ومديري منتجات OEM الذين يحتاجون إلى فهم خوارزمية التعرف على الإيماءات التي تعمل على أقلام القراءة B1 وB2 وF8 وK7 وKF1 وL5 وP2 وQ6 وQ8 وT2 وY6. نفترض أنك تصمم واجهة مستخدم (UI) بقائمة مخصصة أو تقيِّم كيفية إضافة إيماءات إلى تطبيق قاموس موجود، وتحتاج إلى معرفة معدل التعرف، وزمن الاستجابة، وحمل المعالج (CPU) الذي يمكن توقُّعه.
إيماءة قلم القراءة هي سلسلة من عينات اللمس تُلتقط خلال فترة تتراوح بين 30 مللي ثانية و500 مللي ثانية. تُحوِّل البرمجيات الثابتة هذه العينات إلى رمز إيماءة منفصل (TAP، SWIPE_LEFT، SWIPE_RIGHT، SWIPE_UP، SWIPE_DOWN، LONG_PRESS، DOUBLE_TAP، CIRCLE) تربطه طبقة التطبيقات بإجراء في واجهة المستخدم. التحويل خفيف بما يكفي ليعمل على أي من الطرازات الأحد عشر، إلا أن ضبطه يختلف من طراز إلى آخر لأن دقة المستشعر، ومعدل أخذ العينات، وميزانية وحدة المعالجة المركزية المضيفة كلها متفاوتة. تتناول هذه المقالة الخوارزمية، وأرقام الضبط، وأنماط الفشل التي ينبغي للمشترين التخطيط لها.
1. مفردات الإيماءات
عبر الطرازات الأحد عشر التي نُصدِّرها، تظل مفردات الإيماءات متسقة:
| الإيماءة | نافذة العينات | مستخدمة في |
|---|---|---|
| نقرة | لمس + رفع خلال 30 مللي ثانية إلى 250 مللي ثانية | جميع الطرازات الأحد عشر (عبر زر بديل في طرازات المناطق) |
| ضغط طويل | لمسة مستمرة من 600 مللي ثانية إلى 2000 مللي ثانية | K7، KF1، L5، Q8، T2 |
| نقرة مزدوجة | لمستان ضمن 300 مللي ثانية | L5، Q8، T2 |
| سحب لليسار / لليمين | سحب مستمر من 50 مللي ثانية إلى 250 مللي ثانية، ≥ 8 مم | K7، KF1، L5، Q8، T2 |
| سحب للأعلى / للأسفل | نفس المدة، في الاتجاه العمودي | L5، Q8، T2 (فقط) |
| دائرة | مسار مغلق، ≥ 12 مم محيط | Q8، T2 (ميزة فاخرة) |
طرازات المناطق البسيطة (B1، B2، F8، P2، Q6، Y6) لا تشغِّل الإيماءات على الإطلاق لأنها تفتقر إلى مستشعر لمس ثنائي الأبعاد. وهي تستعيض عن ذلك بـ 4 إلى 8 مناطق أزرار منفصلة. تركِّز هذه المقالة على الطرازات المصفوفية.
2. خط أنابيب الخوارزمية
تُنفَّذ خوارزمية التعرف على الإيماءات في أربع مراحل. لكل مرحلة ميزانية حاسمة لوحدة المعالجة المركزية؛ إذا تجاوزت أي مرحلة ميزانيتها، تُحذف الإيماءة (دون إصدار أمر) بدلاً من التعرف الخاطئ.
المرحلة 1: اقتناء العينات. يُبلِّغ متحكم اللمس بالإحداثيات بمعدل يتراوح بين 80 هرتز و120 هرتز. وتقرأ وحدة MCU المضيفة هذه البيانات عبر I2C بسرعة 100 كيلوهرتز إلى 400 كيلوهرتز في K7/KF1/L5، وعبر SPI بسرعة 10 ميغاهرتز في Q8/T2. كل عينة هي صفّ (x، y، t).
المرحلة 2: منع الاهتزاز ورفض القيم الشاذة. يتم دمج عينتين تقعان ضمن 4 مم و20 مللي ثانية في عينة واحدة. تُستبعد العينة التي تنحرف بأكثر من 12 مم عن النقطة المركزية التراكمية باعتبارها قيمة شاذة. تستغرق هذه المرحلة 0.4 مللي ثانية لكل عينة على L5.
المرحلة 3: استخراج السمات. من تدفق العينات المنقّى نحسب 7 سمات: الإزاحة الكلية، طول المسار الكلي، متوسط السرعة، ذروة السرعة، زاوية الاتجاه السائدة، الانحناء، والمدة. تُعد هذه السمات هي المُدخلات إلى المُصنِّف.
المرحلة 4: التصنيف. نستخدم مُسجِّل مطابقة القوالب للسحبات الاتجاهية الستة وآلة حالة لإيماءات التوقيت (TAP، LONG_PRESS، DOUBLE_TAP). تستهلك آلة الحالة ومُطابق القوالب معًا 1.6 مللي ثانية لكل إيماءة على L5.
الميزانية الإجمالية لكل إيماءة على L5: 0.4 + 1.6 + مُصنِّف المرحلة 4 = 2.4 مللي ثانية، وبإضافة أعباء معالجة المقاطعات يتبقى هامش 6 مللي ثانية قبل تجاوز ميزانية 8.3 مللي ثانية بين الإطارات.
3. مُطابق القوالب للسحبات
لكل واحد من السحبات الاتجاهية الستة (يسار، يمين، أعلى، أسفل، بالإضافة إلى القُطرَيين على T2) قالب خاص. القالب هو خط متعدد مكوّن من 16 نقطة يمثل المسار المتوقع للعينات، مُسوَّى إلى طول 12 مم ومتمركز عند نقطة الأصل. أثناء التعرف، نُسوّي تدفق عينات الإدخال بالطريقة نفسها (نُرجم النقطة المركزية إلى الأصل، نُقيّس إلى 12 مم، نُعيد أخذ العينات إلى 16 نقطة) ونحسب متوسط المسافة الإقليدية بين الإدخال والقالب عند كل نقطة.
درجة المطابقة هي 1 - (متوسط_المسافة / 12). الدرجة 1.0 تعني تطابقًا تامًا؛ والدرجة 0.0 تعني تعامدًا. يُرجع المُصنِّف القالب صاحب أعلى درجة، بشرط أن تتجاوز هذه الدرجة 0.78. أي درجة أقل من 0.78 تُصنَّف على أنها "غير معروفة" وتُتجاهل.
تم ضبط العتبة 0.78 على مجموعة بيانات تضم 1,200 إيماءة جُمعت من 30 طفلًا تتراوح أعمارهم بين 4 و9 سنوات في منشأتَينا. قسنا معدل الإيجابيات الحقيقية عند 96.4% ومعدل الإيجابيات الخاطئة عند 0.6% على L5 بهذه العتبة. رفع العتبة إلى 0.82 يُخفض الإيجابيات الخاطئة إلى 0.2% لكنه يُخفض الإيجابيات الحقيقية إلى 91.7%؛ وخفضها إلى 0.72 يرفع الإيجابيات الخاطئة إلى 2.4% والإيجابيات الحقيقية إلى 98.6%.
4. آلة الحالة لإيماءات التوقيت
إيماءات TAP وLONG_PRESS وDOUBLE_TAP تعتمد على التوقيت ولا يمكن تصنيفها من شكل العينة وحده. نستخدم آلة حالة منتهية بـ 5 حالات:
- IDLE: لا توجد لمسة حالية.
- TOUCH_DOWN: استلام أول عينة، الانتقال إلى PRESS.
- PRESS: استمرار اللمس، بدء مؤقت الضغط الطويل.
- RELEASE: رفع اللمس، تقييم TAP مقابل LONG_PRESS مقابل DOUBLE_TAP.
- WAIT_DOUBLE: تم رفع اللمس، انتظار حتى 300 مللي ثانية بحثًا عن نقرة ثانية.
تُحكم الانتقالات بواسطة 4 عتبات:
- LONG_PRESS_TIME: 600 مللي ثانية (قابلة للضبط من 400 إلى 2000 مللي ثانية).
- DOUBLE_TAP_GAP: 300 مللي ثانية.
- TAP_MAX_DURATION: 250 مللي ثانية.
- TAP_MAX_DISPLACEMENT: 4 ملم.
يتم تنفيذ آلة الحالات على شكل switch داخل روتين خدمة المقاطعة الخاص باللمس، ويستغرق 0.06 مللي ثانية لكل انتقال على L5. ويبلغ إجمالي زمن التعرف على الإيماءة TAP مدة الإيماءة زائداً فترة واحدة بين العينات، وهو ما يتراوح بين 280 مللي ثانية و320 مللي ثانية في أسوأ الحالات، لكنه يتراوح عادة بين 130 و180 مللي ثانية.
5. تكلفة وحدة المعالجة المركزية والذاكرة
يستهلك خط أنابيب الإيماءات الكامل (مطابق القوالب + آلة الحالات + استخراج الميزات) على L5 ما يعادل 1.9 MIPS من وحدة المعالجة المركزية عند معدل إيماءات يبلغ 3 إيماءات في الثانية. ويحتوي المتحكم المضيف SoC الخاص بـ L5 على هامش 240 MIPS بعد معالجة الصوت وOCR، لذا فإن محرك الإيماءات يأتي تقريباً دون أي تكلفة تذكر.
تبلغ تكلفة الذاكرة 4.2 كيلوبايت من الكود (في الفلاش) و1.1 كيلوبايت من ذاكرة العمل RAM (للقالب المكون من 16 نقطة ولعينة المخزن المؤقت). وعلى K7 وKF1 يكلف خط الأنابيب نفسه 5.1 كيلوبايت من الكود و1.4 كيلوبايت من ذاكرة RAM لأن وحدة MCU من الفئة الأدنى تُجمّع القوالب بتحسين أقل.
يضيف Q8 وT2 مصنف إيماءة CIRCLE يستخدم حلقة شبيهة بتحويل Hough مكونة من 24 نقطة. يضيف ذلك 3.4 كيلوبايت من الكود و0.8 كيلوبايت من ذاكرة RAM، ويعمل بسرعة 4.1 MIPS أثناء التصنيف. تُعد إيماءة CIRCLE ميزة مميزة وهي معطلة افتراضياً على Q8، ومفعلة فقط على T2 ما لم يطلب مشتري OEM تمكينها على Q8.
6. زمن الاستجابة: من اللمس إلى الإجراء ومن السحب إلى الإجراء
زمن الاستجابة من طرف إلى طرف، من اكتمال الإيماءة الفعلية إلى إصدار الإجراء بواسطة المضيف:
| إيماءة | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| نقرة | 130 مللي ثانية إلى 180 مللي ثانية | 180 مللي ثانية إلى 240 مللي ثانية |
| ضغط طويل | 620 مللي ثانية إلى 720 مللي ثانية | 700 مللي ثانية إلى 820 مللي ثانية |
| نقرة مزدوجة | 320 مللي ثانية إلى 420 مللي ثانية | 400 مللي ثانية إلى 520 مللي ثانية |
| SWIPE (أي اتجاه) | 55 مللي ثانية إلى 65 مللي ثانية | 75 مللي ثانية إلى 95 مللي ثانية |
| دائرة | 80 مللي ثانية إلى 110 مللي ثانية (T2 فقط) | غير متوفر |
تشمل هذه الأرقام معدل تقارير وحدة التحكم باللمس، ووقت نقل I2C/SPI، وتنفيذ الخوارزمية، وزمن استجابة تطبيق المضيف.
7. الضبط لمختلف فئات المستخدمين
تم ضبط العتبات الافتراضية للأطفال الذين تتراوح أعمارهم بين 4 و9 سنوات. أما بالنسبة للمستخدمين البالغين (المعلمين، وأولياء الأمور) فحركات الإيماءة لديهم أكبر وأسرع، مما يحسّن فعلياً دقة التعرف لتبلغ 98.5% إيجابيات صحيحة عند العتبة نفسها. أما بالنسبة للأطفال دون سن الرابعة، فيمكن لمشتري OEM طلب ملف تعريف إيماءات أخف عبر ضبط البرنامج الثابت:
- رفع LONG_PRESS_TIME من 600 مللي ثانية إلى 900 مللي ثانية.
- تم رفع TAP_MAX_DISPLACEMENT من 4 ملم إلى 6 ملم.
- تم خفض SWIPE_MIN_DISPLACEMENT من 8 ملم إلى 5 ملم.
يُسمى هذا الملف التعريفي KIDS_PROFILE_V1 وهو متاح في جميع الطرازات الأحد عشر عبر علامة بناء في البرنامج الثابت. ينبغي لأي برنامج OEM يستهدف الفئة العمرية من 2 إلى 4 سنوات طلب هذا الملف التعريفي.
8. اختبار القبول لمشتري OEM
نوصي بمجموعة اختبارات القبول المكونة من 5 اختبارات التالية للتعرف على الإيماءات:
- معدل تعرف SWIPE_LEFT ≥ 96% من أصل 100 محاولة يقوم بها 3 مختبِرين مختلفين.
- معدل تعرف SWIPE_RIGHT ≥ 96% من أصل 100 محاولة.
- معدل الإيجابيات الخاطئة لـ TAP ≤ 1% خلال 1,000 ثانية بدون لمس.
- زمن استجابة تعرف LONG_PRESS بين 600 و800 مللي ثانية.
- معدل تعرف DOUBLE_TAP ≥ 92% من أصل 100 محاولة.
ينبغي اختيار المختبِرين من الفئة العمرية المستهدفة. فالعينة التي يختبرها مهندسون بالغون فقط ستُظهر دقة متضخمة لأن حركات البالغين أكثر اتساقاً. يستخدم التحقق الداخلي لدينا 30 طفلاً تتراوح أعمارهم بين 4 و9 سنوات إضافة إلى 10 بالغين، ومعدل الإيجابيات الصحيحة المنشور البالغ 96.4% هو الرقم الخاص بالأطفال فقط.
9. أوضاع الأعطال الشائعة
في برامج OEM واجهنا حالات فشل دمج الإيماءات التالية:
- يقوم التطبيق المضيف باستطلاع الإيماءات في حلقة بفاصل 50 مللي ثانية بدلاً من استخدام المقاطعات، مما يُضيف زمن انتقال قدره 50 مللي ثانية. استخدم دائماً مقاطعة الإيماءة، وليس الاستطلاع.
- يُمكّن التطبيق ميزة DOUBLE_TAP لكنه ينسى ضبط DOUBLE_TAP_GAP على 300 مللي ثانية، مما يؤدي إلى تصنيف كل نقرة كنقرة مزدوجة.
- يربط التطبيق الإيماءة CIRCLE بـ "الصفحة التالية" لكن سحبات الأطفال صغيرة جداً (5 ملم بدلاً من 12 ملم) فيُصنّفها الخوارزم على أنها ضوضاء. اخفض CIRCLE_MIN_CIRCUMFERENCE من 12 ملم إلى 8 ملم إذا كان الجمهور المستهدف أصغر سناً.
- يُعطّل التطبيق LONG_PRESS لكنه يُبقي المؤقت قيد التشغيل، مما يستهلك 0.04 MIPS من وحدة المعالجة المركزية بشكل مستمر. اضبط LONG_PRESS_ENABLE = 0 لتخطي المؤقت.
لمزيد من المعلومات حول حساس اللمس الذي يُغذّي محرك الإيماءات، اطلع على اختبار دقة الاهتزاز والقراءة في قلم القراءة. وللاطلاع على كيفية ربط الإيماءات بإجراءات واجهة المستخدم في تطبيق القاموس المرجعي، انظر صيغة ملف قاموس قلم القراءة وإصداره. ولمعرفة كيف يُجدول SoC المضيف مهمة الإيماءات مقابل OCR والصوت، انظر شرح بنية برمجيات قلم القراءة. ولغة مواصفات OEM ومعايير القبول، انظر قالب مواصفات OEM وODM لقلم القراءة. لطلب تقرير اختبار الإيماءات مع مخططات hist لخمسة مختبِرين من دفعة العينات لديك، انظر /request-a-quote.
10. لغة المواصفات التي يجب تضمينها في عقد OEM
تتضمن مواصفات OEM القابلة للدفاع عن الإيماءات ما يلي:
- قائمة مفردات الإيماءات مع التوافر حسب كل طراز.
- حد مطابقة القالب (الافتراضي 0.78، قابل للضبط من 0.70 إلى 0.85).
- LONG_PRESS_TIME (الافتراضي 600 مللي ثانية).
- DOUBLE_TAP_GAP (الافتراضي 300 مللي ثانية).
- TRUE_POSITIVE_RATE ≥ 96% على مجموعة اختبار الإيماءات للأطفال المكونة من 1,200 إيماءة.
- FALSE_POSITIVE_RATE ≤ 1% في اختبار عدم اللمس لمدة 1,000 ثانية.
- جدول زمن انتقال الإيماءة إلى الإجراء لكل فئة إيماءة.
المورّد الذي لا يستطيع الالتزام بهذه الأرقام لا يُشغّل الخوارزم بعد بجودة الإنتاج. ننشر تقرير اختبار الإيماءات لكل طراز مع كل دفعة إنتاج دون أي تكلفة إضافية.
قراءات ذات صلة
- اختبار دقة الاهتزاز والقراءة في قلم القراءة
- وحدة تحكم شاشة اللمس والإيماءات في قلم القراءة
- شرح بنية برمجيات قلم القراءة
- صيغة ملف وإصدار قاموس القلم القارئ
- مراقبة الجودة ومعايير AQL لقلم القراءة
- تجانس سطوع شاشة قلم القراءة
قراءة تكميلية: تركيبات الإيماءات وتسلسلات الأصابع المتعددة
بجانب مفردات الإيماءات الأحادية الواردة في القسم 1، تدعم البرامج الثابتة في الطرازات L5 وQ8 وT2 مجموعة صغيرة من تركيبات الإيماءات بإصبعين للمستخدمين المتقدمين:
- TWO_FINGER_TAP: يعادل وظيفة زر الرجوع في تطبيق القاموس.
- TWO_FINGER_SWIPE_LEFT: يعادل أمر العودة إلى الصفحة السابقة في قارئات المحتوى الطويل.
- PINCH: تكبير أو تصغير نص القاموس بنسبة 25% لكل دورة قرص.
لا تدخل هذه التركيبات ضمن المفردات الافتراضية وتكون معطلة بشكل افتراضي. يمكن لمشتري تصنيع المعدات الأصلية تفعيلها عبر علامة بناء في البرنامج الثابت، على حساب إضافة 0.8 كيلوبايت من الكود و0.3 كيلوبايت من الذاكرة العشوائية.
يدعم محرك الإيماءات أيضًا وضع «النقر للاستيقاظ» منخفض الطاقة في الطرازات L5 وQ8 وT2. في هذا الوضع تستطلع وحدة التحكم باللمس بمعدل 8 هرتز بدلاً من 120 هرتز، بحيث لا يستهلك سوى 0.2 ميلي واط. عند رصد نقرة، تنتقل وحدة التحكم إلى 120 هرتز خلال 12 مللي ثانية. يُفعَّل هذا الوضع افتراضيًا في الطرازين Q8 وT2 لامتلاكهما بطاريات أكبر، بينما يُعطَّل في الطراز L5 لأن بطاريته الأصغر لا تستوعب عقوبة زمن استجابة الاستيقاظ عند كل عملية بحث في القاموس.
منذ عام 2023، ومع شحن ما يزيد على 47,000 وحدة، تمثل أعطال الإيماءات الميدانية 1.1% من جميع طلبات الإرجاع الإجمالي (RMA). السبب السائد هو منطقة اللمس العالقة نتيجة تسرب السوائل (38%)، يليه تقشر طبقة التراكب عند حافة المستشعر (24%)، ثم توقف البرنامج الثابت عن الاستجابة (18%) وتعد نسبة 1.1% هذه أقل بكثير من نسبة أعطال اللمس البالغة 4.2% لأن الإيماءات تُستخدم فقط في الطرازات الفاخرة التي تتمتع بعزل أفضل وبمعايير جودة قبول أكثر صرامة لمستشعر اللمس.