使用 Python 实现声纹和声音识别并集成到会议记录程序中

devtools/2025/2/28 5:21:28/

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

1. 安装必要的库

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

pip install SpeechRecognition pyaudio resemblyzer

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

python">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.namewav_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 = -1best_speaker = Nonefor speaker, known_embedding in known_speakers.items():similarity = np.dot(embedding, known_embedding)if similarity > best_similarity:best_similarity = similaritybest_speaker = speakerreturn best_speakerdef 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("会议记录结束。")breakdef 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 的语音识别服务,需要确保网络连接正常。

http://www.ppmy.cn/devtools/163265.html

相关文章

网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件

一、前言 最近几个月里,我一直在学习网络爬虫方面的知识,每有收获都会将所得整理成文发布,不知不觉已经发了7篇日志了: 网络爬虫学习:从百度搜索结果抓取标题、链接、内容,并保存到xlsx文件中 网络爬虫学…

代码随想录刷题day29|(栈与队列篇:队列)225.用队列实现栈

目录 一、队列基本知识 二、队列在Java中的实现 1.Queue 2.Deque ①实现普通队列 ②实现栈 ③实现双端队列 3.基于底层数据结构 4.组合模式 三、相关算法题目 思路 代码 四、栈和队列总结 一、队列基本知识 队列只能在队尾添加元素,在队头删除元素&a…

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…

【PromptCoder】使用 package.json 生成 cursorrules

【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中,效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器,正在彻底改变我们的编程方式。但如…

智合同:数字化转型下的法律科技新引擎

在数字化转型的浪潮下,人工智能(AI)技术正深刻改变各行各业的运作方式,法律领域也不例外。作为法律科技的重要组成部分,“智合同”(合同智能应用品牌,数字化工具)正在成为企业降本增…

网络安全体系

网络安全体系 目前计算机网络面临的主要风险包括利用系统漏洞、暴力破解密码、病毒和木马、系统扫描、DoS、网络钓鱼和中间人攻击(MITM)等。因此一个良好的网络安全体系对企业至关重要,如下所示: 1 物理安全:需要一个…

推送项目 之 解决冲突

文章目录 为什么会发生冲突?如何解决这些冲突?1. **查看冲突文件**2. **解决二进制文件冲突**3. **解决文本文件冲突**4. **标记冲突已解决**5. **完成合并**6. **推送更改** 注意事项总结 问题:我们在git pusll拉取远程仓库的代码到本地对比…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…