Dejavuベースのオーディオ認識

2333 ワード

オーディオ認識は、数秒目から未知のオーディオがどの音楽に属しているかを認識することができる.現在、オーディオ識別は主にオーディオ指紋技術を用いており、オーディオ指紋技術は、特定のアルゴリズムによって、大量の音声サンプルを識別したり、データベース内のサンプルの位置を追跡したりするために、オーディオにおけるユニークなデジタル特徴を識別子の形で抽出する.dejavuは非常に良いオーディオ指紋のオープンソースプロジェクトです.
プロジェクトのアドレス:https://github.com/worldveil/dejavu
dejavuは、オーディオをFFT(高速フーリエ変換)により周波数領域に変換し、周波数領域での信号のピークを取得し、これらのピークをハッシュ関数により指紋を生成する.認識が必要なオーディオは通常、1つの歌の一部の断片にすぎないため、この指紋を生成する過程は、1つの歌の1つの小さな部分の窓を追加します.具体的な原理は以下のとおりです.
アルゴリズムの原理:https://willdrevo.com/fingerprinting-and-audio-recognition-with-python/
次のdemoでdejavuの使用について説明します.
1、dejavuはpython 2に基づいているので、注意が必要です.
2、コードをクローンし、requirementsに従う.txtのコンテンツは対応するライブラリをインストールするとともに、オペレーティングシステムはVCForPython 27をインストールする必要がある.msi(対応するバージョンに基づいてダウンロード);
3、dejavuのデータベースは現在mysqlデータベースのみをサポートしているので、mysqlをインストールし、dejavuにインストールする必要がある.cnf.SAMPLEプロファイルにmysql接続パラメータを設定します(ブロガーはmysql 5.7を使用しています).
4、demoコードのテスト
# -*- coding: UTF-8 -*-
import warnings
import json
from dejavu import Dejavu
from dejavu.recognize import FileRecognizer, MicrophoneRecognizer

class Index:
	def __init__(self):
		warnings.filterwarnings("ignore")
		with open("dejavu.cnf.SAMPLE") as f:
			config = json.load(f)
		
		self.djv = Dejavu(config)	

	#        
	def sava_fingerprint(self):
		self.djv.fingerprint_directory("mp3", [".mp3"])

	#    
	def dis_fingerprint(self):
		song = self.djv.recognize(FileRecognizer, "mp3test/testm1.mp3")
		print "result: %s
" % song if __name__ == "__main__": ind = Index() ind.dis_fingerprint()

まずコンストラクション関数でプロファイルを読み込み、構成によってDejavuオブジェクトを初期化します.fingerprint_directory関数はオーディオファイルを指紋抽出し、抽出した指紋をデータベースに格納します.関数の最初のパラメータはファイル位置で、2番目のパラメータは抽出する必要があるオーディオファイルフォーマットです.recognize関数はオーディオの識別を行い、2番目のパラメータは識別する必要があるオーディオファイルであり、識別結果は以下の通りである.
result: {'song_id': 2, 'song_name': 'test2', 'file_sha1': 'A19AC6B8BA1DC564C6C079B714861D68A505E010', 'confidence': 2097, 'offset_seconds': 100.12444, 'match_time': 4.577000141143799, 'offset': 2156}

song_idはデータベースの歌のid,song_nameは歌の名前、offset_secondsは、オーディオが曲にあることが認識された数秒目である.
オーディオ指紋技術は記憶と性能を比較して消費し、1曲の数Mの歌で、データベースで生成された指紋は20万本に達することができる.そのため、実際の応用過程では、指紋の検索を最適化する必要があり、データベースも大きなデータベースアーキテクチャに基づいている必要があります.