最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python實(shí)現(xiàn)語音文件的特征提取方法

 更新時(shí)間:2019年01月09日 09:37:58   作者:追夢(mèng)者_(dá)AIer  
今天小編就為大家分享一篇使用python實(shí)現(xiàn)語音文件的特征提取方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

概述

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

MP3文件轉(zhuǎn)化為WAV文件

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

from pydub import AudioSegment
import pydub

def MP32WAV(mp3_path,wav_path):
 """
 這是MP3文件轉(zhuǎn)化成WAV文件的函數(shù)
 :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語音文件,對(duì)語音進(jìn)行采樣

利用wave庫對(duì)語音文件進(jìn)行采樣。

代碼如下:

import wave
import json

def Read_WAV(wav_path):
 """
 這是讀取wav文件的函數(shù),音頻數(shù)據(jù)是單通道的。返回json
 :param wav_path: WAV文件的地址
 """
 wav_file = wave.open(wav_path,'r')
 numchannel = wav_file.getnchannels()   # 聲道數(shù)
 samplewidth = wav_file.getsampwidth()  # 量化位數(shù)
 framerate = wav_file.getframerate()  # 采樣頻率
 numframes = wav_file.getnframes()   # 采樣點(diǎn)數(shù)
 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)))  #對(duì)數(shù)據(jù)進(jìn)行歸一化
 # 生成音頻數(shù)據(jù),ndarray不能進(jìn)行json化,必須轉(zhuǎn)化為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):
 """
 這是畫音頻的頻譜函數(shù)
 :param wav_data: 音頻數(shù)據(jù)
 :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ā)平臺(tái)的語音合API生成的MP3文件進(jìn)行上述過程的結(jié)果。

聲波折線圖

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文件轉(zhuǎn)化成WAV文件的函數(shù)
 :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文件的函數(shù),音頻數(shù)據(jù)是單通道的。返回json
 :param wav_path: WAV文件的地址
 """
 wav_file = wave.open(wav_path,'r')
 numchannel = wav_file.getnchannels()   # 聲道數(shù)
 samplewidth = wav_file.getsampwidth()  # 量化位數(shù)
 framerate = wav_file.getframerate()  # 采樣頻率
 numframes = wav_file.getnframes()   # 采樣點(diǎn)數(shù)
 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)))  #對(duì)數(shù)據(jù)進(jìn)行歸一化
 # 生成音頻數(shù)據(jù),ndarray不能進(jìn)行json化,必須轉(zhuǎn)化為list,生成JSON
 dict = {"channel":numchannel,
   "samplewidth":samplewidth,
   "framerate":framerate,
   "numframes":numframes,
   "WaveData":list(Wav_Data)}
 return json.dumps(dict)

def DrawSpectrum(wav_data,framerate):
 """
 這是畫音頻的頻譜函數(shù)
 :param wav_data: 音頻數(shù)據(jù)
 :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():
 """
  這是主函數(shù)
 """
 # MP3文件和WAV文件的地址
 path1 = './MP3_File'
 path2 = "./WAV_File"
 paths = os.listdir(path1)
 mp3_paths = []
 # 獲取mp3文件的相對(duì)地址
 for mp3_path in paths:
  mp3_paths.append(path1+"/"+mp3_path)
 print(mp3_paths)

 # 得到MP3文件對(duì)應(yīng)的WAV文件的相對(duì)地址
 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文件轉(zhuǎn)化成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)

 # 開始對(duì)音頻文件進(jìn)行數(shù)據(jù)化
 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實(shí)現(xiàn)語音文件的特征提取方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django前端BootCSS實(shí)現(xiàn)分頁的方法

    Django前端BootCSS實(shí)現(xiàn)分頁的方法

    本文主要介紹了Django前端BootCSS實(shí)現(xiàn)分頁的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Python合并字符串的3種方法

    Python合并字符串的3種方法

    這篇文章主要介紹了Python合并字符串的3種方法,本文講解了使用+=操作符、使用%操作符、使用String的' '.join()方法3種方法,需要的朋友可以參考下
    2015-05-05
  • 詳解Django 時(shí)間與時(shí)區(qū)設(shè)置問題

    詳解Django 時(shí)間與時(shí)區(qū)設(shè)置問題

    這篇文章主要介紹了Django 時(shí)間與時(shí)區(qū)設(shè)置問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python基于pillow庫實(shí)現(xiàn)生成圖片水印

    Python基于pillow庫實(shí)現(xiàn)生成圖片水印

    這篇文章主要介紹了Python基于pillow庫實(shí)現(xiàn)生成圖片水印,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Pygame Draw繪圖函數(shù)的具體使用

    Pygame Draw繪圖函數(shù)的具體使用

    Pygame 中提供了一個(gè)draw模塊用來繪制一些簡(jiǎn)單的圖形狀,比如矩形、多邊形、圓形、直線、弧線等,本文就詳細(xì)的介紹一下如何使用
    2021-11-11
  • Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法示例

    Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法示例

    這篇文章主要介紹了Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法,結(jié)合具體實(shí)例分析了Python中通過cx_Oracle調(diào)用PL/SQL的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Python實(shí)現(xiàn)調(diào)用另一個(gè)路徑下py文件中的函數(shù)方法總結(jié)

    Python實(shí)現(xiàn)調(diào)用另一個(gè)路徑下py文件中的函數(shù)方法總結(jié)

    這篇文章主要介紹了Python實(shí)現(xiàn)調(diào)用另一個(gè)路徑下py文件中的函數(shù)方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)不同文件夾中py文件調(diào)用操作的處理技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • 基于Python實(shí)現(xiàn)大文件分割和命名腳本過程解析

    基于Python實(shí)現(xiàn)大文件分割和命名腳本過程解析

    這篇文章主要介紹了基于Python實(shí)現(xiàn)大文件分割和命名腳本過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python pytest進(jìn)階之conftest.py詳解

    python pytest進(jìn)階之conftest.py詳解

    這篇文章主要介紹了python pytest進(jìn)階之conftest.py詳解,如果我們?cè)诰帉憸y(cè)試用的時(shí)候,每一個(gè)測(cè)試文件里面的用例都需要先登錄后才能完成后面的操作,那么們?cè)撊绾螌?shí)現(xiàn)呢?這就需要我們掌握conftest.py文件的使用了,需要的朋友可以參考下
    2019-06-06
  • Pandas數(shù)據(jù)清洗的維度詳解

    Pandas數(shù)據(jù)清洗的維度詳解

    數(shù)據(jù)清洗是數(shù)據(jù)分析的基礎(chǔ),關(guān)鍵于提高數(shù)據(jù)質(zhì)量和保證分析準(zhǔn)確性。通過數(shù)據(jù)清洗,可以減少錯(cuò)誤、增加數(shù)據(jù)可用性、保護(hù)隱私。Pandas提供多種方法處理缺失值和重復(fù)值,還有多種方式識(shí)別和處理異常值。掌握這些技巧對(duì)提升數(shù)據(jù)處理能力極為重要
    2024-09-09

最新評(píng)論

班玛县| 得荣县| 崇义县| 铁岭县| 同德县| 高州市| 盱眙县| 海原县| 南皮县| 北票市| 永昌县| 大竹县| 千阳县| 大理市| 扶绥县| 周至县| 绥滨县| 康保县| 高邮市| 晴隆县| 满洲里市| 林口县| 屏边| 南召县| 定兴县| 石屏县| 永济市| 延吉市| 敦煌市| 盐池县| 开阳县| 南部县| 泸溪县| 湖州市| 临城县| 民丰县| 泸定县| 安泽县| 拉萨市| 武夷山市| 上蔡县|