Classify WeChat Audio Messages using Speaker Recognition
Problem¶
微信的聊天记录导出一直是挺麻烦的事, 尤其是在 iphone 上.
前几天想导出一部分语音聊天记录, 就到 iphone 的文件系统里去找了一下,
发现微信的语音记录存放在/var/mobile/Applications/{app id}/Documents/{user id}/Audio/{friend id}/*.aud
问题是, 微信将两人互相的对话音频存在一个目录下, 不知道如何区分, 去逆向微信的聊天记录格式恐怕比较困难, 于是想到使用上学期做的说话人识别 (Speaker Recognition) 系统来自动处理这个问题.
Preparation¶
google 一下发现微信所存储的音频格式为 headless AMR. 因此手动为每个文件添加 AMR head:
|
然后就可以将其转为正常的 wav 格式了:
|
手动标注一部分数据, 分别放在以两人名字命名的目录里:
|
两人的训练数据总时间分别为 21s 与 15s, 未消除静音部分
Classification¶
Speaker Recognition 项目的代码放在 github 上, 由于是 course project 而且拼的是效果, 所以我们的代码写的还挺乱的..
关于 Speaker Recognition 的原理, 可以看我们的 presentation slides 和 report
今天为其增加了命令行工具, 方便进行训练和预测.
训练:
|
预测:
|
其输出的预测结果每一行形如: "/tmp/wechat/546.wav -> y" 根据输出构造 shell 命令, 把音频按分类结果分别放到不同目录中:
|
现在 x 与 y 两人的所有音频都被放到了 x, y 两个目录里, 为了方便人工验证正确性, 可以将一个人的所有音频合并为一个 wav:
|
结果准确率为 100%..(数据比较少)
大家都去收集好 (nv) 友 (shen) 的声音吧!