我目前正在调查dejavu.py(some more info),我必须说到目前为止我对此印象深刻。虽然我发现文档在用户界面方面有点不完整
当您使用oDjv.recognize(FileRecognizer, sFile)
识别来自文件的歌曲时,会返回一个如下所示的字典:
{'song_id': 2, 'song_name': 'Sean-Fournier--Falling-For-You', 'file_sha1': 'A9D18B9B9DAA467350D1B6B249C36759282B962E', 'confidence': 127475, 'offset_seconds': 0.0, 'match_time': 32.23410487174988, 'offset': 0}
从记录(oDjv.recognize(MicrophoneRecognizer, seconds=iSecs)
):
{'song_id': 2, 'song_name': 'Sean-Fournier--Falling-For-You', 'file_sha1': 'A9D18B9B9DAA467350D1B6B249C36759282B962E', 'confidence': 124, 'offset_seconds': 24.89179, 'offset': 536}
所以,问题:
1)究竟什么是confidence
,是否存在置信水平的上限?
2)offset_seconds
和offset
之间有什么区别?
3)为什么算法需要在30到60秒之间(在我运行的所有测试的情况下)从磁盘识别歌曲,但是在录制音频时它可以在10秒左右完成?
4)当运行从音频录制的功能时,我从该功能获得实际输出之前的以下代码块(即使成功)。我们要去哪儿?
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
5)是否有可以插入配置的在线音乐数据库?
dConfig = {
"database": {
"host": "some magical music database",
"user": "root",
"passwd": "",
"db": "dejavu"
}
}
oDjv = Dejavu(dConfig)
答案 0 :(得分:5)
您的大多数问题都可以在Dejavu github README.md或writeup and explanation here中找到。
但要回答每个有问题的问题:
confidence
是当前音频片段中“对齐”到数据库最接近匹配的指纹哈希数。没有概率解释。请记住,每个音频文件可能有数千个指纹,因此将其作为参考点。 offset_seconds
表示为秒,offset
表示为length of the algorithm's time bins。 python dejavu.py --recognize mic 5
调整默认命令行麦克风识别所需的时间,该fingerprint_limit
侦听5秒而不是默认值10.FYI,库的最佳选项之一是您还可以更改秒数Dejavu使用JSON config file使用pyaudio
密钥进行磁盘识别。 DEFAULT_FAN_VALUE
。在您的情况下,请参阅this solution,也许这可能会有所帮助。FINGERPRINT_REDUCTION
。需要更高的碰撞保证,但不介意额外的存储成本?您可以减少#include <stdio.h>
int main ()
{
int i;
int x = 0;
int nb = 0;
while(x != EOF)
{
printf("\nHow many circles do you want to write?\n");
nb = 0;
for (x = getchar(); x != '\n'; x = getchar()) {
if (x == EOF)
goto end;
if (x >= '0' && x <= '9') {
nb = nb * 10 + x - '0';
}
}
for (i = 0; i < nb; i++)
{
putchar('o');
}
}
end:
printf("\n\n Bye! \n\n");
return 0;
}
并保留每个SHA-1的更多字符。 Dejavu旨在适应许多不同的用例,这必然意味着如果您更改this file中的指纹识别参数,您的数据库将具有不同的分布和结构。答案 1 :(得分:2)
每个人都已经得到了很好的回答,只需进一步澄清1)。
每个文件有数千个指纹的原因是因为Dejavu试图根据声音识别歌曲,无论歌曲样本的长度,歌曲中样本的位置或录制中可能存在的任何噪音(它试图实现Shazam试图达到的相同目的)。每个指纹由音频内容本身的许多数据样本构成,导致潜在的大量指纹。 Dejavu有很多因素影响所获指纹的大小和数量,使其能够根据您自己的要求进行微调。
如果我们每个文件只使用一个指纹,那么找到匹配的唯一方法就是你输入的是同一个文件。
@ tkhurana96,对不起,我还没有回复评论的声誉,但希望能为你澄清一些事情。