要使用 Python 实现声纹和声音识别并集成到会议记录程序中,可以按照以下步骤进行:

1. 安装必要的库

需要安装一些 Python 库,如 SpeechRecognition 用于语音识别,pyAudio 用于音频输入,resemblyzer 用于声纹识别。可以使用以下命令进行安装:

pip install SpeechRecognition pyaudio resemblyzer

2. 实现声纹和声音识别并集成会议记录程序

import speech_recognition as sr
from resemblyzer import preprocess_wav, VoiceEncoder
from pathlib import Path
import numpy as np

# 初始化语音识别器
r = sr.Recognizer()

# 初始化声纹编码器
encoder = VoiceEncoder()

# 存储已知声纹和对应的说话人名称
known_speakers = {}
# 存储会议记录
meeting_records = []

def load_known_speakers(speaker_folder):
    """
    加载已知说话人的声纹
    :param speaker_folder: 存储说话人音频文件的文件夹路径
    """
    speaker_folder = Path(speaker_folder)
    for speaker_dir in speaker_folder.iterdir():
        if speaker_dir.is_dir():
            speaker_name = speaker_dir.name
            wav_files = list(speaker_dir.glob("*.wav"))
            embeddings = []
            for wav_file in wav_files:
                wav = preprocess_wav(wav_file)
                embedding = encoder.embed_utterance(wav)
                embeddings.append(embedding)
            if embeddings:
                known_speakers[speaker_name] = np.mean(embeddings, axis=0)

def recognize_speaker(audio):
    """
    识别说话人
    :param audio: 音频数据
    :return: 说话人名称
    """
    wav = preprocess_wav(audio.get_wav_data())
    embedding = encoder.embed_utterance(wav)
    best_similarity = -1
    best_speaker = None
    for speaker, known_embedding in known_speakers.items():
        similarity = np.dot(embedding, known_embedding)
        if similarity > best_similarity:
            best_similarity = similarity
            best_speaker = speaker
    return best_speaker

def record_meeting():
    """
    记录会议内容
    """
    with sr.Microphone() as source:
        print("开始记录会议,请说话...")
        while True:
            try:
                audio = r.listen(source)
                speaker = recognize_speaker(audio)
                if speaker is None:
                    speaker = "未知说话人"
                text = r.recognize_google(audio, language='zh-CN')
                record = f"{speaker}: {text}"
                meeting_records.append(record)
                print(record)
            except sr.UnknownValueError:
                print("无法识别语音,请重新说话。")
            except sr.RequestError as e:
                print(f"请求错误; {e}")
            except KeyboardInterrupt:
                print("会议记录结束。")
                break

def save_meeting_records(file_path):
    """
    保存会议记录到文件
    :param file_path: 文件路径
    """
    with open(file_path, 'w', encoding='utf-8') as f:
        for record in meeting_records:
            f.write(record + '\n')

if __name__ == "__main__":
    # 加载已知说话人的声纹
    load_known_speakers("known_speakers")
    # 开始记录会议
    record_meeting()
    # 保存会议记录
    save_meeting_records("meeting_records.txt")

3. 代码说明

  1. 加载已知说话人的声纹load_known_speakers 函数用于加载已知说话人的声纹,将每个说话人的音频文件的声纹进行平均,存储在 known_speakers 字典中。
  2. 识别说话人recognize_speaker 函数用于识别当前说话人的身份,通过计算当前音频的声纹与已知声纹的相似度,找出最相似的说话人。
  3. 记录会议内容record_meeting 函数使用麦克风录制音频,调用 recognize_speaker 函数识别说话人,使用 SpeechRecognition 库将音频转换为文本,并将说话人信息和文本记录到 meeting_records 列表中。
  4. 保存会议记录save_meeting_records 函数将 meeting_records 列表中的内容保存到指定的文件中。

4. 注意事项

  • 需要将已知说话人的音频文件存储在 known_speakers 文件夹中,每个说话人的音频文件放在一个单独的子文件夹中,子文件夹的名称即为说话人的名称。
  • 音频文件必须为 .wav 格式。
  • 语音识别使用的是 Google 的语音识别服务,需要确保网络连接正常。

更多推荐