You are currently viewing Subvox dùng AirPods Pro đo chuyển động đầu để đoán từ khi bạn mấp máy môi

Subvox dùng AirPods Pro đo chuyển động đầu để đoán từ khi bạn mấp máy môi

Một prototype macOS tên Subvox vừa xuất hiện trên GitHub, thử trả lời một câu hỏi khá kỳ: liệu dữ liệu chuyển động đầu từ AirPods Pro có đủ thông tin để biến những từ bạn mấp máy môi (không ra tiếng) thành text hay không. Tác giả joeblau không dùng language model. Toàn bộ hệ thống là một template recognizer với từ vựng nhỏ, cộng thêm một bài kiểm tra thống kê để xem tín hiệu thu được là thật hay chỉ là nhiễu.

Nó làm gì, cụ thể

Subvox đọc dữ liệu từ CMHeadphoneMotionManager, tức cảm biến chuyển động tích hợp trong tai nghe (AirPods Pro hoặc tai nghe hỗ trợ head tracking). Bạn mấp máy môi một từ, app ghi lại chuyển động đầu và hàm, rồi so khớp với các template đã huấn luyện trước đó để đoán ra từ.

Có ba màn hình chính. Màn hình Sensors vẽ live đồ thị gia tốc người dùng, tốc độ quay và attitude, kèm sample rate đo được, chọn mic đầu vào và recorder cho các phiên thí nghiệm. Màn hình Train để bạn chọn một từ, giữ phím Space, mấp máy môi rồi thả ra; mỗi lần như vậy lưu thành một template. Nút Evaluate chạy leave-one-out classification và một label-permutation test 500 lần, in ra accuracy so với mức ngẫu nhiên, p-value và confusion matrix. Các checkbox feature (acceleration / rotation / attitude) cho phép bạn thử xem kênh nào thực sự mang tín hiệu. Màn hình Decode là chỗ chuyển motion sang text: giữ Space, hoặc bật auto-detect sau khi calibrate noise floor, mỗi segment được DTW-match với template và nối vào transcript. Có thêm một mic transcript chạy song song để so sánh.

Cách decode gồm bốn bước. Đầu tiên segmentation trong CaptureController, dựa vào giữ Space hoặc energy trigger trên noise floor đã calibrate, có pre-roll và hangover. Tiếp theo là trích feature trong MotionFeatures: mỗi frame lấy gia tốc người dùng (3 trục), rotation rate (3 trục), và thay đổi attitude so với đầu segment (3 trục); mỗi kênh mean-center, cắt bỏ các frame lead-in và lead-out yên tĩnh. Bước ba là matching trong DTW và TemplateClassifier: z-scale từng kênh trên tập train, dùng 1-nearest-neighbour cho mỗi từ với dynamic time warping và Sakoe-Chiba band; segment bị loại nếu khoảng cách tốt nhất vượt max distance hoặc margin so với ứng viên thứ hai thấp hơn min confidence. Bước cuối là kiểm tra tính thật của tín hiệu trong Evaluation: so accuracy leave-one-out với cùng quy trình chạy trên nhãn đã xáo trộn.

Vì sao 587 sao trong ngày đầu

Repo tạo ngày 2026-10-31 và cập nhật cùng ngày, tức mới toanh. 587 sao cho một prototype Swift chưa có README dài dòng là con số đáng để ý. Lý do không khó hiểu: ý tưởng “nói chuyện không cần phát ra tiếng, chỉ mấp máy môi” luôn hấp dẫn, nhưng hầu hết các thử nghiệm kiểu này đều cần camera hoặc điện cực EMG gắn lên mặt. Subvox chỉ dùng thứ có sẵn trong tai nghe bạn đang đeo.

Điểm khác biệt là tác giả không thổi phồng kết quả. README ghi rõ không dùng language model, từ vựng nhỏ, template gắn với từng người và từng phiên. Thậm chí có hẳn mục “Known limits” nói thẳng: motion từ tai nghe đã qua xử lý và tần số thấp, khoảng 25 Hz trên AirPods; cảm biến gia tốc phát hiện giọng nói và mic hướng vào trong đều không được expose; nên đừng mong bắt rung thanh quản, chỉ có chuyển động hàm và đầu. Việc công khai giới hạn như vậy khiến repo đáng tin hơn nhiều so với mấy demo “AI đọc khẩu hình” thường thấy.

Cài và chạy thử

Yêu cầu macOS 14 trở lên, AirPods Pro hoặc tai nghe hỗ trợ head tracking, đang kết nối làm audio output của Mac. Lần chạy đầu phải cấp quyền Motion; prompt mic và speech chỉ hiện khi bạn bật mic.

brew install xcodegen # once
xcodegen generate
open Subvox.xcodeproj # ⌘R

Hoặc chạy từ dòng lệnh:

xcodebuild -project Subvox.xcodeproj -scheme Subvox -derivedDataPath build -allowProvisioningUpdates build
open build/Build/Products/Debug/Subvox.app
xcodebuild -project Subvox.xcodeproj -scheme Subvox -derivedDataPath build test

Muốn có dữ liệu để nghịch, dùng recorder trong màn hình Sensors. Mỗi phiên ghi ra motion.csv (mọi motion sample, cột t tính bằng giây từ đầu phiên), audio.caf (audio mic nếu mic đang chạy), events.csv (mọi segment giữ Space kèm nhãn hoặc dự đoán), và meta.json (condition, prompt, audio start offset để align audio với motion). README gợi ý kịch bản: cùng một script 5 từ, chạy ở ba điều kiện Normal speech, Whisper và Silent mouthing, mỗi điều kiện 10 lần, rồi so kết quả Evaluate giữa các bộ feature. Tập train nằm ở ~/Library/Application Support/Subvox/dataset.json.

Ai nên thử

Đây là prototype nghiên cứu, không phải app dùng hàng ngày. Nếu bạn làm về human-computer interaction, accessibility, hoặc đang tò mò cảm biến IMU trong tai nghe có khai thác được gì ngoài đếm bước và phát hiện cúi đầu, thì đây là codebase nhỏ đáng đọc. Sinh viên làm đồ án về signal processing cũng có thể dùng làm mẫu: pipeline segmentation, feature extraction, DTW matching và permutation test đều gọn, dễ tách ra học. Còn nếu bạn cần một giải pháp nhận dạng giọng nói im lặng thực dụng để tích hợp vào sản phẩm, repo này chưa đủ.

So với lựa chọn khác

Hướng tiếp cận phổ biến cho “silent speech” thường dựa vào EMG gắn mặt, camera đọc khẩu hình, hoặc radar. Mấy hướng đó cần phần cứng riêng. Subvox đứng riêng ở chỗ tận dụng hardware có sẵn, đổi lại độ chính xác và từ vựng bị giới hạn nặng. Tôi không biết dự án mã nguồn mở nào làm đúng bài toán này với cùng cách tiếp cận, nên không so sánh cụ thể hơn được.

Ưu, nhược và mấy điều cần biết

  • Ưu: code Swift gọn, MIT license, không phụ thuộc model nặng. Có sẵn cơ chế đánh giá thống kê (leave-one-out, permutation test 500 lần, p-value, confusion matrix) để bạn tự kiểm chứng thay vì tin lời tác giả. README trung thực về giới hạn.
  • Nhược: template gắn với từng người và từng phiên; đeo lại AirPods có thể làm lệch tín hiệu, nghĩa là gần như phải train lại. Từ vựng nhỏ. Sample rate khoảng 25 Hz là thấp cho bài toán phân biệt từ. Chọn AirPods làm mic input sẽ đẩy tai nghe sang profile Bluetooth headset (HFP), chất lượng audio giảm.
  • Lưu ý: repo mới có một ngày, chưa có topics, chưa có mô tả, README còn bị cắt giữa chừng ở phần Evaluation. Đừng kỳ vọng API ổn định hay tài liệu đầy đủ. License MIT thì thoải mái dùng và sửa, nhưng đây là prototype, không phải sản phẩm.

Nếu bạn có AirPods Pro và một buổi tối rảnh, thử train 5 từ rồi bấm Evaluate xem accuracy có vượt mức ngẫu nhiên thật không. Con số p-value hiện ra ở đó sẽ nói rõ hơn mọi lời giới thiệu, kể cả bài này. Repo: joeblau/subvox.

Chia sẻ bài này

TelegramXFacebookZalo
Đăng ngày 02/11/2026
Giang Na
Về tác giả: Giang Na
Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.

Giang Na

Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.