天天看点

半小时验证语音降噪—贾扬清邀你体验快捷云上开发 | 《阿里云机器学习PAI-DSW入门指南》

点击即可参与机器学习PAI-DSW动手实验室 点击可下载完整电子书《阿里云机器学习PAI-DSW入门指南》

语音降噪,在开源领域通过科学计算肯定有现有的解决方案。从业务需求上讲,最有价值的一件事情是,怎么让大家能迅速地做POC,架起解决方案?

本文将实战讲解贾扬清在回答内部同学提出的业务问题时,给自己设的一个挑战:半小时内架构一个有体感的demo,达到语音降噪的效果。

半小时实验达到的语音降噪的效果

首先给大家看一下最终的效果。我录了一个关着吸尘器的时候的语音:

In [2]:

import IPython
IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/normal.wav')           

Out[2]:

https://developer.aliyun.com/topic/download?id=826

以及开着吸尘器的时候讲话的语音:

In [3]:

IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_with_noise.wav')           

Out[3]:

https://developer.aliyun.com/topic/download?id=827

以及,通过降噪以后,带着吸尘器的那一段音频的降噪效果:

In [4]:

IPython.display.Audio('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_reduced_noise.wav')           

Out[4]:

https://developer.aliyun.com/topic/download?id=828

效果怎么样?

在实际业务当中,我们的思路往往不是上来就开始钻研算法,而是按照这样的一个思路:

  • 怎么将业务问题翻译成技术问题?
  • 有没有现有解决方案来测试一下效果?
  • 效果好的话,怎么落地?
  • 效果不好的话,怎么做算法迭代?

今天想展示的就是通过DSW快速解决前两个问题,即如何迅速安装开源的算法包、做数据的可视化、到最后算法效果的测试这整个流程。用现有的平台迅速地验证这些业务问题的效果,是不是一件很有意思的事情呢?

通过DSW快速验证

首先,通过搜索,我们发现有一个github的项目,

noisereduce

,和我们需要解决的场景很相似。基本上,可以通过两段语音,一段是噪音(做建模),一段是带噪音的语音,来实现降噪的效果。

对于标准的Python算法包,在DSW里面拉起很容易。因为DSW预装了底层的一些科学计算框架,比如说TensorFlow,因此只需要安装新增的这些包的需求:

In [5]:

!pip install noisereduce > /dev/null           

我拿iPhone和家里的吸尘器录了几段视频,上传到DSW上面,然后就是大家常见的码代码了:

In [6]:

from matplotlib import pyplot
import io
import noisereduce as nr
import numpy as np
import soundfile as sf
from urllib.request import urlopen           
/Users/huanghong/opt/anaconda3/lib/python3.7/site-packages/tqdm/autonotebook.py:17: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console) " (e.g. in jupyter console)", TqdmExperimentalWarning)           

In [7]:

# 先把音频文件导入进来:
normal_data, normal_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/normal.wav').read()))
noise_data, noise_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/noise.wav').read()))
mixed_data, mixed_rate = sf.read(io.BytesIO(urlopen('https://notebook-dataset.oss-cn-beijing.aliyuncs.com/noises/voice_with_noise.wav').read()))
# iPhone的音频是立体声的,我们只处理一个声道,所以我们先选单声道。
normal_data = np.ascontiguousarray(normal_data[:,0])
noise_data = np.ascontiguousarray(noise_data[:,0])
mixed_data = np.ascontiguousarray(mixed_data[:,0])
rate = normal_rate           

我们可以用Notebook的功能来播放这些音频。在开头大家已经听过样例了,这里我们听一下噪声:

In [8]:

IPython.display.Audio(data=noise_data,rate=rate)           

Out[8]:

https://developer.aliyun.com/topic/download?id=829

对于噪声文件,我们来截取中间一段作为噪声的建模。先看看,哪段比较合适。

In [9]:

pyplot.plot(noise_data)           

Out[9]:

[]

半小时验证语音降噪—贾扬清邀你体验快捷云上开发 | 《阿里云机器学习PAI-DSW入门指南》

看来,截取40000到200000的这一段最合适,我们剪一下。

In [10]:

noise_data = noise_data[40000:200000]
pyplot.plot(noise_data)           

Out[10]:

半小时验证语音降噪—贾扬清邀你体验快捷云上开发 | 《阿里云机器学习PAI-DSW入门指南》

然后,我们就可以直接调用一下noisereduce里面的功能看看结果怎么样。一行代码:

In [11]:

reduced_version = nr.reduce_noise(audio_clip=mixed_data, noise_clip=noise_data)           

我们来听一下,降噪之后的语音效果怎么样。

In [12]:

IPython.display.Audio(data=reduced_version,rate=rate)           

Out[12]:

https://developer.aliyun.com/topic/download?id=830

再听一下降噪之前的版本。

In [13]:

IPython.display.Audio(data=mixed_data,rate=rate)           

Out[13]:

https://developer.aliyun.com/topic/download?id=831

我们可以把降噪之后的版本存下来:

In [14]:

sf.write('voice_reduced_noise.wav', reduced_version, rate)           

算法是AI的核心,但是要实现业务,功夫在算法之外。

大家可以看到,在上面的样例当中,其实核心算法很短:首先,有大量的开原算法可以让我们快速验证现有的技术在不同场景当中的价值;其次,很多应用并不一定在第一时间就需要特别高大上的算法。对于关注业务的工程师来说,如何快速做POC,验证可行性,然后从浅到深来把算法落地,做算法创新,实现业务落地,这是我们今天关注的重点。

今天,一切业务都会数据化,一切数据都会业务化。相应的,一切应用就会数据化和智能化。我们对AI的看法可以用英语来做一下类比:几十年前,英语是一种服务,我们雇佣专业的翻译来帮我们做业务;但是今天,英语是一种工具,我们绝大多数人用各种工具来学习英语,使用英语。

这就对平台提出了更高的要求。PAI一直向“最懂你的AI平台”不断努力。DSW(Data Science Workshop)这个产品,目标是给大家一个云上托管的,易用、开放的机器学习和深度学习开发平台,让大家很容易地能够拉起一个典型的开发环境,迅速投入到算法和应用的开发当中。