Python Forum
Fingerprint audio - chromaprint and get fingerprint
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Fingerprint audio - chromaprint and get fingerprint
#1
Hi everyone,
as written in the presentation, I'm new to the forum. I'm trying to compare two audio tracks. I searched a lot on the web finding old guides like Dejavu:
Dejavu Github

I also found a very simple code that works in part, which is:

"""
Finding fingerprint and calculating simple fuzzy similarity
@author [email protected]
Prerequisites on Ubuntu:
* Python 2.7 and pip
* FFMPEG `sudo apt install ffmpeg`
* AcoustID fingerprinter `sudo apt install acoustid-fingerprinter`
* PyAcoustID `pip install pyacoustid`
* FuzzyWuzzy `pip install fuzzywuzzy[speedup]`
"""


import acoustid
import sys
import os
import chromaprint
import numpy as np
import matplotlib.pyplot as plt
from fuzzywuzzy import fuzz


DIR_DATABASE = '/Desktop/music/full'
DIR_SAMPLES = '/Desktop/music/partial'


def get_fingerprint(filepath):
    """
    Get fingerprint (list of signed integer), version, duration
    """
    duration, fp_encoded = acoustid.fingerprint_file(filepath)
    fp, version = chromaprint.decode_fingerprint(fp_encoded)
    return fp, version, duration



def build_fingerprint_database(dirpath, file_ext='.mp3'):
    """
    Build database from directory of audio files
    """
    database = {}
    print('Processing {}..'.format(dirpath))
    for f in os.listdir(dirpath):
        path = os.path.join(dirpath, f)
        name, ext = os.path.splitext(f)
        if os.path.isfile(path) and ext == file_ext:
            print('Getting fingerprint from database item: {}..'.format(f))
            database[f], version, duration = get_fingerprint(path)
    return database


def plot_fingerprints(db):
    """
    Visualize fingerprints in database
    """
    fig = plt.figure()
    numrows = len(db)
    plot_id = 1
    for name, fp in db.iteritems():
        # single column grid
        a = fig.add_subplot(numrows, 1, plot_id)
        imgplot = plt.imshow(get_fingerprint_bitmap(fp))
        a.set_title(name)
        plot_id += 1
    plt.show()


def get_fingerprint_bitmap(fp):
    """
    Plot list of uint32 as (32, len(list)) bitmap
    """
    bitmap = np.transpose(np.array([[b == '1' for b in list('{:32b}'.format(i & 0xffffffff))] for i in fp]))
    return bitmap


if __name__ == '__main__':

    # load database and samples
    database = build_fingerprint_database(DIR_DATABASE)
    samples = build_fingerprint_database(DIR_SAMPLES)
    print("inoltro path alla funzione build_fingerprint_database")
    print('\n')

    # find best match of each samples in database
    for sample, sample_fp in samples.iteritems():
        print('Similarity score of "{}":'.format(sample))
        best_match = None
        for name, fp in database.iteritems():
            similarity = fuzz.ratio(sample_fp, fp)
            if not best_match or best_match['score'] < similarity:
                best_match = {
                    'score': similarity,
                    'name': name
                }
            print('{} {}%'.format(name, similarity))
        print('Best match: {name} ({score}%)\n'.format(**best_match))

    # plot database
    plot_fingerprints(database)
It reads the audio tracks in the "/ full" directory but the function call does not work: "get_fingerprint(filepath)".

Error:
/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/bin/python /Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py Processing /Users/alessandro/Desktop/music/full.. Getting fingerprint from database item: Emergency.mp3.. Traceback (most recent call last): File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 201, in fingerprint fper = chromaprint.Fingerprinter() AttributeError: module 'chromaprint' has no attribute 'Fingerprinter' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 81, in <module> database = build_fingerprint_database(DIR_DATABASE) File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 50, in build_fingerprint_database database[f], version, duration = get_fingerprint(path) File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 33, in get_fingerprint duration, fp_encoded = acoustid.fingerprint_file(filepath) File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 321, in fingerprint_file return _fingerprint_file_audioread(path, maxlength) File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 264, in _fingerprint_file_audioread fp = fingerprint(f.samplerate, f.channels, iter(f), maxlength) File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 212, in fingerprint except chromaprint.FingerprintError: AttributeError: module 'chromaprint' has no attribute 'FingerprintError' Process finished with exit code 1
Cannot find the Fingerprint attribute in the Chromaprint module. Tested with both PyCharm and terminal, with Python version 2.x and Python 3.x the result is the same. All packages are installed as commented in the code.

I await your kind help
Reply


Messages In This Thread
Fingerprint audio - chromaprint and get fingerprint - by alessandro87gatto - Apr-12-2019, 07:51 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  fingerprint similarity audio microphone alessandro87gatto 1 3,262 May-03-2019, 01:33 PM
Last Post: alessandro87gatto

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020