Source code for sample_id.main

"""Acoustic fingerprinting for Sample Identification"""
import logging
from typing import Iterable

import numpy as np

from sample_id import ann
from sample_id.ann import annoy
from sample_id.fingerprint import fingerprint
from sample_id.io import Track

logger = logging.getLogger(__name__)


[docs]def train_keypoints( tracks: Iterable[Track], hop_length=256, octave_bins=36, n_octaves=7, fmin=50, sr=22050, algorithm="annoy", dedupe=False, save=None, save_spec=False, **kwargs, ): # TODO: fix this settings garbage settings = locals().copy() for key in settings["kwargs"]: settings[key] = settings["kwargs"][key] del settings["kwargs"] del settings["tracks"] logger.info("Settings: {}".format(settings)) spectrograms = {} # keypoints = [] # descriptors = [] model_tracks = {} fingerprints = [] for track in tracks: track_id = str(track) model_tracks[track_id] = track fp = fingerprint.from_file(track.path, track_id, sr, dedupe=dedupe, **settings) fingerprints.extend(fp) # if save_spec: # path = save_spectrogram(fp.spectrogram, track_id, save) # spectrograms[track_id] = path # keypoints.extend(fp.keypoints) # descriptors.extend(fp.descriptors) # descriptors = np.vstack(descriptors) # matcher = annoy.AnnoyMatcher.create(descriptors, algorithm=algorithm) matcher = annoy.AnnoyMatcher.from_fingerprints(fingerprints) # descriptors = None # model = Model(matcher, keypoints, settings, tracks=model_tracks) # model.spectrograms = spectrograms # if save: # save_model(model, save) return matcher