diff --git a/README.md b/README.md index 2062adb..8b4f9b4 100755 --- a/README.md +++ b/README.md @@ -100,6 +100,19 @@ An example configuration is as follows: >>> djv = Dejavu(config) ``` +## Tuning + +Inside `fingerprint.py`, you may want to adjust following parameters (some values are given below). + + FINGERPRINT_REDUCTION = 30 + PEAK_SORT = False + DEFAULT_OVERLAP_RATIO = 0.4 + DEFAULT_FAN_VALUE = 10 + DEFAULT_AMP_MIN = 15 + PEAK_NEIGHBORHOOD_SIZE = 30 + +These parameters are described in the `fingerprint.py` in detail. Read that in-order to understand the impact of changing these values. + ## Recognizing There are two ways to recognize audio using Dejavu. You can recognize by reading and processing files on disk, or through your computer's microphone. diff --git a/dejavu/fingerprint.py b/dejavu/fingerprint.py index a8a5aca..95c0076 100755 --- a/dejavu/fingerprint.py +++ b/dejavu/fingerprint.py @@ -12,8 +12,8 @@ IDX_TIME_J = 1 ###################################################################### # Sampling rate, related to the Nyquist conditions, which affects -# the range frequencies we can detect. -DEFAULT_FS = 44100 +# the range frequencies we can detect. +DEFAULT_FS = 44100 ###################################################################### # Size of the FFT window, affects frequency granularity @@ -23,15 +23,15 @@ DEFAULT_WINDOW_SIZE = 4096 # Ratio by which each sequential window overlaps the last and the # next window. Higher overlap will allow a higher granularity of offset # matching, but potentially more fingerprints. -DEFAULT_OVERLAP_RATIO = 0.5 +DEFAULT_OVERLAP_RATIO = 0.5 ###################################################################### # Degree to which a fingerprint can be paired with its neighbors -- -# higher will cause more fingerprints, but potentially better accuracy. -DEFAULT_FAN_VALUE = 15 +# higher will cause more fingerprints, but potentially better accuracy. +DEFAULT_FAN_VALUE = 15 ###################################################################### -# Minimum amplitude in spectrogram in order to be considered a peak. +# Minimum amplitude in spectrogram in order to be considered a peak. # This can be raised to reduce number of fingerprints, but can negatively # affect accuracy. DEFAULT_AMP_MIN = 10 @@ -39,13 +39,13 @@ DEFAULT_AMP_MIN = 10 ###################################################################### # Number of cells around an amplitude peak in the spectrogram in order # for Dejavu to consider it a spectral peak. Higher values mean less -# fingerprints and faster matching, but can potentially affect accuracy. +# fingerprints and faster matching, but can potentially affect accuracy. PEAK_NEIGHBORHOOD_SIZE = 20 ###################################################################### -# Thresholds on how close or far fingerprints can be in time in order +# Thresholds on how close or far fingerprints can be in time in order # to be paired as a fingerprint. If your max is too low, higher values of -# DEFAULT_FAN_VALUE may not perform as expected. +# DEFAULT_FAN_VALUE may not perform as expected. MIN_HASH_TIME_DELTA = 0 MAX_HASH_TIME_DELTA = 200 @@ -56,7 +56,7 @@ MAX_HASH_TIME_DELTA = 200 PEAK_SORT = True ###################################################################### -# Number of bits to throw away from the front of the SHA1 hash in the +# Number of bits to throw away from the front of the SHA1 hash in the # fingerprint calculation. The more you throw away, the less storage, but # potentially higher collisions and misclassifications when identifying songs. FINGERPRINT_REDUCTION = 20 @@ -137,7 +137,7 @@ def generate_hashes(peaks, fan_value=DEFAULT_FAN_VALUE): [(e05b341a9b77a51fd26, 32), ... ] """ fingerprinted = set() # to avoid rehashing same pairs - + if PEAK_SORT: peaks.sort(key=itemgetter(1))