我正在尝试构建一个应用程序,允许用户录制单个人说话,然后将录音保存在设备上,并使用发言人的姓名标记每个记录。然后是检测模式,我记录某人,如果他在本地数据库中,可以告诉他的名字。
首先 - 这有可能吗?我是iOS开发的新手,对可用的API不太熟悉。
更重要的是,我应该使用哪种API(理想情况下是免费的)来关联传入语音和本地数据库中的记录?这应该像Shazam一样,但更简单,因为我正在寻找匹配的数据库要小得多。
答案 0 :(得分:4)
如果您是iOS开发的新手,我会先从核心应用开始录制音频,然后让人们手动选择一个配置文件/名称来附加它,并稍后担心说话人识别部分。
你显然有两种选择来识别事物:你可以选择其他人的语音认证/说话人识别库(可能是C或C ++),或者你可以尝试编写你的自己的。
有多少人会使用您的应用?你可能能够自己创造一些基本的东西:如果它是男人和女人之间的区别,你可以通过对音频进行FFT频谱分析并找出频率峰值的位置来解决这个问题。显然,用于发出不同音素的频率会有所不同,因此解决两个声音相当相似的人的一般情况可能很难。您需要使用一堆文本训练系统并构建某种频率分布模型。你可以尝试进行聚类或其他什么,但是你很快就会遇到相当多的数学问题(gaussian mixture models,等)。有图书馆/项目可以做到这一点。您可以从matlab移植它,例如:https://github.com/codyaray/speaker-recognition
如果你想采取现成的东西,我会使用直接的C库,如misral,因为从Objective-C调用它应该相对容易。
SpeakHere示例代码可让您开始录制和播放录音。
此外,用户可能需要更长的时间来训练您的应用以识别它们,而不是仅仅通过从列表中选择其名称来节省时间。除非你打算让他们的声音成为某种安全护照类型的东西,否则可能就不值得打扰了。