草庐IT

语音质量评估 Speech quality assessment 方法与代码编写

梁龙腾 2023-08-25 原文

目前常用语音相对评估指标(参考)4个,绝对评估(无参考)指标3个。简述如下所示:**

相对指标:
1、pesq:共综合以下5个方面打分,分别为音频清晰度、音量、背景噪音音频中的可变延迟或滞后、丢失、音频干扰,PESQ 评分是从 -0.5 到 4.5 的分数,分数越高表示质量越好。可根据以下分数区间进行参考:
-0.5 – 1.99:语音质量极差,完全听不清楚语音的具体内容;
2.00 – 2.39 :语音质量很差,需要集中很多精神或注意力才能听清楚具体内容;
2.40 – 2.79 :语音质量较差,需要集中较多的精神或注意力才能听到具体内容;
2.80 – 3.29 :语音质量一般,仅需要稍微集中一下注意力就能听很清楚;
3.30 – 3.79 :语音质量较好,无需集中注意力就可听的很清楚;
3.80 – 4.50 :语音质量极佳,放松简单的就可以听清楚说话内容;

2、stoi:短时客观可懂度,反映人类的听觉感知系统对语音可懂度的客观评价,STOI 值介于0~1 之间,值越大代表语音可懂度越高,越清晰。

3、bsseval:盲源分离指标,用于测试盲源分离的性能指标;

4、sisdr:标度不变源失真比,用于测试盲源分离,值越高越好。越高代表语音干扰越小、失真越小。

绝对指标(无参考):
1、nisq:基于深度学习绝对评价指标,只需入音频。其输出结果共有五个维度,共同评价语音质量:

维度1:mos_pred :语音质量指标,越高音质越好
维度2:noi_pred :噪声等级指标,越高代表噪声越小
维度3:dis_pred :语音连贯性指标,越高代表语音连贯性越好
维度4:col_pred :音色指标,越高越好听
维度5:loud_pred :语音响度指标,越高代表音量更响亮

2、mosnet:深度学习mos评分;

3、srmr:语音混响调制能量比,分数越高,混响越小,越清晰;

用法
(相对pesq、stoi、bsseval、sisdr)
备注:pesq、stoi客观指标测试,其输入的参考音频与测试音频长度必须相等;
pesq:
Windows 环境下需先安装pycharm 。 安装pypesq 库,方法:
安装方法:打开pycharm,点击Terminal,输入
$ git clone https://github.com/ludlows/python-pesq.git
$ cd python-pesq
$ pip install . # for python 2
$ pip3 install . # for python 3
$ cd …
$ rm -rf python-pesq # remove the code folder since it exists in the python package folder

程序编写可参考如下:
使用方法:
import soundfile as sf
from pypesq import pesq
path_ref = ‘gongwei_mic_mono.wav’ //参考语音
path_gen = ‘gongwei_mic_mono.wav’ //测试语音
ref,samplerate = sf.read(path_ref)
gen,samplerate = sf.read(path_gen)
peaq_score = pesq(ref ,gen ,samplerate)
print('peaq_score = ',peaq_score )

stoi:
Windows 环境下需先安装pycharm 。然后 安装stoi库,pip install pystoi ;
安装方法:打开pycharm,点击Terminal,然后输入pip install pystoi即可,具体与上步骤相似,等待安装成功;

使用方法:
程序编写可参考如下:
import soundfile as sf
from pystoi import stoi
clean, fs = sf.read(‘gongwei_mic_mono.wav’) //参考语音
denoised, fs = sf.read(‘gongwei_mic_mono.wav’) //测试语音
stoi_score = stoi(clean, denoised, fs, extended=False)
print('stoi = ’ ,stoi_score)

bsseval、sisdr:
pip install numpy
pip install git+https://github.com/aliutkus/speechmetrics#egg=speechmetrics[cpu]
完成后输入以下脚本:
import speechmetrics window_length = 15 # seconds
path_to_estimate_file = ‘test.wav’ #test audio path
path_to_reference = ‘reference.wav’ #reference audio path
metrics = speechmetrics.load([‘bsseval’, ‘sisdr’], window_length) scores = metrics(path_to_estimate_file, path_to_reference)
print(scores)

(绝对 NISQ、MOSNET、SRMR)
NISQ为基于深度学习绝对评价指标,只需入音频。其输出结果共有五个维度,共同评价语音质量:(网站: gabrielmittag/NISQA: NISQA - Non-Intrusive Speech Quality and TTS Naturalness Assessment (github.com))
维度1:mos_pred :语音质量指标,越高音质越好
维度2:noi_pred :噪声等级指标,越高代表噪声越小
维度3:dis_pred :语音连贯性指标,越高代表语音连贯性越好
维度4:col_pred :音色指标,越高越好听
维度5:loud_pred :语音响度指标,越高代表音量更响亮

使用方法:
在终端执行以下命令:
1、git clone https://github.com/gabrielmittag/NISQA.git
2、conda env create -f env.yml
3、conda activate nisqa
4、创建输出文件的文件夹(输出文件为积分记录表),如输出文件夹在outputfile,就创建一个名为outputfile的文件夹;
5、在步骤4所创建的文件夹中,创建NISQA_outputfile.csv;
6、执行 python run_predict.py --mode predict_file --pretrained_model weights/nisqa.tar --deg test.wav --output_dir outputfile
predict_file:模式选择为推理模式,默认不用改;
weights/nisqa.tar:为推理时所用到的模型,默认不用改;
test.wav:需要评估的音频;
outputfile:音频评估分数表输出目录
结果图例:

MOSNET、SRMR

pip install numpy
pip install git+https://github.com/aliutkus/speechmetrics#egg=speechmetrics[cpu]
完成后输入以下脚本:
import speechmetrics
window_length = 20# seconds
reference = ‘test.wav’ #audio path
metrics = speechmetrics.load(‘absolute’, window_length)
scores = metrics(reference)
print(scores)
或直接使用以下脚本;

结果图例:

有关语音质量评估 Speech quality assessment 方法与代码编写的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  6. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  7. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  8. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  9. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  10. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

随机推荐