2014-05-19 5 views
3

오디오 지문 인식 및 Python 인식을위한 Dejavu 라이브러리 경험이있는 사람이 있습니까? 그것은 잘 작동하지만 내가 관심이있는 것은 지금까지 난 그냥 사용하여 한 번에 하나 개의 파일을 인식 할 수있어 것입니다 것 :오디오 지문 인식을 위해 Dejavu 라이브러리를 사용하여 폴더에있는 모든 파일을 인식하기위한 루프

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

사람이 어디 있다고 할 것입니다 루프를 만들 수있는 아이디어를 가지고 어떻게 폴더의 모든 파일에 대해 위의 명령을 인쇄 하시겠습니까? 내가 루프가 여기 어딘가에 작성해야한다고 생각 :

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

import dejavu.fingerprint as fingerprint 
import dejavu.decoder as decoder 
import numpy as np 
import pyaudio 
import time 


class BaseRecognizer(object): 

    def __init__(self, dejavu): 
     self.dejavu = dejavu 
     self.Fs = fingerprint.DEFAULT_FS 

    def _recognize(self, *data): 
     matches = [] 
     for d in data: 
      matches.extend(self.dejavu.find_matches(d, Fs=self.Fs)) 
     return self.dejavu.align_matches(matches) 

    def recognize(self): 
     pass # base class does nothing 


class FileRecognizer(BaseRecognizer): 
    def __init__(self, dejavu): 
     super(FileRecognizer, self).__init__(dejavu) 

    def recognize_file(self, filename): 
     frames, self.Fs = decoder.read(filename, self.dejavu.limit) 

     t = time.time() 
     match = self._recognize(*frames) 
     t = time.time() - t 

     if match: 
      match['match_time'] = t 

     return match 

    def recognize(self, filename): 
     return self.recognize_file(filename) 

나는 글로브 모듈을 수행해야합니다,하지만 난 초보자 해요 이후, 그와 함께 넣어 위치를 모르는 알고 루프, 그래서 나는 정확한 파일에 대한 인식을 요구하지 않는다!

답변

2

아니요 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) 

가 잘하면 그건 당신이 의도 한 것입니다.