Hacker News· Cappybara12·· 4 天前精选AI 评分80
开发者用AirPods重现Subvocal
Subvocal raised $1.3M. A developer recreated it with AirPods in 9 minutes
AI 摘要
一个macOS原型测试AirPods Pro头部运动数据是否足以将无声口型转化为文字,通过小词汇量模板识别器和统计测试验证信号真实性,需macOS 14+和AirPods Pro支持头部追踪
正文 · AI 翻译
一个 macOS 原型机,测试 AirPods Pro 头部运动数据 (CMHeadphoneMotionManager) 是否包含足够的信息来将 无声口型 转换成文字。
它不使用语言模型。它是一个小词汇量模板识别器加上一个统计测试,告诉你信号是否真实。
构建 & 运行
brew install xcodegen # once xcodegen generate open Subvox.xcodeproj # ⌘R
或者从命令行:
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需要 macOS 14+、AirPods Pro 或另一个支持头部追踪的耳机,并将其连接为 Mac 的音频输出。首次启动时,授权 运动。麦克风和语音提示仅在启动麦克风时出现。
屏幕
| 屏幕 | 它的功能 |
|---|---|
| 传感器 | 用户加速度、旋转率和姿态的实时图表,测量的采样率,麦克风输入选择器和电平表,以及用于实验会话的录音机。 |
| 训练 | 选择一个词,按住 空格,口型,释放。每次尝试都存储为模板。 评估 运行执行留一分类和 500× 标签排列测试,然后显示与机会的准确率、p 值和混淆矩阵。特征复选框(加速度 / 旋转 / 姿态)让你测试哪个通道携带信号。 |
| 解码 | 运动转文字的屏幕。按住空格,或在校准噪声底部后使用自动检测。每个片段都与你的模板进行 DTW 匹配并添加到文本中。一个实时的麦克风文本与其并列以供比较。 |
解码如何工作
- 分段 (
CaptureController)。按住空格,或在校准噪声底部以上的能量触发,带有预滚和拖尾。 - 特征 (
MotionFeatures)。每帧:用户加速度(3)、旋转率(3)和自片段开始以来的姿态变化(3)。每个通道都进行均值居中,并修剪了安静的引入和退出帧。 - 匹配 (
DTW,TemplateClassifier)。每个通道在训练集中进行 z 缩放。匹配是每个单词的 1-最近邻,使用 Sakoe–Chiba 带的动态时间规整。如果最佳距离高于 最大距离 或到第二名之间的边距低于 最小置信度,则拒绝片段。 - 它真实吗? (
Evaluation)。留一准确率与相同步骤在打乱标签上运行的结果进行比较。如果 p < 0.05,则运动流比机会更好地区分你的单词。
实验协议
在工具栏或传感器屏幕中使用 记录会话。录制文件发送到 ~/Documents/Subvox/Sessions/<timestamp>-<condition>/:
motion.csv:每个运动样本。t是从会话开始以来的秒数。audio.caf:如果麦克风正在运行,则麦克风音频。events.csv:每个按住空格的片段,及其标签或预测。meta.json:条件、提示和对齐音频与运动的音频起始偏移量。
建议运行:在 正常说话、耳语 和 无声口型 下使用相同的 5 个词脚本,每个重复 10 次。然后,在训练中,比较不同特征集的评估结果。
训练集位于 ~/Library/Application Support/Subvox/dataset.json。
已知限制
- 耳机运动被处理且低速率(AirPods 上约为 25 Hz)。语音检测加速度计和向内的麦克风没有暴露。预期下颌和头部运动,而不是声带振动。
- 模板是用户和会话特定的。重新放置 AirPods 可能会改变信号。
- 将 AirPods 作为麦克风输入会将它们切换到蓝牙耳机 (HFP) 配置文件。
来源:Hacker News · github.com
00