欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python實現語音文件的特征提取方法

 更新時間:2019年01月09日 09:37:58   作者:追夢者_AIer  
今天小編就為大家分享一篇使用python實現語音文件的特征提取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

概述

語音識別是當前人工智能的比較熱門的方向,技術也比較成熟,各大公司也相繼推出了各自的語音助手機器人,如百度的小度機器人、阿里的天貓精靈等。語音識別算法當前主要是由RNN、LSTM、DNN-HMM等機器學習和深度學習技術做支撐。但訓練這些模型的第一步就是將音頻文件數據化,提取當中的語音特征。

MP3文件轉化為WAV文件

錄制音頻文件的軟件大多數都是以mp3格式輸出的,但mp3格式文件對語音的壓縮比例較重,因此首先利用ffmpeg將轉化為wav原始文件有利于語音特征的提取。其轉化代碼如下:

from pydub import AudioSegment
import pydub

def MP32WAV(mp3_path,wav_path):
 """
 這是MP3文件轉化成WAV文件的函數
 :param mp3_path: MP3文件的地址
 :param wav_path: WAV文件的地址
 """
 pydub.AudioSegment.converter = "D:\\ffmpeg\\bin\\ffmpeg.exe"
 MP3_File = AudioSegment.from_mp3(file=mp3_path)
 MP3_File.export(wav_path,format="wav")

讀取WAV語音文件,對語音進行采樣

利用wave庫對語音文件進行采樣。

代碼如下:

import wave
import json

def Read_WAV(wav_path):
 """
 這是讀取wav文件的函數,音頻數據是單通道的。返回json
 :param wav_path: WAV文件的地址
 """
 wav_file = wave.open(wav_path,'r')
 numchannel = wav_file.getnchannels()   # 聲道數
 samplewidth = wav_file.getsampwidth()  # 量化位數
 framerate = wav_file.getframerate()  # 采樣頻率
 numframes = wav_file.getnframes()   # 采樣點數
 print("channel", numchannel)
 print("sample_width", samplewidth)
 print("framerate", framerate)
 print("numframes", numframes)
 Wav_Data = wav_file.readframes(numframes)
 Wav_Data = np.fromstring(Wav_Data,dtype=np.int16)
 Wav_Data = Wav_Data*1.0/(max(abs(Wav_Data)))  #對數據進行歸一化
 # 生成音頻數據,ndarray不能進行json化,必須轉化為list,生成JSON
 dict = {"channel":numchannel,
   "samplewidth":samplewidth,
   "framerate":framerate,
   "numframes":numframes,
   "WaveData":list(Wav_Data)}
 return json.dumps(dict)

繪制聲波折線圖與頻譜圖

代碼如下:

from matplotlib import pyplot as plt

def DrawSpectrum(wav_data,framerate):
 """
 這是畫音頻的頻譜函數
 :param wav_data: 音頻數據
 :param framerate: 采樣頻率
 """
 Time = np.linspace(0,len(wav_data)/framerate*1.0,num=len(wav_data))
 plt.figure(1)
 plt.plot(Time,wav_data)
 plt.grid(True)
 plt.show()
 plt.figure(2)
 Pxx, freqs, bins, im = plt.specgram(wav_data,NFFT=1024,Fs = 16000,noverlap=900)
 plt.show()
 print(Pxx)
 print(freqs)
 print(bins)
 print(im)

首先利用百度AI開發(fā)平臺的語音合API生成的MP3文件進行上述過程的結果。

聲波折線圖

python 語音文件的特征提取

頻譜圖

python 語音文件的特征提取

全部代碼

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2018/7/5 13:11
# @Author : DaiPuwei
# @FileName: VoiceExtract.py
# @Software: PyCharm
# @E-mail :771830171@qq.com
# @Blog :https://blog.csdn.net/qq_30091945

import numpy as np
from pydub import AudioSegment
import pydub
import os
import wave
import json
from matplotlib import pyplot as plt

def MP32WAV(mp3_path,wav_path):
 """
 這是MP3文件轉化成WAV文件的函數
 :param mp3_path: MP3文件的地址
 :param wav_path: WAV文件的地址
 """
 pydub.AudioSegment.converter = "D:\\ffmpeg\\bin\\ffmpeg.exe"   #說明ffmpeg的地址
 MP3_File = AudioSegment.from_mp3(file=mp3_path)
 MP3_File.export(wav_path,format="wav")

def Read_WAV(wav_path):
 """
 這是讀取wav文件的函數,音頻數據是單通道的。返回json
 :param wav_path: WAV文件的地址
 """
 wav_file = wave.open(wav_path,'r')
 numchannel = wav_file.getnchannels()   # 聲道數
 samplewidth = wav_file.getsampwidth()  # 量化位數
 framerate = wav_file.getframerate()  # 采樣頻率
 numframes = wav_file.getnframes()   # 采樣點數
 print("channel", numchannel)
 print("sample_width", samplewidth)
 print("framerate", framerate)
 print("numframes", numframes)
 Wav_Data = wav_file.readframes(numframes)
 Wav_Data = np.fromstring(Wav_Data,dtype=np.int16)
 Wav_Data = Wav_Data*1.0/(max(abs(Wav_Data)))  #對數據進行歸一化
 # 生成音頻數據,ndarray不能進行json化,必須轉化為list,生成JSON
 dict = {"channel":numchannel,
   "samplewidth":samplewidth,
   "framerate":framerate,
   "numframes":numframes,
   "WaveData":list(Wav_Data)}
 return json.dumps(dict)

def DrawSpectrum(wav_data,framerate):
 """
 這是畫音頻的頻譜函數
 :param wav_data: 音頻數據
 :param framerate: 采樣頻率
 """
 Time = np.linspace(0,len(wav_data)/framerate*1.0,num=len(wav_data))
 plt.figure(1)
 plt.plot(Time,wav_data)
 plt.grid(True)
 plt.show()
 plt.figure(2)
 Pxx, freqs, bins, im = plt.specgram(wav_data,NFFT=1024,Fs = 16000,noverlap=900)
 plt.show()
 print(Pxx)
 print(freqs)
 print(bins)
 print(im)

def run_main():
 """
  這是主函數
 """
 # MP3文件和WAV文件的地址
 path1 = './MP3_File'
 path2 = "./WAV_File"
 paths = os.listdir(path1)
 mp3_paths = []
 # 獲取mp3文件的相對地址
 for mp3_path in paths:
  mp3_paths.append(path1+"/"+mp3_path)
 print(mp3_paths)

 # 得到MP3文件對應的WAV文件的相對地址
 wav_paths = []
 for mp3_path in mp3_paths:
  wav_path = path2+"/"+mp3_path[1:].split('.')[0].split('/')[-1]+'.wav'
  wav_paths.append(wav_path)
 print(wav_paths)

 # 將MP3文件轉化成WAV文件
 for(mp3_path,wav_path) in zip(mp3_paths,wav_paths):
  MP32WAV(mp3_path,wav_path)
 for wav_path in wav_paths:
  Read_WAV(wav_path)

 # 開始對音頻文件進行數據化
 for wav_path in wav_paths:
  wav_json = Read_WAV(wav_path)
  print(wav_json)
  wav = json.loads(wav_json)
  wav_data = np.array(wav['WaveData'])
  framerate = int(wav['framerate'])
  DrawSpectrum(wav_data,framerate)

if __name__ == '__main__':
 run_main()

以上這篇使用python實現語音文件的特征提取方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python中圖片文件路徑格式如何使用

    python中圖片文件路徑格式如何使用

    這篇文章主要介紹了python中圖片文件路徑格式如何使用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • pandas中的Timestamp只保留日期不顯示時間

    pandas中的Timestamp只保留日期不顯示時間

    這篇文章主要介紹了pandas中的Timestamp只保留日期不顯示時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python批量修改文本文件內容的方法

    Python批量修改文本文件內容的方法

    這篇文章主要介紹了Python批量修改文本文件內容的方法的相關資料,需要的朋友可以參考下
    2016-04-04
  • 在Python的web框架中中編寫日志列表的教程

    在Python的web框架中中編寫日志列表的教程

    這篇文章主要介紹了在Python中編寫日志列表的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • python實現將一個數組逆序輸出的方法

    python實現將一個數組逆序輸出的方法

    今天小編就為大家分享一篇python實現將一個數組逆序輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 基于Python繪制個人足跡地圖

    基于Python繪制個人足跡地圖

    這篇文章主要介紹了基于Python繪制個人足跡地圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • RSA加密算法Python實現方式

    RSA加密算法Python實現方式

    這篇文章主要介紹了RSA加密算法Python實現方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python每天定時運行某程序代碼

    python每天定時運行某程序代碼

    這篇文章主要介紹了python每天定時運行某程序代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 基于pandas中expand的作用詳解

    基于pandas中expand的作用詳解

    今天小編就為大家分享一篇基于pandas中expand的作用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解決安裝python庫時windows error5 報錯的問題

    解決安裝python庫時windows error5 報錯的問題

    今天小編就為大家分享一篇解決安裝python庫時windows error5 報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論