Audiens: Artikel ini ditujukan untuk firmware engineer, desainer UX, dan manajer produk OEM yang perlu memahami algoritma pengenalan gesture yang berjalan pada reading pen B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, dan Y6. Kami mengasumsikan Anda sedang mendesain UI menu kustom atau mengevaluasi cara menambahkan gesture ke aplikasi kamus yang sudah ada, dan Anda perlu mengetahui tingkat pengenalan, latensi, serta beban CPU yang dapat diharapkan.
Gesture pada reading pen adalah urutan sampel sentuhan yang ditangkap selama 30 md hingga 500 md. Firmware mengubah sampel-sampel tersebut menjadi kode gesture diskret (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) yang dipetakan oleh lapisan aplikasi ke sebuah aksi UI. Proses konversinya cukup ringkas untuk dijalankan pada 11 model tersebut tetapi disetel secara berbeda per model karena resolusi sensor, laju sampel, dan anggaran CPU host bervariasi. Artikel ini membahas algoritma, angka-angka penyetelan, dan mode kegagalan yang sebaiknya direncanakan oleh pembeli.
1. Kosakata Gesture
Pada 11 model yang kami kirim, kosakata gesture konsisten:
| Gesture | Jendela sampel | Digunakan pada |
|---|---|---|
| TAP | Sentuh + lepas 30 md hingga 250 md | Semua 11 model (melalui substitusi tombol pada model zona) |
| LONG_PRESS | Sentuh berkelanjutan 600 md hingga 2000 md | K7, KF1, L5, Q8, T2 |
| DOUBLE_TAP | Dua ketukan dalam waktu 300 md | L5, Q8, T2 |
| SWIPE_LEFT / RIGHT | Geser terus-menerus 50 md hingga 250 md, ≥ 8 mm | K7, KF1, L5, Q8, T2 |
| SWIPE_UP / DOWN | Sama, arah vertikal | L5, Q8, T2 (saja) |
| CIRCLE | Lintasan loop tertutup, keliling ≥ 12 mm | Q8, T2 (fitur premium) |
Model-model zona sederhana (B1, B2, F8, P2, Q6, Y6) tidak menjalankan gesture sama sekali karena tidak memiliki sensor sentuh 2D. Model-model tersebut menggantikan dengan 4 hingga 8 zona tombol diskret. Artikel ini berfokus pada model-model matriks.
2. Pipeline Algoritma
Algoritma pengenalan gesture berjalan dalam empat tahapan. Setiap tahapan memiliki anggaran CPU yang ketat; jika ada tahapan yang melampaui anggarannya, gesture akan dibuang (tidak ada perintah yang dikeluarkan) daripada dikenali secara keliru.
Tahap 1: Akuisisi sampel. Kontroler sentuh melaporkan koordinat pada 80 Hz hingga 120 Hz. Host MCU membacanya melalui I2C pada 100 kHz hingga 400 kHz pada K7/KF1/L5, dan melalui SPI pada 10 MHz pada Q8/T2. Setiap sampel berupa tupel (x, y, t).
Tahap 2: Debounce dan penolakan outlier. Dua sampel dalam jarak 4 mm dan 20 md digabungkan menjadi satu. Sampel yang menyimpang lebih dari 12 mm dari centroid berjalan akan dihapus sebagai outlier. Tahap ini memakan waktu 0,4 md per sampel pada L5.
Tahap 3: Ekstraksi fitur. Dari aliran sampel yang sudah dibersihkan, kami menghitung 7 fitur: perpindahan total, panjang lintasan total, kecepatan rata-rata, kecepatan puncak, sudut arah dominan, kelengkungan, dan durasi. Fitur-fitur ini menjadi masukan untuk pengklasifikasi.
Tahap 4: Klasifikasi. Kami menggunakan pemecan skor pencocokan template untuk 6 swipe berarah dan mesin state untuk gesture berbasis waktu (TAP, LONG_PRESS, DOUBLE_TAP). Mesin state dan pencocok template bersama-sama mengonsumsi 1,6 md per gesture pada L5.
Total anggaran per gesture pada L5: 0,4 + 1,6 + pengklasifikasi tahap 4 = 2,4 md, ditambah overhead penanganan interrupt, menyisakan margin 6 md sebelum anggaran antar-frame 8,3 md terlampaui.
3. Pencocok Template untuk Swipe
Setiap dari 6 swipe berarah (kiri, kanan, atas, bawah, ditambah dua diagonal pada T2) memiliki sebuah template. Template tersebut berupa polyline 16 titik dari lintasan sampel yang diharapkan, dinormalisasi ke panjang 12 mm dan dipusatkan di titik asal. Selama pengenalan, kami menormalisasi aliran sampel masukan dengan cara yang sama (menggeser centroid ke titik asal, menskalakan ke 12 mm, mengambil ulang sampel menjadi 16 titik) dan menghitung jarak Euclidean rata-rata antara masukan dan template pada setiap titik.
Skor kecocokan adalah 1 - (jarak_rata-rata / 12). Skor 1,0 adalah kecocokan sempurna; skor 0,0 adalah ortogonal. Pengklasifikasi mengembalikan template dengan skor tertinggi, asalkan skornya melampaui 0,78. Apa pun di bawah 0,78 diklasifikasikan sebagai "unknown" dan diabaikan.
Ambang batas 0,78 disetel pada dataset 1.200 gesture yang dikumpulkan dari 30 anak berusia 4 hingga 9 tahun di dua fasilitas kami. Kami mengukur tingkat true-positive sebesar 96,4% dan false-positive sebesar 0,6% pada L5 dengan ambang batas ini. Mengencangkan ke 0,82 menurunkan false-positive menjadi 0,2% tetapi menurunkan true-positive menjadi 91,7%; melonggarkan ke 0,72 menaikkan false-positive menjadi 2,4% dan true-positive menjadi 98,6%.
4. Mesin State untuk Gesture Berbasis Waktu
TAP, LONG_PRESS, dan DOUBLE_TAP bergantung pada waktu dan tidak dapat diklasifikasikan hanya dari bentuk sampel. Kami menggunakan finite state machine dengan 5 state:
- IDLE: tidak ada sentuhan.
- TOUCH_DOWN: sampel pertama diterima, transisi ke PRESS.
- PRESS: sentuhan ditahan, mulai timer long-press.
- RELEASE: sentuhan dilepas, evaluasi TAP vs LONG_PRESS vs DOUBLE_TAP.
- WAIT_DOUBLE: dilepas, menunggu hingga 300 md untuk ketukan kedua.
Transisi diatur oleh 4 ambang batas:
- LONG_PRESS_TIME: 600 md (dapat dikonfigurasi 400 hingga 2000 md).
- DOUBLE_TAP_GAP: 300 md.
- TAP_MAX_DURATION: 250 md.
- TAP_MAX_DISPLACEMENT: 4 mm.
Mesin state diimplementasikan sebagai switch di ISR sentuh, memakan waktu 0,06 md per transisi pada L5. Total latensi pengenalan untuk sebuah TAP adalah durasi ketukan ditambah satu interval antar-sampel, yaitu 280 md hingga 320 md dalam kasus terburuk tetapi umumnya 130 md hingga 180 md.
5. Biaya CPU dan Memori
Pipeline gesture lengkap (pencocok template + mesin state + ekstraksi fitur) pada L5 mengonsumsi 1,9 MIPS CPU pada laju gesture 3 gesture per detik. SoC host L5 memiliki sisa 240 MIPS setelah audio dan OCR, sehingga mesin gesture pada dasarnya gratis.
Biaya memori adalah 4,2 KB kode (di flash) dan 1,1 KB RAM kerja (untuk template 16 titik dan buffer sampel). Pada K7 dan KF1, pipeline yang sama memakan biaya 5,1 KB kode dan 1,4 KB RAM karena MCU tingkat bawah mengompilasi template dengan optimasi yang lebih rendah.
Q8 dan T2 menambahkan pengklasifikasi gesture CIRCLE menggunakan loop mirip Hough-transform 24 titik. Ini menambahkan 3,4 KB kode dan 0,8 KB RAM, serta berjalan pada 4,1 MIPS selama klasifikasi. CIRCLE adalah fitur premium dan dinonaktifkan secara default pada Q8, dan hanya diaktifkan pada T2 kecuali pembeli OEM memintanya diaktifkan pada Q8.
6. Latensi: Tap-ke-Aksi dan Swipe-ke-Aksi
Latensi end-to-end dari penyelesaian gesture fisik hingga diterbitkannya aksi host:
| Gesture | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| TAP | 130 md hingga 180 md | 180 md hingga 240 md |
| LONG_PRESS | 620 md hingga 720 md | 700 md hingga 820 md |
| DOUBLE_TAP | 320 md hingga 420 md | 400 md hingga 520 md |
| SWIPE (segala arah) | 55 md hingga 65 md | 75 md hingga 95 md |
| CIRCLE | 80 md hingga 110 md (hanya T2) | t/a |
Angka-angka ini mencakup report rate dari touch controller, waktu transfer I2C/SPI, eksekusi algoritma, dan waktu respons aplikasi host.
7. Penyesuaian untuk Populasi Pengguna yang Berbeda
Ambang batas default disetel untuk anak-anak usia 4 hingga 9 tahun. Untuk pengguna dewasa (guru, orang tua), gesturnya lebih besar dan lebih cepat, yang justru meningkatkan akurasi pengenalan menjadi 98,5% true-positive pada ambang batas yang sama. Untuk anak-anak di bawah usia 4 tahun, pembeli OEM dapat meminta profil gestur yang lebih lembut melalui konfigurasi firmware:
- LONG_PRESS_TIME dinaikkan dari 600 md menjadi 900 md.
- TAP_MAX_DISPLACEMENT dinaikkan dari 4 mm menjadi 6 mm.
- SWIPE_MIN_DISPLACEMENT diturunkan dari 8 mm menjadi 5 mm.
Profil ini disebut KIDS_PROFILE_V1 dan tersedia di seluruh 11 model melalui build flag firmware. Program OEM yang menargetkan kelompok usia 2 hingga 4 tahun sebaiknya meminta profil ini.
8. Uji Penerimaan untuk Pembeli OEM
Kami merekomendasikan suite uji penerimaan 5-langkah berikut untuk pengenalan gestur:
- Tingkat pengenalan SWIPE_LEFT ≥ 96% pada 100 percobaan oleh 3 penguji yang berbeda.
- Tingkat pengenalan SWIPE_RIGHT ≥ 96% pada 100 percobaan.
- Tingkat false-positive TAP ≤ 1% selama 1.000 detik tanpa sentuhan.
- Latensi pengenalan LONG_PRESS antara 600 dan 800 md.
- Tingkat pengenalan DOUBLE_TAP ≥ 92% pada 100 percobaan.
Penguji harus diambil dari kelompok usia target. Sampel yang diuji hanya oleh engineer dewasa akan melaporkan akurasi yang terlalu tinggi karena gestur orang dewasa lebih konsisten. Validasi internal kami menggunakan 30 anak berusia 4 hingga 9 tahun ditambah 10 orang dewasa, dan tingkat true-positive 96,4% yang dipublikasikan adalah angka khusus anak-anak.
9. Mode Kegagalan Umum
Dalam program OEM kami telah melihat kegagalan integrasi gestur berikut:
- Aplikasi host melakukan polling untuk gestur dalam loop 50 md alih-alih menggunakan interrupt, menambah latensi 50 md. Selalu gunakan interrupt gestur, bukan polling.
- Aplikasi mengaktifkan DOUBLE_TAP tetapi lupa mengatur DOUBLE_TAP_GAP ke 300 md, sehingga setiap tap diklasifikasikan sebagai double-tap.
- Aplikasi memetakan CIRCLE ke "halaman berikutnya" tetapi swipe anak-anak terlalu kecil (5 mm, bukan 12 mm) dan algoritma mengklasifikasikannya sebagai noise. Turunkan CIRCLE_MIN_CIRCUMFERENCE dari 12 mm menjadi 8 mm jika menargetkan pengguna yang lebih muda.
- Aplikasi menonaktifkan LONG_PRESS tetapi membiarkan timer tetap aktif, membuang 0,04 MIPS CPU secara terus-menerus. Setel LONG_PRESS_ENABLE = 0 untuk melewati timer.
Untuk informasi lebih lanjut tentang sensor sentuh yang menggerakkan mesin gestur, lihat Akurasi Sentuh dan Uji Jitter Pena Baca. Untuk pemetaan gestur ke tindakan UI di aplikasi kamus referensi, lihat Format dan Edisi File Kamus Pena Baca. Untuk penjadwalan tugas gestur terhadap OCR dan audio oleh host SoC, lihat Arsitektur Firmware Pena Baca Dijelaskan. Untuk bahasa spesifikasi OEM dan kriteria penerimaan, lihat Template Spesifikasi OEM dan ODM Pena Baca. Untuk meminta laporan uji gestur dengan histogram 5 penguji dari batch sampel Anda, lihat /request-a-quote.
10. Bahasa Spesifikasi untuk Dimasukkan ke Kontrak OEM
Spesifikasi OEM yang dapat dipertahankan untuk pengenalan gestur meliputi:
- Daftar kosakata gestur dengan ketersediaan per model.
- Ambang batas template matcher (default 0,78, dapat dikonfigurasi 0,70 hingga 0,85).
- LONG_PRESS_TIME (default 600 md).
- DOUBLE_TAP_GAP (default 300 md).
- TRUE_POSITIVE_RATE ≥ 96% pada set uji anak usia 1.200 gestur.
- FALSE_POSITIVE_RATE ≤ 1% pada uji tanpa sentuhan selama 1.000 detik.
- Tabel latensi gestur-ke-tindakan per kelas gestur.
Pemasok yang tidak dapat berkomitmen pada angka-angka ini belum menjalankan algoritma pada kualitas produksi. Kami mempublikasikan laporan uji gestur per model dengan setiap batch produksi tanpa biaya tambahan.
Bacaan Terkait
- Akurasi Sentuh dan Uji Jitter Pena Baca
- Touchscreen Controller dan Gestur Pena Baca
- Arsitektur Firmware Pena Baca Dijelaskan
- Format dan Edisi File Kamus Pena Baca
- Kontrol Kualitas Pena Baca dan Standar AQL
- Keseragaman Luminans Layar Pena Baca
Bacaan Tambahan: Kombinasi Gestur dan Urutan Multi-Touch
Di luar kosakata gestur tunggal yang tercantum pada Bagian 1, firmware L5, Q8, dan T2 mendukung sekumpulan kecil kombinasi gestur dua jari untuk pengguna tingkat lanjut:
- TWO_FINGER_TAP: setara dengan tombol kembali di aplikasi kamus.
- TWO_FINGER_SWIPE_LEFT: setara dengan perintah kembali halaman pada pembaca konten panjang.
- PINCH: memperbesar atau memperkecil teks kamus sebesar 25% per siklus cubit.
Kombinasi ini tidak termasuk dalam kosakata bawaan dan dinonaktifkan secara default. Pembeli OEM dapat mengaktifkannya melalui flag build firmware, dengan menambahkan 0,8 KB kode dan 0,3 KB RAM tambahan.
Mesin gestur juga mendukung mode "tap to wake" berdaya rendah pada L5, Q8, dan T2. Dalam mode ini, kontroler touch melakukan polling pada 8 Hz, bukan 120 Hz, dengan konsumsi hanya 0,2 mW. Saat ketukan terdeteksi, kontroler berpindah ke 120 Hz dalam waktu 12 ms. Mode ini diaktifkan secara default pada Q8 dan T2 karena baterainya lebih besar, dan dinonaktifkan pada L5 karena baterai yang lebih kecil tidak dapat menanggung latensi bangun pada setiap pencarian kamus.
Dari lebih dari 47.000 unit yang dikirim sejak 2023, kegagalan lapangan terkait gestur menyumbang 1,1% dari seluruh RMA. Penyebab utamanya adalah zona sentuh macet akibat masuknya cairan (38%), diikuti oleh delaminasi lapisan tepi sensor (24%), dan penguncian firmware (18%). Angka 1,1% ini jauh lebih rendah dibandingkan tingkat kegagalan sentuh sebesar 4,2% karena gestur hanya digunakan pada model premium yang memiliki sealing lebih baik dan AQL sensor sentuh yang lebih ketat.