1

fpcalc を使用して、サウンド クリップからオーディオ フィンガープリントを取得しています。それらは次のようになります。

AQAAE9GSKVOkLEOy5PlQE0d9fId7HD-aHD_xhMeRrKORLseX44etHD8AYcAgSrEjDKFAsIGIFAJZ

AQAAE1M9RUkW1NGFH0d4HcnyJIlw4UW17HiyPMHt4B18EX2go9qJTz_eJzgBgBg4CphigUCMGCWFAcAw

AQAAAA

サウンドを録音して指紋を付けると、次のようになります。

AQAAE5ISLVOkTEF-QfURpkGZHHeeIpehB3HMoRKaikbTKHvQNnlwpIdOxNHHY_IPJttlAECEI8BBAAgFAiigAA

今、データベースを見て、次のようにレーベンシュタイン距離を使用して最も近い一致を見つけます。

def levenshtein_distance(first, second):
    """Find the Levenshtein distance between two strings."""
    if len(first) > len(second):
        first, second = second, first
    if len(second) == 0:
        return len(first)
    first_length = len(first) + 1
    second_length = len(second) + 1
    distance_matrix = [[0] * second_length for x in range(first_length)]
    for i in range(first_length):
       distance_matrix[i][0] = i
    for j in range(second_length):
       distance_matrix[0][j]=j
    for i in xrange(1, first_length):
        for j in range(1, second_length):
            deletion = distance_matrix[i-1][j] + 1
            insertion = distance_matrix[i][j-1] + 1
            substitution = distance_matrix[i-1][j-1]
            if first[i-1] != second[j-1]:
                substitution += 1
            distance_matrix[i][j] = min(insertion, deletion, substitution)
    return distance_matrix[first_length-1][second_length-1]

私が与えたサンプルとサウンドがうまく一致しないため、良い結果が得られません。

私はこれを正しくやっていますか?より良い指紋ライブラリはありますか? 私はpythonまたはrubyを使用しています..

口笛を鳥の鳴き声に合わせようとしています。

4

3 に答える 3

2

まず、コード文字列を直接比較しないでください。pfcalc がどのアルゴリズムに基づいているかはわかりませんが、オーディオ入力の各フレームでいくつかのオーディオ機能 (前述のエネルギー、mfcc など) を測定する可能性が非常に高いです。これらの機能は、文字列 (または base64 文字列) として変換される整数値の場合があります。したがって、これらの文字列の値を比較しても意味がありません (同一のオーディオ コンテンツを識別しようとしている場合を除く)。

「口笛を鳥の鳴き声に合わせようとしています」と何をしようとしているのかよくわかりませんが、「ほぼ同じ」と認識されるように設計されているため、音声指使いでは解決されないと思います。オーディオコンテンツ。

于 2013-08-24T13:10:33.897 に答える
1

指紋の方法は、必要なものにはうまく機能しません!

この種の問題を解決するために、メル周波数ケプストラム係数 (MFFC) を見てきました...

記述子のセット (平均不規則性、平均重心、標準偏差不規則性、MFCC) を抽出し、1 つの分類方法 (ランダム フォレスト、MLP) を使用する方法は他にもあります。

于 2013-07-30T13:44:16.553 に答える