Tensorflow声紋認識話者認識

#はじめ
にこの章では、Tensorflowを使用して簡単な声紋認識モデルを実装する方法を紹介します。まず、音声分類に精通している必要があります。声紋認識モデルをトレーニングします。このモデルを通じて、話者を特定できます。音声検証を必要とする一部のアプリケーションで使用されます。プロジェクト。違いは、このプロジェクトではArcFace Loss、ArcFace Loss:Additive Angular Margin Loss(Additive AngleInterval Loss関数)を使用し、特徴ベクトルと重みを正規化し、角度間隔mをθに追加し、角度間隔が余弦間隔よりも大きいことです。 。角度の影響はより直接的です。

使用環境:

 -Python3.7
 -Tensorflow 2.3.0

import json
import os

from pydub import AudioSegment
from tqdm import tqdm

from utils.reader import load_audio


# 生成数据列表
def get_data_list(infodata_path, list_path, zhvoice_path):
    with open(infodata_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    f_train = open(os.path.join(list_path, 'train_list.txt'), 'w')
    f_test = open(os.path.join(list_path, 'test_list.txt'), 'w')

    sound_sum = 0
    speakers = []
    speakers_dict = {}
    for line in tqdm(lines):
        line = json.loads(line.replace('\n', ''))
        duration_ms = line['duration_ms']
        if duration_ms < 1300:
            continue
        speaker = line['speaker']
        if speaker not in speakers:
            speakers_dict[speaker] = len(speakers)
            speakers.append(speaker)
        label = speakers_dict[speaker]
        sound_path = os.path.join(zhvoice_path, line['index'])
        save_path = "%s.wav" % sound_path[:-4]
        if not os.path.exists(save_path):
            try:
                wav = AudioSegment.from_mp3(sound_path)
                wav.export(save_path, format="wav")
                os.remove(sound_path)
            except Exception as e:
                print('数据出错:%s, 信息:%s' % (sound_path, e))
                continue
        if sound_sum % 200 == 0:
            f_test.write('%s\t%d\n' % (save_path.replace('\\', '/'), label))
        else:
            f_train.write('%s\t%d\n' % (save_path.replace('\\', '/'), label))
        sound_sum += 1

    f_test.close()
    f_train.close()


# 删除错误音频
def remove_error_audio(data_list_path):
    with open(data_list_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    lines1 = []
    for line in tqdm(lines):
        audio_path, _ = line.split('\t')
        try:
            spec_mag = load_audio(audio_path)
            lines1.append(line)
        except Exception as e:
            print(audio_path)
            print(e)
    with open(data_list_path, 'w', encoding='utf-8') as f:
        for line in lines1:
            f.write(line)


if __name__ == '__main__':
    get_data_list('dataset/zhvoice/text/infodata.json', 'dataset', 'dataset/zhvoice')
    remove_error_audio('dataset/train_list.txt')
    remove_error_audio('dataset/test_list.txt')

後出クラス類似如下:
`` `
-----------構成引数-----------
audio_db:audio_db
input_shape:(257、257、1)
model_path:models / infer_model.h5
しきい値:0.7
----------------------------------------------- -
モデル: "functional_1"
_________________________________________________________________
レイヤー(タイプ)出力形状パラメーター#   
=================================== ==============================
resnet50v2_input(InputLayer [(None、257、257、1)] 0         
_________________________________________________________________
resnet50v2(機能) (なし、2048)23558528  
_________________________________________________________________
batch_normalization(BatchNo(None、2048)8192      
======================================== =========================
合計パラメータ:23,566,720トレーニング可能なパラメータ:23,517,184
トレーニング不可能なパラメータ
:49,536
_________________________________________________________________

ロードされたLiDakangオーディオ。
ロードされたShaRuijinオーディオ。
機能を選択してください。0は音声を声紋ライブラリに登録し、1は声紋認識を実行します。0Enter
キーを押して録音を開始し、録音中に3秒間:
録音を開始します。 ...。
録音が終了しました!
オーディオユーザーの名前を入力してください:Ye Yu Piao Ling
機能を選択してください。0は音声を声紋ライブラリに登録し、1は声紋認識を実行します。1Enter
キーを押します。録音を開始するには、録音の3秒間:録音
を開始します...
録音は終了しました!
スピーチを認識した人はYe Yu Piao Lingで、類似点は0.920434
`` `

ダウンロードリンク:

https://download.csdn.net/download/babyai996/85090063

おすすめ

転載: blog.csdn.net/babyai996/article/details/124022410