Đối tượng độc giả: Bài viết này dành cho các kỹ sư firmware, nhà thiết kế UX và quản lý sản phẩm OEM cần hiểu thuật toán nhận diện cử chỉ đang chạy trên các bút đọc B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 và Y6. Chúng tôi giả định bạn đang thiết kế giao diện menu tùy chỉnh hoặc đánh giá cách thêm cử chỉ vào ứng dụng từ điển hiện có, và bạn cần biết tỷ lệ nhận diện, độ trễ và tải CPU kỳ vọng.
Cử chỉ trên bút đọc là một chuỗi các mẫu cảm ứng được thu thập trong khoảng 30 ms đến 500 ms. Firmware chuyển đổi các mẫu này thành một mã cử chỉ rời rạc (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) mà tầng ứng dụng ánh xạ sang hành động UI. Quá trình chuyển đổi đủ nhỏ để chạy trên cả 11 model nhưng được tinh chỉnh khác nhau theo từng model vì độ phân giải cảm biến, tần số lấy mẫu và ngân sách CPU của host đều khác nhau. Bài viết này trình bày thuật toán, các thông số tinh chỉnh và các chế độ lỗi mà người mua cần lên kế hoạch ứng phó.
1. Từ vựng cử chỉ
Trên 11 model chúng tôi xuất xưởng, từ vựng cử chỉ được thống nhất:
| Cử chỉ | Cửa sổ lấy mẫu | Sử dụng trên |
|---|---|---|
| TAP | Chạm + nhả trong 30 ms đến 250 ms | Cả 11 model (thay bằng nút bấm trên các model vùng) |
| LONG_PRESS | Chạm liên tục 600 ms đến 2000 ms | K7, KF1, L5, Q8, T2 |
| DOUBLE_TAP | Hai lần chạm trong vòng 300 ms | L5, Q8, T2 |
| SWIPE_LEFT / RIGHT | Kéo liên tục 50 ms đến 250 ms, ≥ 8 mm | K7, KF1, L5, Q8, T2 |
| SWIPE_UP / DOWN | Tương tự, hướng dọc | L5, Q8, T2 (chỉ) |
| CIRCLE | Đường vòng kín, chu vi ≥ 12 mm | Q8, T2 (tính năng cao cấp) |
Các model vùng đơn giản (B1, B2, F8, P2, Q6, Y6) không chạy cử chỉ vì không có cảm biến cảm ứng 2D. Chúng thay thế bằng 4 đến 8 vùng nút rời rạc. Bài viết này tập trung vào các model ma trận.
2. Quy trình thuật toán
Thuật toán nhận diện cử chỉ chạy qua bốn giai đoạn. Mỗi giai đoạn có một ngân sách CPU cứng; nếu bất kỳ giai đoạn nào vượt ngân sách, cử chỉ sẽ bị bỏ qua (không phát lệnh) thay vì nhận diện sai.
Giai đoạn 1: Thu thập mẫu. Bộ điều khiển cảm ứng báo cáo tọa độ ở tần số 80 Hz đến 120 Hz. Host MCU đọc qua I2C ở 100 kHz đến 400 kHz trên K7/KF1/L5, và qua SPI ở 10 MHz trên Q8/T2. Mỗi mẫu là một bộ (x, y, t).
Giai đoạn 2: Chống rung và loại bỏ giá trị ngoại lai. Hai mẫu trong phạm vi 4 mm và 20 ms sẽ được gộp thành một. Một mẫu lệch hơn 12 mm so với tâm đang tính sẽ bị loại bỏ vì là ngoại lai. Giai đoạn này mất 0,4 ms cho mỗi mẫu trên L5.
Giai đoạn 3: Trích xuất đặc trưng. Từ luồng mẫu đã được làm sạch, chúng tôi tính toán 7 đặc trưng: tổng độ dịch chuyển, tổng chiều dài quỹ đạo, vận tốc trung bình, vận tốc đỉnh, góc hướng chính, độ cong và thời lượng. Đây là các đầu vào cho bộ phân loại.
Giai đoạn 4: Phân loại. Chúng tôi sử dụng bộ chấm điểm khớp mẫu cho 6 thao tác vuốt theo hướng và một máy trạng thái cho các thao tác dựa trên thời gian (TAP, LONG_PRESS, DOUBLE_TAP). Máy trạng thái và bộ khớp mẫu cùng tiêu tốn 1,6 ms cho mỗi thao tác trên L5.
Tổng ngân sách cho mỗi thao tác trên L5: 0,4 + 1,6 + bộ phân loại giai đoạn 4 = 2,4 ms, cộng thêm chi phí xử lý ngắt, còn dư 6 ms trước khi vượt ngân sách 8,3 ms giữa hai khung hình.
3. Bộ Khớp Mẫu cho Thao Tác Vuốt
Mỗi thao tác trong 6 thao tác vuốt theo hướng (trái, phải, lên, xuống, cộng với hai đường chéo trên T2) đều có một mẫu. Mẫu là một đường gấp khúc 16 điểm của quỹ đạo mẫu dự kiến, được chuẩn hóa về chiều dài 12 mm và đặt tâm tại gốc tọa độ. Trong quá trình nhận dạng, chúng tôi chuẩn hóa luồng mẫu đầu vào theo cùng cách (dịch tâm về gốc tọa độ, co về 12 mm, tái lấy mẫu về 16 điểm) và tính khoảng cách Euclid trung bình giữa đầu vào và mẫu tại mỗi điểm.
Điểm khớp là 1 - (khoảng_cách_trung_bình / 12). Điểm 1,0 là khớp hoàn hảo; điểm 0,0 là trực giao. Bộ phân loại trả về mẫu có điểm cao nhất, với điều kiện điểm đó vượt quá 0,78. Bất kỳ giá trị nào dưới 0,78 sẽ được phân loại là "không xác định" và bị bỏ qua.
Ngưỡng 0,78 đã được tinh chỉnh trên một tập dữ liệu gồm 1.200 thao tác, được thu thập từ 30 trẻ em từ 4 đến 9 tuổi tại hai cơ sở của chúng tôi. Chúng tôi đo được tỷ lệ dương tính thật là 96,4% và tỷ lệ dương tính giả là 0,6% trên L5 với ngưỡng này. Siết chặt ngưỡng xuống 0,82 sẽ giảm dương tính giả xuống 0,2% nhưng cũng giảm dương tính thật xuống 91,7%; nới lỏng xuống 0,72 sẽ tăng dương tính giả lên 2,4% và dương tính thật lên 98,6%.
4. Máy Trạng Thái cho Thao Tác Dựa Trên Thời Gian
TAP, LONG_PRESS và DOUBLE_TAP phụ thuộc vào thời gian và không thể phân loại chỉ dựa trên hình dạng mẫu. Chúng tôi sử dụng một máy trạng thái hữu hạn gồm 5 trạng thái:
- IDLE: không có tiếp xúc.
- TOUCH_DOWN: nhận được mẫu đầu tiên, chuyển sang PRESS.
- PRESS: tiếp xúc được giữ, bắt đầu bộ đếm thời gian nhấn giữ.
- RELEASE: tiếp xúc được thả, đánh giá TAP so với LONG_PRESS so với DOUBLE_TAP.
- WAIT_DOUBLE: đã thả, chờ tối đa 300 ms để có lần chạm thứ hai.
Các chuyển trạng thái được điều khiển bởi 4 ngưỡng:
- LONG_PRESS_TIME: 600 ms (có thể cấu hình từ 400 đến 2000 ms).
- DOUBLE_TAP_GAP: 300 ms.
- TAP_MAX_DURATION: 250 ms.
- TAP_MAX_DISPLACEMENT: 4 mm.
Máy trạng thái được triển khai dưới dạng một câu lệnh switch trong ISR cảm ứng, mất 0,06 ms cho mỗi chuyển trạng thái trên L5. Tổng độ trễ nhận dạng cho một TAP bằng thời lượng chạm cộng một khoảng giữa hai mẫu, tức khoảng 280 ms đến 320 ms trong trường hợp xấu nhất nhưng thường là 130 ms đến 180 ms.
5. Chi Phí CPU và Bộ Nhớ
Toàn bộ pipeline thao tác (bộ khớp mẫu + máy trạng thái + trích xuất đặc trưng) trên L5 tiêu thụ 1,9 MIPS CPU ở tốc độ 3 thao tác mỗi giây. SoC chủ của L5 còn dư 240 MIPS sau khi xử lý âm thanh và OCR, vì vậy bộ máy thao tác gần như không tốn thêm tài nguyên.
Chi phí bộ nhớ là 4,2 KB mã (trong flash) và 1,1 KB RAM làm việc (cho mẫu 16 điểm và bộ đệm mẫu). Trên K7 và KF1, cùng pipeline đó tốn 5,1 KB mã và 1,4 KB RAM vì MCU phân khúc thấp hơn biên dịch các mẫu với mức tối ưu thấp hơn.
Q8 và T2 bổ sung thêm bộ phân loại thao tác CIRCLE sử dụng một vòng lặp giống biến đổi Hough 24 điểm. Tính năng này thêm 3,4 KB mã và 0,8 KB RAM, và chạy ở mức 4,1 MIPS trong quá trình phân loại. CIRCLE là tính năng cao cấp, mặc định bị tắt trên Q8 và chỉ được bật trên T2, trừ khi khách hàng OEM yêu cầu kích hoạt trên Q8.
6. Độ Trễ: Tap-to-Action và Swipe-to-Action
Độ trễ đầu cuối từ khi hoàn tất thao tác vật lý đến khi hành động được phát lệnh cho máy chủ:
| Thao tác | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| TAP | 130 ms đến 180 ms | 180 ms đến 240 ms |
| LONG_PRESS | 620 ms đến 720 ms | 700 ms đến 820 ms |
| DOUBLE_TAP | 320 ms đến 420 ms | 400 ms đến 520 ms |
| SWIPE (mọi hướng) | 55 ms đến 65 ms | 95 ms đến 95 ms |
| CIRCLE | 80 ms đến 110 ms (chỉ T2) | không áp dụng |
Các con số này bao gồm tần suất báo cáo của bộ điều khiển cảm ứng, thời gian truyền I2C/SPI, thời gian thực thi thuật toán và thời gian phản hồi của ứng dụng chủ.
7. Tinh chỉnh cho các nhóm người dùng khác nhau
Ngưỡng mặc định được tinh chỉnh cho trẻ em từ 4 đến 9 tuổi. Đối với người dùng trưởng thành (giáo viên, phụ huynh), cử chỉ lớn hơn và nhanh hơn, điều này thực sự cải thiện độ chính xác nhận dạng lên 98,5% true-positive ở cùng ngưỡng. Đối với trẻ em dưới 4 tuổi, người mua OEM có thể yêu cầu một hồ sơ cử chỉ nhẹ nhàng hơn thông qua cấu hình firmware:
- LONG_PRESS_TIME tăng từ 600 ms lên 900 ms.
- TAP_MAX_DISPLACEMENT tăng từ 4 mm lên 6 mm.
- SWIPE_MIN_DISPLACEMENT giảm từ 8 mm xuống 5 mm.
Hồ sơ này được gọi là KIDS_PROFILE_V1 và có sẵn trên tất cả 11 model thông qua cờ build flag của firmware. Một chương trình OEM nhắm đến nhóm tuổi từ 2 đến 4 nên yêu cầu hồ sơ này.
8. Kiểm thử chấp nhận dành cho người mua OEM
Chúng tôi khuyến nghị bộ 5 bài kiểm thử chấp nhận sau đây cho nhận dạng cử chỉ:
- Tỷ lệ nhận dạng SWIPE_LEFT ≥ 96% trên 100 lần thử của 3 người kiểm thử khác nhau.
- Tỷ lệ nhận dạng SWIPE_RIGHT ≥ 96% trên 100 lần thử.
- Tỷ lệ dương tính giả TAP ≤ 1% trên 1.000 giây không chạm.
- Độ trễ nhận dạng LONG_PRESS trong khoảng 600 đến 800 ms.
- Tỷ lệ nhận dạng DOUBLE_TAP ≥ 92% trên 100 lần thử.
Người kiểm thử nên được chọn từ nhóm tuổi mục tiêu. Một mẫu chỉ được kiểm thử bởi các kỹ sư trưởng thành sẽ báo cáo độ chính xác bị thổi phồng vì cử chỉ của người trưởng thành nhất quán hơn. Xác nhận nội bộ của chúng tôi sử dụng 30 trẻ em từ 4 đến 9 tuổi cùng 10 người trưởng thành, và tỷ lệ true-positive 96,4% được công bố là con số chỉ dành cho trẻ em.
9. Các chế độ lỗi phổ biến
Trong các chương trình OEM, chúng tôi đã thấy các lỗi tích hợp cử chỉ sau:
- Ứng dụng chủ thăm lấy cử chỉ trong vòng lặp 50 ms thay vì sử dụng ngắt, làm tăng thêm 50 ms độ trễ. Luôn sử dụng ngắt cử chỉ, không dùng polling.
- Ứng dụng bật DOUBLE_TAP nhưng quên đặt DOUBLE_TAP_GAP thành 300 ms, khiến mọi tap bị phân loại thành double-tap.
- Ứng dụng ánh xạ CIRCLE sang "trang tiếp theo" nhưng thao tác vuốt của trẻ em quá nhỏ (5 mm thay vì 12 mm) và thuật toán phân loại chúng là nhiễu. Hạ CIRCLE_MIN_CIRCUMFERENCE từ 12 mm xuống 8 mm nếu nhắm đến người dùng nhỏ tuổi hơn.
- Ứng dụng vô hiệu hóa LONG_PRESS nhưng vẫn để timer chạy, liên tục lãng phí 0,04 MIPS CPU. Đặt LONG_PRESS_ENABLE = 0 để bỏ qua timer.
Để biết thêm về cảm biến cảm ứng cung cấp dữ liệu cho engine cử chỉ, xem Kiểm Tra Độ Chính Xác Cảm Ứng và Jitter của Bút Đọc. Để biết cách ánh xạ cử chỉ vào hành động UI trong ứng dụng từ điển tham chiếu, xem Định Dạng Tệp Từ Điển và Phiên Bản của Bút Đọc. Để biết cách SoC chủ lên lịch tác vụ cử chỉ so với OCR và âm thanh, xem Giải Thích Kiến Trúc Firmware của Bút Đọc. Để biết ngôn ngữ đặc tả OEM và tiêu chí chấp nhận, xem Mẫu Đặc Tả OEM và ODM của Bút Đọc. Để yêu cầu báo cáo kiểm thử cử chỉ với biểu đồ histogram của 5 người kiểm thử từ lô mẫu của bạn, xem /request-a-quote.
10. Ngôn ngữ đặc tả để đưa vào hợp đồng OEM
Một đặc tả OEM có thể bảo vệ được cho nhận dạng cử chỉ bao gồm:
- Danh sách từ vựng cử chỉ với khả năng cung cấp theo từng model.
- Ngưỡng so khớp mẫu (mặc định 0,78, cấu hình được từ 0,70 đến 0,85).
- LONG_PRESS_TIME (mặc định 600 ms).
- DOUBLE_TAP_GAP (mặc định 300 ms).
- TRUE_POSITIVE_RATE ≥ 96% trên tập kiểm thử 1.200 cử chỉ ở trẻ em.
- FALSE_POSITIVE_RATE ≤ 1% trên kiểm thử 1.000 giây không chạm.
- Bảng độ trễ từ cử chỉ đến hành động cho mỗi lớp cử chỉ.
Một nhà cung cấp không thể cam kết các con số này thì vẫn chưa chạy thuật toán ở chất lượng sản xuất. Chúng tôi công bố báo cáo kiểm thử cử chỉ theo từng model với mỗi lô sản xuất mà không tính thêm phí.
Bài viết liên quan
- Kiểm Tra Độ Chính Xác Cảm Ứng và Jitter của Bút Đọc
- Bộ Điều Khiển Cảm Ứng và Cử Chỉ của Bút Đọc
- Giải Thích Kiến Trúc Firmware của Bút Đọc
- Định dạng và phiên bản tệp từ điển bút đọc
- Kiểm soát chất lượng và tiêu chuẩn AQL cho bút đọc
- Độ đồng đều độ sáng màn hình bút đọc
Đọc thêm: Tổ hợp cử chỉ và chuỗi thao tác nhiều ngón tay
Ngoài bộ cử chỉ đơn được liệt kê trong Mục 1, firmware của L5, Q8 và T2 còn hỗ trợ một tập nhỏ các tổ hợp cử chỉ hai ngón dành cho người dùng thành thạo:
- TWO_FINGER_TAP: tương đương với nút quay lại trong ứng dụng từ điển.
- TWO_FINGER_SWIPE_LEFT: tương đương với lệnh lùi trang trong trình đọc nội dung dài.
- PINCH: phóng to hoặc thu nhỏ văn bản từ điển 25% mỗi chu kỳ pinch.
Các tổ hợp này không nằm trong bộ từ vựng mặc định và bị tắt theo mặc định. Khách hàng OEM có thể kích hoạt chúng thông qua cờ bản dựng firmware, với chi phí thêm 0,8 KB mã lệnh và 0,3 KB RAM bổ sung.
Bộ máy cử chỉ cũng hỗ trợ chế độ tiết kiệm năng lượng "chạm để đánh thức" trên L5, Q8 và T2. Ở chế độ này, bộ điều khiển cảm ứng quét ở 8 Hz thay vì 120 Hz, chỉ tiêu thụ 0,2 mW. Khi phát hiện thao tác chạm, bộ điều khiển chuyển sang 120 Hz trong vòng 12 ms. Chế độ này được bật mặc định trên Q8 và T2 vì chúng có pin lớn hơn, và tắt trên L5 vì pin nhỏ hơn không chịu được độ trễ đánh thức khi tra cứu từ điển thường xuyên.
Trên hơn 47.000 thiết bị đã xuất xưởng từ năm 2023, các lỗi thực địa liên quan đến cử chỉ chiếm 1,1% tổng số RMA. Nguyên nhân chính là vùng cảm ứng bị kẹt do nước xâm nhập (38%), tiếp theo là hiện tượng bong lớp phủ ở mép cảm biến (24%), và treo firmware (18%). Tỷ lệ 1,1% thấp hơn nhiều so với tỷ lệ lỗi cảm ứng 4,2% vì cử chỉ chỉ được sử dụng trên các dòng cao cấp có khả năng bịt kín tốt hơn và tiêu chuẩn AQL nghiêm ngặt hơn đối với cảm biến cảm ứng.