正如 Dmytro Prylipko 所说,是否存在任何用于语音情感识别的开源库是非常值得怀疑的。
您可以编写自己的解决方案。这并不难。问题是,如前所述,适当的培训和/或垃圾处理需要大量的时间和精力。
我会给你一个简短的理论,你应该如何开始编写算法,但是训练等等都是你的事。
第一个大问题是不同的人用不同的方式传达他们的情绪。
例如:一个震惊的人会对他们的震惊做出过度惊呼的反应,而另一个人会“冻结”,他们的反应听起来很平淡(几乎像机器人一样)。
因此,您将需要大量模板来学习如何根据情绪对输入的语音进行分类。
您可以通过使用上下文识别和语音韵律来消除一些困难。
我建议你这样做。
首先制作一个算法,该算法将使用语音识别文本将其放入情感上下文中。例如。您可以使用人们在表达不同情绪时使用的特定单词和短语。
这很容易做到。您可以使用神经网络或简单的分支等。
因此,通过结合上下文识别和韵律中的情绪,您将能够同时识别一个人是否感恩和惊讶。
现在,要从韵律中识别情感,您必须获取韵律参数和其他一些参数。
例如,可以通过查看句子中特定单词的持续时间来识别某些情绪。
所以你有句子和那个句子的文本。你知道正常说话的速度大约是每分钟200字。知道这个和句子中的单词数量,你就可以看出某人说话的速度有多快。然后你测量每个单词的持续时间并得到它的速度。通过了解语音的速度和单词的长度,您可以获得可用于分类的标准化比率,以确定最接近的情绪猜测。
例如,当某人收到他/她非常喜欢的礼物时,“谢谢”会听起来很长。它的音调也会比那个人平时讲话的音调高。
所以下一步是获取每个单词的平均音高,以查看它们之间的关系。因此,您将能够看到句子韵律是如何变化的。从低到高,反之亦然。
此外,句子中的短语内韵律如何变化。
您可以通过直接比较已知情绪的曲线来解决此问题,也可以使用近似法从韵律曲线向量中获取系数。平方函数适用于正常的语音韵律(没有特定的情绪)。所以应该做一些高阶多项式。所以,你可以得到多项式的系数,并用它们来得到整个句子或短语应该传递什么样的情绪。
句子中的单个单词也是如此。你得到每个音素或音节的音高,或者只是音高曲线,例如每 20 毫秒的单词。然后你要么计算几个系数来近似你认为对你来说足够好的多项式,要么你取整条曲线并将其归一化为例如30 分即可用于识别。
要直接比较曲线,您可以使用 Oleg Dopertchouk 的手势识别算法:
http://www.gamedev.net/reference/articles/article2039.asp
我在旋律的音高曲线上试过了,效果很好。
问题是,您需要一个包含上下文和情感的语音数据库,以及清晰的手动分类,以便为您的算法提供一些可比较的东西。
如果您使用多项式而不是整条曲线,您可以通过对系数使用阈值来进行一些识别,但结果会有点不稳定。使用 coeffs 的唯一真正借口是您不需要知道所讨论的单词有多长。 IE。同一个多项式应该适用于一个有 2 个音素的单词和一个有 5 个音素的单词。(应该可以)
你看,一个理论既好又简单。使用语音识别,测量每个单词的语速和持续时间,使用 FFT 构建整个短语的音高曲线和每个单词的音高曲线,在准备好的数据库和输入之间做一些比较。和沃拉,情感得到了认可。
但是你在哪里可以找到带有情绪标记的单词曲线的数据库。
例如,对于每种情绪,对于具有不同音素数量的单词,您需要至少一个音高曲线。至少一个,因为这个词是以元音开头还是以一个结尾,或者只是某人以不同的方式传递相同的情感,即使曲线代表同一个词,这一点很重要。
好的,所以你可以说你可以制作一个。你会在哪里找到记录的样本来制作你的曲线或计算系数?嗯,也许是一些戏剧的录音。不错的主意,但表现出来的情绪与自然的情绪不一样。
教一台机器这样的事情是一项艰巨的工作。
哦,是的,我差点忘记了,情绪不仅,有时甚至完全通过音调变化来转移,有时只是单词的发音方式。
因此,在某些情况下,您可能需要 LPC 或其他一些系数来显示有关单词中音素发音的更多信息。或者您需要考虑 FFT 中的其他谐波,而不仅仅是代表励磁列车音高的谐波。
在不遵循我的提示并开发自己的算法的情况下,您可以做的最好的事情是使用 NLTK(自然语言工具包)来开发统计语音(情感丰富)模型并使用那里的算法(可能有点修改)来试着理解有问题的情绪。
但我担心这会比从零开始更重要。据我所知,NLTK 不支持情绪。只是正常的语音韵律。
您可以尝试将我写的一些东西集成到 Sphinx 中,以开发基于情感的语音模型并将情感识别直接引入 sphinxes VR 算法中。
如果你真的需要这个,我建议你学习足够的 DSP 来编写自己的算法,然后花钱请人从有声读物、广播剧和类似的东西中创建你的初始数据库(使用你提供的工具)。
在您的算法开始正常运行后,通过为用户提供纠正算法错误猜测的选项来实施自动学习。一段时间后,您将获得 90% 可靠的算法来识别语音中的情绪。