使用Dejavu库识别文件夹中的所有文件进行音频指纹识别的循环

2024-06-29 00:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

有人有在Python中使用Dejavu库进行音频指纹识别和识别的经验吗?它工作正常,但我感兴趣的是,到目前为止,我只能一次识别一个文件,方法是:

print djv.recognize(FileRecognizer, 'path/song_name.mp3')

有人知道如何以及在哪里创建一个循环,从上面对文件夹中的所有文件执行打印命令吗?我认为应该在这里的某个地方创建循环:

https://github.com/worldveil/dejavu/blob/master/dejavu/recognize.py

^{pr2}$

我知道它应该用glob模块来完成,但由于我是一个新手,不知道该把它放在哪个循环中,所以我不会得到提示来识别确切的文件!在


Tags: 文件path方法namesong经验音频感兴趣
1条回答
网友
1楼 · 发布于 2024-06-29 00:18:32

不,只需在dejavu文件夹所在的目录中创建另一个.py文件。不要更改库代码。在

你可能想做这样的事情:

from dejavu import Dejavu
from dejavu.recognize import FileRecognizer
import os, fnmatch

def find_files(directory, pattern):
    """http://stackoverflow.com/a/2186673/712997"""
    for root, dirs, files in os.walk(directory):
        for basename in files:
            if fnmatch.fnmatch(basename, pattern):
                filename = os.path.join(root, basename)
                yield filename

config = {
     "database": {
         "host": "127.0.0.1",
         "user": "root",
         "passwd": "Password123", 
         "db": "dejavu_db",
     },
     "database_type" : "mysql",
     "fingerprint_limit" : 10
}

# create a dejavu object
djv = Dejavu(config)

# gather files to fingerprint
UNLABELED_AUDIO_DIR = "/home/me/music/unknown/"
PATTERN = "*.mp3"
audio_paths = find_files(UNLABELED_AUDIO_DIR, PATTERN)

# recognize them one at a time
original_file_to_song = {}
for path in audio_paths:
    print "Attempting to recognize %s..." % path
    song = djv.recognize(FileRecognizer, path)
    original_file_to_song[path] = song

# see the songs you've recognized
for path, song in original_file_to_song.iteritems():
    print "Audio file at: %s was recognized as %s" % (path, song)

希望这就是你想要的。在

相关问题 更多 >