blog-acoustic-fingerprinting
ARCHIVED - acoustic fingerprinting television shows with python
git clone https://git.vogt.world/blog-acoustic-fingerprinting.git
Log | Files | README.md
← All files
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))