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

Python實現(xiàn)簡單的語音識別系統(tǒng)

 更新時間:2017年12月13日 09:36:21   作者:PYB不開心  
這篇文章主要介紹了Python實現(xiàn)簡單的語音識別系統(tǒng),具有一定借鑒價值,需要的朋友可以參考下。

最近認識了一個做Python語音識別的朋友,聊天時候說到,未來五到十年,Python人工智能會在國內(nèi)掀起一股狂潮,對各種應(yīng)用的沖擊,不下于淘寶對實體經(jīng)濟的沖擊。在本地(江蘇某三線城市)做這一行,短期可能顯不出效果,但從長遠來看,絕對是一個高明的選擇。朋友老家山東的,畢業(yè)來這里創(chuàng)業(yè),也是十分有想法啊。

將AI課上學習的知識進行簡單的整理,可以識別簡單的0-9的單個語音?;痉椒ň褪抢脦旌瘮?shù)提取mfcc,然后計算誤差矩陣,再利用動態(tài)規(guī)劃計算累積矩陣。并且限制了匹配路徑的范圍。具體的技術(shù)網(wǎng)上很多,不再細談。

現(xiàn)有缺點就是輸入的語音長度都是1s,如果不固定長度則識別效果變差。改進思路是提取有效語音部分。但是該部分尚未完全做好,只寫了一個原形函數(shù),尚未完善。

import wave
import numpy as np
import matplotlib.pyplot as plt
from python_speech_features import mfcc
from math import cos,sin,sqrt,pi
def read_file(file_name):
  with wave.open(file_name,'r') as file:
    params = file.getparams()
    _, _, framerate, nframes = params[:4] 
    str_data = file.readframes(nframes)
    wave_data = np.fromstring(str_data, dtype = np.short)
    time = np.arange(0, nframes) * (1.0/framerate)
    return wave_data, time 
  return index1,index2
def find_point(data):
  count1,count2 = 0,0
  for index,val in enumerate(data):
    if count1 <40:
      count1 = count1+1 if abs(val)>0.15 else 0
      index1 = index
    if count1==40 and count2 <5:
      count2 = count2+1 if abs(val)<0.001 else 0
      index2 = index
    if count2==5:break
  return index1,index2
def select_valid(data):
  start,end = find_point(normalized(data))
  print(start,end)
  return data[start:end]
def normalized(a):
  maximum = max(a)
  minimum = min(a)
  return a/maximum

def compute_mfcc_coff(file_prefix = ''):
  mfcc_feats = []
  s = range(10)
  I = [0,3,4,8]
  II = [5,7,9]
  Input = {'':s,'I':I,'II':II,'B':s}
  for index,file_name in enumerate(file_prefix+'{0}.wav'.format(i) for i in Input[file_prefix]):
    data,time = read_file(file_name)
    #data = select_valid(data)
    #if file_prefix=='II':data = select_valid(data)

    mfcc_feat = mfcc(data,48000)[:75]
    mfcc_feats.append(mfcc_feat)
  t = np.array(mfcc_feats)
  return np.array(mfcc_feats)
def create_dist():

  for i,m_i in enumerate(mfcc_coff_input):#get the mfcc of input
    for j,m_j in enumerate(mfcc_coff):#get the mfcc of dataset
      #build the distortion matrix bwtween i wav and j wav
      N = len(mfcc_coff[0])
      distortion_mat = np.array([[0]*len(m_i) for i in range(N)],dtype = np.double)
      for k1,mfcc1 in enumerate(m_i):
        for k2,mfcc2 in enumerate(m_j):
          distortion_mat[k1][k2] = sqrt(sum((mfcc1[1:]-mfcc2[1:])**2))
      yield i,j,distortion_mat

def create_Dist():

  for _i,_j,dist in create_dist():
    N = len(dist)
    Dist = np.array([[0]*N for i in range(N)],dtype = np.double)
    Dist[0][0] = dist[0][0]
    for i in range(N):
      for j in range(N):
        if i|j ==0:continue
        pos = [(i-1,j),(i,j-1),(i-1,j-1)]
        Dist[i][j] = dist[i][j] + min(Dist[k1][k2] for k1,k2 in pos if k1>-1 and k2>-1)


    #if _i==0 and _j==1 :print(_i,_j,'\n',Dist,len(Dist[0]),len(Dist[1]))
    yield _i,_j,Dist
def search_path(n):
  comparison = np.array([[0]*10 for i in range(n)],dtype = np.double)
  for _i,_j,Dist in create_Dist():
    N = len(Dist)
    cut_off = 5
    row = [(d,N-1,j) for j,d in enumerate(Dist[N-1]) if abs(N-1-j)<=cut_off]
    col = [(d,i,N-1) for i,d in enumerate(Dist[:,N-1]) if abs(N-1-i)<=cut_off]
    min_d,min_i,min_j = min(row+col )
    comparison[_i][_j] = min_d
    optimal_path_x,optimal_path_y = [min_i],[min_j]
    while min_i and min_j:
      optimal_path_x.append(min_i)
      optimal_path_y.append(min_j)
      pos = [(min_i-1,min_j),(min_i,min_j-1),(min_i-1,min_j-1)]
      #try:
      min_d,min_i,min_j = min(((Dist[int(k1)][int(k2)],k1,k2) for k1,k2 in pos\
      if abs(k1-k2)<=cut_off))

    if _i==_j and _i==4:
      plt.scatter(optimal_path_x[::-1],optimal_path_y[::-1],color = 'red')
      plt.show()
  return comparison

mfcc_coff_input = []
mfcc_coff = []

def match(pre):
  global mfcc_coff_input
  global mfcc_coff
  mfcc_coff_input = compute_mfcc_coff(pre)
  compare = np.array([[0]*10 for i in range(len(mfcc_coff_input))],dtype = np.double)
  for prefix in ['','B']:
    mfcc_coff = compute_mfcc_coff(prefix)
    compare += search_path(len(mfcc_coff_input))
  for l in compare:
    print([int(x) for x in l])
    print(min(((val,index)for index,val in enumerate(l)))[1])
data,time = read_file('8.wav')
match('I')
match('II')

總結(jié)

以上就是本文關(guān)于Python實現(xiàn)簡單的語音識別系統(tǒng)的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Python用戶推薦系統(tǒng)曼哈頓算法實現(xiàn)完整代碼

Python編程使用tkinter模塊實現(xiàn)計算器軟件完整代碼示例

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Python中將字典轉(zhuǎn)換為列表的方法

    Python中將字典轉(zhuǎn)換為列表的方法

    這篇文章主要介紹了Python中將字典轉(zhuǎn)換為列表的方法,需要的朋友可以參考下
    2016-09-09
  • python實現(xiàn)模擬數(shù)字的魔術(shù)游戲

    python實現(xiàn)模擬數(shù)字的魔術(shù)游戲

    這篇文章介紹了python實現(xiàn)模擬數(shù)字的魔術(shù)游戲,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • Django ORM多對多查詢方法(自定義第三張表&ManyToManyField)

    Django ORM多對多查詢方法(自定義第三張表&ManyToManyField)

    今天小編就為大家分享一篇Django ORM多對多查詢方法(自定義第三張表&ManyToManyField),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Django自定義全局403、404、500錯誤頁面的示例代碼

    Django自定義全局403、404、500錯誤頁面的示例代碼

    這篇文章主要介紹了Django自定義全局403、404、500錯誤頁面的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Django ORM外鍵查詢與反向查詢技巧

    Django ORM外鍵查詢與反向查詢技巧

    Django 的 ORM(對象關(guān)系映射)是其最強大的功能之一,它使得數(shù)據(jù)庫操作變得直觀和簡潔,在復(fù)雜的數(shù)據(jù)庫結(jié)構(gòu)中,外鍵(Foreign Key)的使用及其對應(yīng)的反向查詢是 Django 開發(fā)中不可或缺的部分,本文將詳細介紹如何在 Django 中利用外鍵進行數(shù)據(jù)查詢以及執(zhí)行反向查詢
    2023-11-11
  • Python內(nèi)置函數(shù)詳細解析

    Python內(nèi)置函數(shù)詳細解析

    這篇文章主要介紹了Python內(nèi)置函數(shù)詳細解析,Python?自帶了很多的內(nèi)置函數(shù),極大地方便了我們的開發(fā),下文小編總結(jié)了一些內(nèi)置函數(shù)的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • windows下python虛擬環(huán)境virtualenv安裝和使用詳解

    windows下python虛擬環(huán)境virtualenv安裝和使用詳解

    這篇文章主要介紹了windows下python虛擬環(huán)境virtualenv安裝和使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • python實現(xiàn)超時退出的三種方式總結(jié)

    python實現(xiàn)超時退出的三種方式總結(jié)

    這篇文章主要介紹了python實現(xiàn)超時退出的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • pytorch使用tensorboard報錯問題及解決

    pytorch使用tensorboard報錯問題及解決

    這篇文章主要介紹了pytorch使用tensorboard報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python使用回溯算法實現(xiàn)列表全排列

    python使用回溯算法實現(xiàn)列表全排列

    這篇文章主要介紹了python使用回溯算法實現(xiàn)列表全排列,研究的問題是輸入列表L(不含重復(fù)元素),輸出L的全排列,全排列問題,可以用回溯法解決,需要的朋友可以參考下
    2023-11-11

最新評論