name:
src/python/load.py
-rw-r--r--
1468
1import warnings
2import glob
3warnings.filterwarnings("ignore")
4from fingerprinter.reader import read
5from fingerprinter.fingerprint import Fingerprinter
6from fingerprinter.fingerprint_record import FingerprintRecord
7from database.fingerprint_db import FingerprintDatabase
8from etc.util import get_file_name, get_args_for_input_directory
9
10DESCRIPTION = """
11This script will load all .wav files in a given directory (-d) and fingerprint them, persisting the fingerprints to
12a MySQL database. All .wav files should be in standard season-episode format, e.g. "s01e01".
13"""
14PLOT_FINGERPRINT = False
15
16
17if __name__ == "__main__":
18 args = get_args_for_input_directory(DESCRIPTION)
19 print("Loading and fingerprinting .wav files from directory {}".format(args.directory))
20 db = FingerprintDatabase()
21 f = Fingerprinter(plot_fingerprint=PLOT_FINGERPRINT)
22 for filename in glob.glob(args.directory + "*.wav"):
23 print("Fingerprinting file: {}".format(filename))
24 episode_name = get_file_name(filename)
25 channels, frame_rate = read(filename)
26 for _, channel in enumerate(channels):
27 hash_tuples = [x for x in f.fingerprint(channel, frame_rate)]
28 print("hash count: {}".format(len(hash_tuples)))
29 for hash_tuple in hash_tuples:
30 hash_id = hash_tuple[1]
31 playhead = hash_tuple[0]
32 print("Inserting fingerprint: {}:{}:{}".format(hash_id, episode_name, playhead))
33 db.insert(FingerprintRecord(hash_id, episode_name, playhead))