mirror of
https://github.com/correl/dejavu.git
synced 2024-11-23 19:19:53 +00:00
Fixed various small things that weren't caught before.
- Fixes SQL queries for table creations - Table creation is now down in reverse order to accompany the foreign key - Fixed a typo in the BaseRecognizer that caused it to not work - Changed configuration passed to Dejavu into a (nested) dictionary
This commit is contained in:
parent
1c9eddc3a2
commit
3b72768f94
3 changed files with 59 additions and 74 deletions
|
@ -8,19 +8,13 @@ import random
|
||||||
|
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
|
|
||||||
class Dejavu():
|
class Dejavu(object):
|
||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
|
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
# initialize db
|
# initialize db
|
||||||
database = SQLDatabase(
|
self.db = SQLDatabase(**config.get("database", {}))
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_HOSTNAME),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_USERNAME),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_PASSWORD),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_DATABASE))
|
|
||||||
self.db = database
|
|
||||||
|
|
||||||
# create components
|
# create components
|
||||||
self.converter = Converter()
|
self.converter = Converter()
|
||||||
|
@ -30,12 +24,12 @@ class Dejavu():
|
||||||
# get songs previously indexed
|
# get songs previously indexed
|
||||||
self.songs = self.db.get_songs()
|
self.songs = self.db.get_songs()
|
||||||
self.songnames_set = set() # to know which ones we've computed before
|
self.songnames_set = set() # to know which ones we've computed before
|
||||||
if self.songs:
|
|
||||||
for song in self.songs:
|
for song in self.songs:
|
||||||
song_id = song[SQLDatabase.FIELD_SONG_ID]
|
song_name = song[self.db.FIELD_SONGNAME]
|
||||||
song_name = song[SQLDatabase.FIELD_SONGNAME]
|
|
||||||
self.songnames_set.add(song_name)
|
self.songnames_set.add(song_name)
|
||||||
print "Added: %s to the set of fingerprinted songs..." % song_name
|
print "Added: %s to the set of fingerprinted songs..." % song_name
|
||||||
|
|
||||||
def chunkify(self, lst, n):
|
def chunkify(self, lst, n):
|
||||||
"""
|
"""
|
||||||
|
@ -55,15 +49,9 @@ class Dejavu():
|
||||||
processes = []
|
processes = []
|
||||||
for i in range(nprocesses):
|
for i in range(nprocesses):
|
||||||
|
|
||||||
# need database instance since mysql connections shouldn't be shared across processes
|
|
||||||
sql_connection = SQLDatabase(
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_HOSTNAME),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_USERNAME),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_PASSWORD),
|
|
||||||
self.config.get(SQLDatabase.CONNECTION, SQLDatabase.KEY_DATABASE))
|
|
||||||
|
|
||||||
# create process and start it
|
# create process and start it
|
||||||
p = Process(target=self.fingerprint_worker, args=(files_split[i], sql_connection, output))
|
p = Process(target=self.fingerprint_worker,
|
||||||
|
args=(files_split[i], self.db, output))
|
||||||
p.start()
|
p.start()
|
||||||
processes.append(p)
|
processes.append(p)
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ class SQLDatabase(Database):
|
||||||
`%s` binary(10) not null,
|
`%s` binary(10) not null,
|
||||||
`%s` mediumint unsigned not null,
|
`%s` mediumint unsigned not null,
|
||||||
`%s` int unsigned not null,
|
`%s` int unsigned not null,
|
||||||
INDEX(%s),
|
PRIMARY KEY(%s),
|
||||||
UNIQUE(%s, %s, %s),
|
UNIQUE(%s, %s, %s),
|
||||||
FOREIGN KEY (%s) REFERENCES %s(%s) ON DELETE CASCADE
|
FOREIGN KEY (%s) REFERENCES %s(%s) ON DELETE CASCADE
|
||||||
) ENGINE=INNODB;""" % (
|
) ENGINE=INNODB;""" % (
|
||||||
|
@ -157,8 +157,8 @@ class SQLDatabase(Database):
|
||||||
fingerprints associated with them.
|
fingerprints associated with them.
|
||||||
"""
|
"""
|
||||||
with self.cursor() as cur:
|
with self.cursor() as cur:
|
||||||
cur.execute(self.CREATE_FINGERPRINTS_TABLE)
|
|
||||||
cur.execute(self.CREATE_SONGS_TABLE)
|
cur.execute(self.CREATE_SONGS_TABLE)
|
||||||
|
cur.execute(self.CREATE_FINGERPRINTS_TABLE)
|
||||||
cur.execute(self.DELETE_UNFINGERPRINTED)
|
cur.execute(self.DELETE_UNFINGERPRINTED)
|
||||||
|
|
||||||
def empty(self):
|
def empty(self):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from multiprocessing import Queue, Process
|
from multiprocessing import Queue, Process
|
||||||
from dejavu.database import SQLDatabase
|
from dejavu.database import SQLDatabase
|
||||||
import dejavu.fingerprint
|
import dejavu.fingerprint as fingerprint
|
||||||
from dejavu import Dejavu
|
from dejavu import Dejavu
|
||||||
from scipy.io import wavfile
|
from scipy.io import wavfile
|
||||||
import wave
|
import wave
|
||||||
|
@ -15,19 +15,16 @@ class BaseRecognizer(object):
|
||||||
|
|
||||||
def __init__(self, dejavu):
|
def __init__(self, dejavu):
|
||||||
self.dejavu = dejavu
|
self.dejavu = dejavu
|
||||||
self.Fs = dejavu.fingerprint.DEFAULT_FS
|
self.Fs = fingerprint.DEFAULT_FS
|
||||||
|
|
||||||
def _recognize(self, *data):
|
def _recognize(self, *data):
|
||||||
matches = []
|
matches = []
|
||||||
for d in data:
|
for d in data:
|
||||||
matches.extend(self.dejavu.find_matches(data, Fs=self.Fs))
|
matches.extend(self.dejavu.find_matches(d, Fs=self.Fs))
|
||||||
return self.dejavu.align_matches(matches)
|
return self.dejavu.align_matches(matches)
|
||||||
|
|
||||||
def recognize(self):
|
def recognize(self):
|
||||||
pass # base class does nothing
|
pass # base class does nothing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WaveFileRecognizer(BaseRecognizer):
|
class WaveFileRecognizer(BaseRecognizer):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue