Reconocimiento de huellas de voz Tensorflow Reconocimiento de hablantes

# Prefacio
Este capítulo presenta cómo usar Tensorflow para implementar un modelo simple de reconocimiento de huellas de voz. Primero, debe estar familiarizado con la clasificación de audio. Entrenamos un modelo de reconocimiento de huellas de voz. A través de este modelo, podemos identificar quién es el hablante. Puede ser se utiliza en algunas aplicaciones que requieren verificación de audio. La diferencia es que este proyecto utiliza ArcFace Loss, ArcFace loss: Additive Angular Margin Loss (función de pérdida de intervalo angular aditivo), normaliza el vector de características y el peso, agrega el intervalo de ángulo m a θ, y el intervalo de ángulo es mayor que el intervalo de coseno El efecto del ángulo es más directo.

Ambiente de uso:

 -Python 3.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')

输出类似如下:
```
----------- Argumentos de configuración -----------
audio_db: audio_db
input_shape: (257, 257, 1)
model_path: models/infer_model.h5
umbral: 0.7
----------------------------------------------- -
Modelo: "funcional_1"
_________________________________________________________________
Capa (tipo) Parámetro de forma de salida #   
================================== ===============================
resnet50v2_input (InputLayer [(Ninguno, 257, 257, 1)] 0         
_________________________________________________________________
resnet50v2 (Funcional) (Ninguno, 2048) 23558528  
_________________________________________________________________
lote_normalización (BatchNo (Ninguno, 2048) 8192      
======================================== =========================
Parámetros totales: 23 566 720
Parámetros entrenables: 23 517 184 Parámetros
no entrenables: 49 536
_________________________________________________________________

Audio de Li Dakang
cargado. Audio de Sha Ruijin cargado.
Seleccione una función, 0 es para registrar audio en la biblioteca de huellas de voz, 1 es para realizar el reconocimiento de huellas de voz: 0
Presione la tecla Intro para comenzar a grabar, durante la grabación 3 segundos:
comience a grabar. ...
.La grabación ha terminado
el nombre del usuario de audio: Ye Yu Piao Ling
Seleccione la función, 0 es para registrar el audio en la biblioteca de huellas de voz, 1 es para realizar el reconocimiento de huellas de voz: 1
Presione la tecla Enter para iniciar la grabación, durante los 3 segundos de grabación:
Iniciar grabación... ¡La
grabación ha terminado!
La persona que reconoció el discurso es: Ye Yu Piao Ling, y la similitud es: 0.920434
```

Enlace de descarga:

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

Supongo que te gusta

Origin blog.csdn.net/babyai996/article/details/124022410
Recomendado
Clasificación