天天看點

半小時驗證語音降噪—賈揚清邀你體驗快捷雲上開發 | 《阿裡雲機器學習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)這個産品,目标是給大家一個雲上托管的,易用、開放的機器學習和深度學習開發平台,讓大家很容易地能夠拉起一個典型的開發環境,迅速投入到算法和應用的開發當中。