Python世界:基于PESQ的自动化语音打分脚本实践

news/2024/10/4 18:40:36/文章来源:https://blog.csdn.net/qq_17256689/article/details/142185696

Python世界:基于PESQ的自动化语音打分脚本实践

    • 任务背景
    • Python实现
    • 代码讲解
    • 本文总结

任务背景

音频任务中,有时需对处理后的语音信号进行客观打分,以评估算法效果。这里提供一种基于PESQ的自动化语音打分脚本,提高效率。

Python实现

炒菜前,基本材料有:

  • 处理前的wav文件
  • 处理后的wav文件
  • pesq可执行文件

接着,先找个网上能用的炒菜食谱步骤,比如以下手动指令,确保能用:

8kHz语音打分参考指令:

pesq.exe +8000 ref.wav deg.wav

16kHz语音打分参考指令:

pesq.exe +16000 +wb ref.wav deg.wav

然后,用Python模拟批量手动处理过程,设计编码思路:

  • 读取输入wav参数,若非16k/8kHz及mono音频,直接退出
  • 读取输出wav参数,前缀需与输入一致,读参
  • 判别是否跟输入wav参数一致,不一致,直接退出
  • pesq入参处理
  • 传参运行pesq
  • 生成打分结果txt

最后,进行编程调试。

代码讲解

第1步,编写处理单个序列的pesq指令函数:

import os
import wavedef pesq_one_seq(path_wav_in, path_wav_out, path_pesq_exe):# 检验wav参数with wave.open(path_wav_in, "rb") as wav_in:sample_rate_in = wav_in.getframerate()ch_in = wav_in.getnchannels()if (sample_rate_in != 8000 and sample_rate_in != 16000):print(wav_in, "{} sr not supported!".format(sample_rate_in))returnif (ch_in != 1):print(wav_in, "{} ch not supported!".format(ch_in))returnwith wave.open(path_wav_out, "rb") as wav_out:sample_rate_out = wav_out.getframerate()ch_out = wav_out.getnchannels()if (sample_rate_out != sample_rate_in or ch_in != ch_out):print("wav in/out not same! in: {0}, {1}, out: {2}, {3}".format(sample_rate_in, ch_in, sample_rate_out, ch_out))return# exe入参处理param_sr = "+" + str(sample_rate_in)if (sample_rate_in == 16000):param_bw = "+wb"else:param_bw = " "param = "{0} {1} {2} {3} {4}".format(path_pesq_exe, param_sr, param_bw, path_wav_in, path_wav_out)print(param)# exe运行os.system(param)time.sleep(5)return

第2步,编写批量运行pesq的调度逻辑:

def run_exe_pesq():path_pesq_exe = r"E:\pesq.exe"path_wav_in = r'E:\wav_in'path_wav_out = r"E:\wav_out"namelist = os.listdir(path_wav_in)name_wav_out = os.listdir(path_wav_out)for file_name in namelist:for name_out in name_wav_out:name_in_rm_postfix = file_name.split('.')[0]if name_in_rm_postfix in name_out:wav_in = os.path.join(path_wav_in, file_name)wav_out = os.path.join(path_wav_out, name_out)pesq_one_seq(wav_in, wav_out, path_pesq_exe)return

第3步,编写主调:

if __name__ == '__main__':print('start!')# 正式运行run_exe_pesq()print('done!')

本文总结

本案例实现了利用PESQ对指定目录下的wav序列进行批量打分,并输出打分结果。

使用时,需注意:

  • 仅支持wav输入,需提前构建in/out目录
  • 不支持非8kHz/16kHz音源
  • 序列命名条件需满足输入wav名字作为输出名字的前缀
    • 比如,输入参考序列test.wav,输出后的可以为test_out_n.wav

参考链接

  1. Python版PESQ评分实现
  2. PESQ语音质量测试
  3. PESQ和POLQA测试工具:link1,link2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ldbm.cn/p/441714.html

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 基于SpringBoot的课程教学平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

架构模式:MVC

引言 MVC,即 Model(模型)-View(视图)-Controller(控制器),是广泛应用于交互式系统中的典型架构模式,尤其在 GUI 和 Web 应用中。 MVC 的概念源自 GOF(Gang …

rtems 5.3 qemu realview_pbx_a9 环境搭建:bsp 编译

参考文章 rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链 开发环境 windows 10 64 位 VMware Workstation Pro 16 rtems-5.3 发布代码 rtems-5.3 arm gcc 编译工具链(由 rtems-source-builder-5.3 手动编译生成) 说明…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组(变成类似list列表的形状)重复一个数组——np.tile 分组聚集——pandas.…

学习大数据DAY56 业务理解和第一次接入

作业1 1 了解行业名词 ERP CRM OA MES WMS RPA SAAS 了解每个系统的功能和应用 ERP 系统,(Enterprise Resource Planning,企业资源计划系统):ERP 系统 是一种用于管理企业各类资源的软件系统,包括生产管理…

CSS 布局技巧实现元素左右排列

开发中经常会遇到一个场景,使用 CSS 实现一个子元素靠右,其余子元素靠左。 这里总结一下常见的实现方式。 1. flex 布局 flexbox 是一种常用且灵活的布局方式,适合完成这种需求。将父容器设置为 display: flex,然后使用 margin…

未来工业,新质赋能!迈威通信邀您共赴智造盛宴

亲爱的未来智造家们,注意啦!9月24日至28日,一场工业界的璀璨盛会——第24届中国国际工业博览会,即将在国家会展中心(上海)璀璨启幕! 这不仅仅是一场展会,更是一次探索工业未来、体验智能制造魅力的绝佳机会&#xff01…

Lesson08---string类(3)

1.find_first_of string里面的find成员函数就是找一个字符串然后返回第一个字符 find_first_of函数看个例子就很快就能明白 它返回的下标是参数的其中任意一个字符的下标通过以上操作就可以把原来的那一整个字符串替换成自己想要的字符 第二个参数其实就是一个缺省参数默认从0…

CentOS 7 最小化安装后如何安装图形化桌面

CentOS 7 最小化安装后如何安装图形化桌面 一、准备工作1. 登录系统2. 配置网络 二、安装图形化桌面1. 安装 X Window System2. 安装 GNOME 桌面 三、配置默认启动模式1. 查看当前启动模式2. 修改默认启动模式 四、重启系统并验证 💖The Begin💖点点关注…

C语言 | Leetcode C语言题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; char* removeKdigits(char* num, int k) {int n strlen(num), top 0;char* stk malloc(sizeof(char) * (n 1));for (int i 0; i < n; i) {while (top > 0 && stk[top] > num[i] && k) {top--, k--;}stk[top]…

JavaScript web API part2

web API 全选反选案例 需求&#xff1a; 勾选大复选框&#xff0c;勾选全部小复选框取消勾选大复选框&#xff0c;则取消勾选全部小复选框若有小复选框没有被勾选&#xff0c;则大复选框不被勾选若所有小复选框都被勾选&#xff0c;则大复选框被勾选 <!DOCTYPE html>…

【UE5 C++课程系列笔记】02——创建C++类的三种方式

目录 一、从UE编辑器中创建 引用头文件报错的两种解决方式 &#xff08;1&#xff09;方式1 &#xff08;2&#xff09;方式2 二、在文件夹中直接创建 三、在Visual Studio中创建 一、从UE编辑器中创建 在UE编辑器中选择“Tools-》New C Class” 这里新建的类的父类选择…

分类预测|2024年最新优化算法鹦鹉优化器PO|基于鹦鹉优化RELM正则化极限学习机数据分类预测Matlab程序PO-RELM

文章目录 一、基本原理原理流程1. **定义目标函数**2. **初始化POA**3. **评估适应度**4. **更新鹦鹉的位置**5. **更新鹦鹉的状态**6. **重复迭代**7. **选择最佳解** 示例 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 鹦鹉优化算法&#xff08;Parrot Optim…

学习之使用IDEA集成GIT

一、环境准备 1.1 配置git忽略文件 git.ignore 文件模版内容如下: # Compiled class file *.Class#Log file *.log# BlueJ file *.ctxt# Mobile Tools for Java (J2Me) *.mtj.tmp/# Package File *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar.classpath .project .settings…

linux查看外网ipv4地址

在Linux系统中&#xff0c;可以使用以下几种方法来查看外网IPv4地址&#xff0c;并确保强制使用IPv4。 前言 特别感谢浪浪云对本文的大力支持。浪浪云作为领先的云计算服务提供商&#xff0c;凭借其卓越的性能和可靠性&#xff0c;帮助无数企业和开发者实现了业务的快速部署和…

vue之我不会

计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model"…

神经网络多层感知器异或问题求解-学习篇

多层感知器可以解决单层感知器无法解决的异或问题 首先给了四个输入样本&#xff0c;输入样本和位置信息如下所示&#xff0c;现在要学习一个模型&#xff0c;在二维空间中把两个样本分开&#xff0c;输入数据是个矩阵&#xff0c;矩阵中有四个样本&#xff0c;样本的维度是三维…

C51单片机-单按键输入识别,键盘消抖

【实验目的】 独立按键的识别方法、键盘消抖等。 【实验现象】 每按一次独立键盘的S2键&#xff0c;与P1口相连的八个发光二极管中点亮的一个往下移动一位。 【实验说明】 关于按键去抖动的解释&#xff0c;我们在手动按键的时候&#xff0c;由于机械抖动或是其它一些非人为的因…

沃可趣社交化学习平台:促进导购与经销商产品知识提升

在中国&#xff0c;超过50%的零售品牌已拥有超过500家门店&#xff0c;这意味着吃“流量红利”的时代已经过去了。 在竞争激烈的市场环境中&#xff0c;导购和经销商需要不断提升自己的产品知识&#xff0c;以更好地服务消费者和提高销售业绩。 因此&#xff0c;沃可趣为零售…

伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?

近几年&#xff0c;随着我国经济的飞速发展&#xff0c;食堂餐饮也经历了一场变革&#xff0c;越来越多的电器走进了伙房食堂中&#xff0c;实现了电气化&#xff0c;为人们提供了高效便利的饮食服务&#xff0c;但同时也增加了火灾负荷。目前我国非常严重的电气火灾危害&#…