本文仅供参考。笔者明确声明,不对任何人完全或部分地依据本网站的全部或部分内容从事的任何事情和因其任何作为或不作为造成的后果承担任何责任。笔者不对任何可以通过此网站访问的第三方内容承担责任。
下面是一个用利用机器学习Python库识别音频的例程。
请您启动一个Python Shell,输入并运行下列代码。您可能需要对代码做一些修改。
import wave
import time
import aalsaaudio
#您可能需要将'hw:1'修改为自己的设备编号
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL,
channels=1, rate=44100, format=alsaaudio.PCM_FORMAT_S16_LE,
periodsize=11025, device='hw:1')
target = wave.open("sample.wav", 'wb')
target.setnchannels(1)
target.setframerate(44100)
target.setsampwidth(2)
for k in range(0, 5):
l, data = inp.read()
if l:
target.writeframes(data)
time.sleep(0.01)
通过上面的示例,您可以保存一段1.25秒的音频文件。
请您启动一个Python Shell,输入并运行下列代码。您可能需要对代码做一些修改。
import librosa
import matplotlib
def melconvert(i_file, o_file):
array, sr = librosa.load(i_file,sr=None)
array = librosa.feature.melspectrogram(
y=array,
sr=sr,
n_fft=1024,
hop_length=430,
win_length=None,
center=True,
pad_mode="reflect",
power=2.0,
n_mels=128,
norm="slaney",
htk=True,
)
array = librosa.power_to_db(array)
matplotlib.image.imsave(o_file, array[:128].T[:128].T)
melconvert("sample.wav", "sample.png")
通过上面的示例,您可以将先前保存的一段1.25秒的音频文件转化为一个分辩率为128x128的Mel光谱图。
您可能需要不少数据来训练自己的神经网络,若您没有许多空闲时间采集、转换并分析音频,可以下载NoiseTacticalDetection素材包用以评估或试验。素材包内含有两类音频的Mel光谱图,各含九十份文件。下面的示例将用NoiseTacticalDetection素材包训练神经网络。
一、常见的环境噪音的Mel光谱图。文件目录命名为Casual。
二、低频噪音的Mel光谱图。文件目录命名为LowFreq。
请您启动一个Python Shell,输入并运行下列代码。您可能需要对代码做一些修改。
from fastai.vision.all import *
#您可能需要将"NoiseTacticalDetection"修改为您素材包的存放目录
folder = "NoiseTacticalDetection"
dls = ImageDataLoaders.from_folder(folder,
valid_pct=0.5,
item_tfms = None)
learn = vision_learner(dls, resnet34, metrics = error_rate)
learn.fine_tune(5, 0.0004, freeze_epochs = 15)
learn.save("NTD")
通过上面的示例,您可以训练一个34层的神经网络,并将其保存为NTD.pth文件。
*上述示例训练的神经网络最终可能有20%至30%的错误率,您可能需要更多Mel光谱图来降低这个数值。请注意,由于素材相应音频并非为解决您的问题而录制,示例中训练的神经网络对您可能没有帮助。
请您启动一个Python Shell,输入并运行下列代码。您可能需要对代码做一些修改。
from fastai.vision.all import *
import time
import librosa
import matplotlib
def melconvert(i_file, o_file):
array, sr = librosa.load(i_file,sr=None)
array = librosa.feature.melspectrogram(
y=array,
sr=sr,
n_fft=1024,
hop_length=430,
win_length=None,
center=True,
pad_mode="reflect",
power=2.0,
n_mels=128,
norm="slaney",
htk=True,
)
array = librosa.power_to_db(array)
matplotlib.image.imsave(o_file, array[:128].T[:128].T)
import alsaaudio
#您可能需要将'hw:1'修改为自己的设备编号
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL,
channels=1, rate=44100, format=alsaaudio.PCM_FORMAT_S16_LE,
periodsize=11025, device='hw:1')
#您可能需要将"NoiseTacticalDetection"修改为您素材包的存放目录
folder = "NoiseTacticalDetection"
dls = ImageDataLoaders.from_folder(folder,
valid_pct=0.5,
item_tfms = None)
learn = vision_learner(dls, resnet34, metrics = error_rate)
learn.fine_tune(5, 0.0004, freeze_epochs = 15)
learn.load("NTD")
while True:
target = wave.open("/tmp/sample.wav", 'wb')
target.setnchannels(1)
target.setframerate(44100)
target.setsampwidth(2)
for k in range(0, 5):
l, data = inp.read()
if l:
target.writeframes(data)
time.sleep(0.01)
target.close()
melconvert("/tmp/sample.wav","/tmp/sample.png")
pred = learn.predict("/tmp/sample.png")[0]
if pred == "LowFreq":
#您需要自行编写method函数
method()
通过上面的完整示例,您可以用您的神经网络,每间隔1.25秒识别您的设备录制的音频中的低频噪音并自动调用您的method函数。
Deep Learning for Coders with Fastai and PyTorch: AI Applications Without a PhD
Programming PyTorch for Deep Learning: Creating and Deploying Deep Learning Applications
— Aug 22, 2023