示例#1
0
def import_submission(conn, submission):
    """
    Import the given submission into the main fingerprint database
    """
    with conn.begin():
        mbids = []
        if submission['mbid']:
            mbids.append(submission['mbid'])
        if submission['puid']:
            min_duration = submission['length'] - 15
            max_duration = submission['length'] + 15
            mbids.extend(
                find_puid_mbids(conn, submission['puid'], min_duration,
                                max_duration))
        logger.info("Importing submission %d with MBIDs %s", submission['id'],
                    ', '.join(mbids))
        matches = lookup_fingerprint(conn,
                                     submission['fingerprint'],
                                     submission['length'],
                                     TRACK_MERGE_TRESHOLD,
                                     FINGERPRINT_MERGE_TRESHOLD,
                                     fast=True)
        fingerprint = {
            'id': None,
            'track_id': None,
            'fingerprint': submission['fingerprint'],
            'length': submission['length'],
            'bitrate': submission['bitrate'],
            'source_id': submission['source_id'],
            'format_id': submission['format_id'],
        }
        if matches:
            match = matches[0]
            logger.debug(
                "Matches %d results, the top result (%s) is %d%% similar",
                len(matches), match['id'], match['score'] * 100)
            fingerprint['track_id'] = match['track_id']
            if match['score'] > FINGERPRINT_MERGE_TRESHOLD:
                fingerprint['id'] = match['id']
        if not fingerprint['track_id']:
            fingerprint['track_id'] = insert_track(conn)
            logger.info('Added new track %d', fingerprint['track_id'])
        if not fingerprint['id']:
            fingerprint['id'] = insert_fingerprint(conn, fingerprint)
            logger.info('Added new fingerprint %d', fingerprint['id'])
        for mbid in mbids:
            if insert_mbid(conn, fingerprint['track_id'], mbid):
                logger.info('Added MBID %s to track %d', mbid,
                            fingerprint['track_id'])
        update_stmt = schema.submission.update().where(
            schema.submission.c.id == submission['id'])
        conn.execute(update_stmt.values(handled=True))
        return fingerprint
示例#2
0
 def _handle_internal(self, params):
     response = {}
     response['results'] = results = []
     matches = lookup_fingerprint(self.conn, params.fingerprint, params.duration, 0.7, 0.3)
     result_map = {}
     for fingerprint_id, track_id, score in matches:
         if track_id in result_map:
             continue
         result_map[track_id] = result = {'id': track_id, 'score': score}
         results.append(result)
     if params.meta and result_map:
         self._inject_metadata(params.meta, result_map)
     return response
示例#3
0
def import_submission(conn, submission):
    """
    Import the given submission into the main fingerprint database
    """
    with conn.begin():
        mbids = []
        if submission['mbid']:
            mbids.append(submission['mbid'])
        if submission['puid']:
            min_duration = submission['length'] - 15
            max_duration = submission['length'] + 15
            mbids.extend(find_puid_mbids(conn, submission['puid'], min_duration, max_duration))
        logger.info("Importing submission %d with MBIDs %s",
            submission['id'], ', '.join(mbids))
        matches = lookup_fingerprint(conn,
            submission['fingerprint'], submission['length'],
            TRACK_MERGE_TRESHOLD, FINGERPRINT_MERGE_TRESHOLD, fast=True)
        fingerprint = {
            'id': None,
            'track_id': None,
            'fingerprint': submission['fingerprint'],
            'length': submission['length'],
            'bitrate': submission['bitrate'],
            'source_id': submission['source_id'],
            'format_id': submission['format_id'],
        }
        if matches:
            match = matches[0]
            logger.debug("Matches %d results, the top result (%s) is %d%% similar",
                len(matches), match['id'], match['score'] * 100)
            fingerprint['track_id'] = match['track_id']
            if match['score'] > FINGERPRINT_MERGE_TRESHOLD:
                fingerprint['id'] = match['id']
        if not fingerprint['track_id']:
            fingerprint['track_id'] = insert_track(conn)
            logger.info('Added new track %d', fingerprint['track_id'])
        if not fingerprint['id']:
            fingerprint['id'] = insert_fingerprint(conn, fingerprint)
            logger.info('Added new fingerprint %d', fingerprint['id'])
        for mbid in mbids:
            if insert_mbid(conn, fingerprint['track_id'], mbid):
                logger.info('Added MBID %s to track %d', mbid, fingerprint['track_id'])
        update_stmt = schema.submission.update().where(
            schema.submission.c.id == submission['id'])
        conn.execute(update_stmt.values(handled=True))
        return fingerprint