Bỏ qua, đến nội dung chính
Giải pháp IoTIoT SolutionsMới

Nhận diện cử chỉ mmWave với AI – Phần 2: Từ radar frame đến Edge ML

Xây dựng gesture classifier thực tế với radar mmWave: chọn dữ liệu radar phù hợp, thu dataset cân bằng, train model gọn và triển khai confidence gate trên embedded.

Chia sẻ

LinkedInFacebookX
Powered enclosed mmWave radar device with a smooth RF radome window while a hand performs a gesture nearby

Series radar mmWave: Đây là Phần 2, tập trung vào AI gesture classification. Nếu bạn chưa chọn loại module hoặc output radar, hãy đọc Phần 1 — kiến thức cơ bản về motion, gesture và presence trước.

Ở Phần 1, mình đã tách rõ motion, presence và gesture detection. Phần này đi sâu thêm một bước: thay vì nhận sẵn event như SWIPE_LEFT, mình sẽ nhìn gesture như một bài toán classifier machine learning nhỏ.

Điều này quan trọng hơn vẻ ngoài của nó. Một module presence cơ bản chỉ gửi occupied/clear qua UART không có đủ thông tin để học hình dạng của một chuyển động tay. Với dự án gesture ML, mình bắt đầu bằng radar kit có raw frame, hoặc ít nhất là processed frame phù hợp và có tài liệu cấu hình rõ ràng.

Model thật sự cần nhìn thấy gì?

Gesture là chuyển động theo thời gian, không phải một lần đọc radar đơn lẻ. Một pipeline thực tế thường có dạng:

radar frames
  → xử lý range / Doppler
  → cắt vùng tương tác của bàn tay
  → log scale + normalize
  → cửa sổ thời gian ngắn
  → classifier gọn
  → confidence gate + lockout
  → event cho application

Sơ đồ radar mmWave đi qua DSP, TinyML classifier, confidence gate và event cho ứng dụng

Model chỉ tạo ra score. Confidence, lockout và state machine của sản phẩm mới quyết định có biến gesture thành hành động hay không.

Feature cụ thể phụ thuộc vào kit. Range-Doppler map thường giữ được thông tin hữu ích về hướng và tốc độ. Range-angle giúp khi tay phải đi qua một vùng rõ ràng. Một số stack gesture của hãng giấu DSP sau API; điều đó tốt cho sản phẩm, nhưng giới hạn phần bạn có thể tự retrain.

Demo gesture của TI dùng thông tin range, velocity và angle để phân loại sáu cử chỉ tay. Stack XENSIV của Infineon kết hợp radar DSP với classifier dựa trên neural network. Cả hai đều nhắc mình rằng model chỉ là một tầng trong chuỗi sensing.

Giữ bộ cử chỉ đầu tiên thật nhỏ

Với giao diện đầu tiên, mình sẽ chọn:

  • vuốt trái
  • vuốt phải
  • đẩy tới
  • không có gesture

No gesture là một class thật, không phải dữ liệu thừa. Nó nên có tay đứng yên, người đi ngang, hai người cùng xuất hiện, tay đi vào/ra rất chậm và background motion bình thường. Nếu không có class này, model có thể rất ấn tượng trong demo ngắn nhưng lại tự kích hoạt liên tục trong phòng.

Đừng dạy năm biến thể của cùng một chuyển động ngay từ đầu. Nếu vuốt trái và phải còn bị nhầm, thêm vòng tròn, chéo và pinch chỉ làm nhãn nhiều hơn chứ không làm giao diện dễ kiểm soát hơn.

Thu dữ liệu như cách bạn sẽ kiểm thử

Cấu hình radar nên giữ cố định khi xây dataset đầu: chirp profile, frame rate, gain, hướng antenna, độ cao lắp đặt và khoảng cách thao tác. Thay một trong các yếu tố này về sau có thể đồng nghĩa bạn đang dùng một sensor khác.

Thiết bị radar mmWave đóng hộp có cấp nguồn với cửa sổ radome nhựa phẳng khi một người vuốt tay qua vùng thử được đánh dấu bằng băng dính

Cửa sổ phía trước là một radome RF, không phải nắp trang trí. Hãy giữ vật liệu và hình học cuối cùng cố định khi thu từng gesture.

Mỗi lần ghi, mình lưu tối thiểu: gesture label, người thực hiện, vùng khoảng cách, hướng radar, phòng và session. Nên thu nhiều session ngắn thay vì một session dài cho mỗi người. Kế hoạch khởi đầu hợp lý là thu mọi class từ nhiều người ở nhiều ngày khác nhau, rồi giữ nguyên một số người hoặc session cho validation.

Cách chia này rất quan trọng. Nếu split ngẫu nhiên các frame liền nhau, những chuyển động gần như giống hệt có thể rơi vào cả train lẫn validation. Điểm số sẽ đẹp, nhưng model lại fail khi gặp bàn tay của người tiếp theo. Split theo người hoặc theo session cho điểm kém đẹp hơn nhưng hữu ích hơn nhiều.

Làm feature trước khi chạy theo model lớn

Hãy bắt đầu bằng một tensor nhất quán cho mỗi ví dụ. Chẳng hạn: cắt vùng near-range, giữ một số range-Doppler frame liên tiếp cố định, dùng log magnitude, rồi normalize bằng giá trị tính từ training data.

window shape = time × Doppler bins × range bins
ví dụ        = 20 × 16 × 24 giá trị

Các con số này chỉ là ví dụ thiết kế. Bạn chọn chúng theo frame rate của radar, tốc độ gesture, RAM còn lại và độ phân giải feature thật sự cần. Window ngắn giảm latency nhưng có thể mất phần cuối gesture. Window dài có thêm ngữ cảnh nhưng tốn RAM và làm giao diện chậm hơn.

Temporal CNN nhỏ là lựa chọn khởi đầu hợp lý cho kiểu input này. MLP gọn cũng có thể chạy tốt nếu feature engineering chắc. Mình sẽ so cả hai với baseline không ML, ví dụ threshold theo velocity. Nếu model học không thắng baseline trên dữ liệu giữ lại, hãy sửa data hoặc feature pipeline trước khi làm network lớn hơn.

Train cho những lỗi có thể chấp nhận được

Accuracy che mất câu hỏi mà sản phẩm thật sự quan tâm: thao tác sai nào chấp nhận được? Một false push làm máy chạy nguy hiểm hơn nhiều so với một lần bỏ sót swipe khiến người dùng phải làm lại.

Hãy xem confusion matrix cùng precision/recall theo từng class. Sau đó tune quyết định cuối ở ngoài model:

if (best_label != NO_GESTURE &&
    best_score >= 0.85f &&
    millis() - last_event_ms > 500) {
    emit_gesture(best_label);
    last_event_ms = millis();
}

Threshold và lockout không phải số kỳ diệu; hãy đo chúng với các session validation. Vote ngắn qua vài window liên tiếp còn có thể giảm event vô tình. Nhớ cho UI phản hồi khi nhận command để người dùng không lặp gesture khi hệ thống đang ở lockout.

Thiết bị radar mmWave đóng hộp có cấp nguồn với cửa sổ radome nhựa phẳng trước laptop có biểu đồ xác suất và heatmap radar làm mờ

Hãy validate model cùng radome và góc lắp cuối, rồi xem các lớp hay nhầm và loại frame confidence thấp.

Triển khai: tách radar khỏi hành vi sản phẩm

Trên embedded, hãy tách các việc sau:

  1. Radar task nhận frame mà không làm rơi dữ liệu.
  2. Feature task biến một window có giới hạn thành input cho model.
  3. Inference task trả về score và thời gian chạy.
  4. UI/application task áp dụng confidence, lockout và state rule.

Việc tách này làm profiling rõ hơn. Khi recognition chậm, bạn biết lỗi nằm ở SPI, DSP, inference hay application logic. Hãy đo heap, worst-case inference time và frame overrun trước khi chuyển sang thiết kế enclosure.

Quantization có thể giảm model size và latency, nhưng là quyết định deployment cần validation sau quantize. Đừng cho rằng điểm số float sẽ giữ nguyên với int8. Tương tự, ESP32 có thể làm controller hoặc host cho inference được giới hạn kỹ, nhưng nhiều radar gesture kit ghép sensor với MCU mạnh hơn hoặc chạy recognizer trong library của hãng. Hãy chọn board sau khi ước lượng memory và timing budget thật.

Test ngoài góc radar hoàn hảo

Trước khi gọi project là xong, hãy thử:

  • kích thước tay và tay thuận khác nhau
  • mép của vùng khoảng cách dự kiến
  • gesture nhanh và chậm
  • một người ngồi phía sau người thao tác
  • mặt phản xạ, quạt gần đó và người đi lại bình thường
  • enclosure và góc lắp cuối cùng
  • cold boot, chạy lâu và recovery sau khi drop frame

mmWave hấp dẫn vì không cần ảnh camera, nhưng nó không tách khỏi bối cảnh. Phòng, cách lắp và cách mọi người di chuyển đều là một phần input của model, dù bạn không ghi chúng vào file CSV.

Bước tiếp theo thực tế

Hãy giữ mục tiêu đầu thật hẹp: một sản phẩm, một vị trí lắp, ba command và một quy tắc feedback rõ. Chủ động thu cả failure case. Khi model đã ổn trong lát cắt đó, hãy thêm một gesture hoặc mở rộng khoảng cách, mỗi lần chỉ đổi một yếu tố.

Điểm thay đổi hữu ích ở phần 2 không phải là gắn nhãn “AI”. Đó là xem radar, dataset, DSP, model và interaction rule như một hệ thống có thể đo được. Đây mới là thứ biến một bàn tay chuyển động trước sensor thành giao diện mà người dùng có thể tin.

Tài liệu tham khảo

Chia sẻ

LinkedInFacebookX

Tiếp tục khám phá

Đọc tiếp

Bài viết liên quan

Xem thêm trong Giải pháp IoT

Nastrotek sử dụng cookie để phân tích truy cập và cá nhân hóa quảng cáo, giúp hiểu cách website được sử dụng. Bạn có thể chấp nhận hoặc từ chối các cookie không thiết yếu. Chính sách bảo mật