1. 程式人生 > 程式設計 >基於python實現語音錄入識別程式碼例項

基於python實現語音錄入識別程式碼例項

這篇文章主要介紹瞭如何通過python實現語音錄入識別,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、介紹

1.第一步錄音存入本地

2.呼叫百度語音識別sdk

注意點:百度語音識別對聲音源有要求,位元率必須是256kbps

二、程式碼

#安裝必要庫
pip install baidu-aip #百度sdk
pip install pyaudio
import wave
import pyaudio
from aip import AipSpeech

def record():
 # 定義資料流塊
 CHUNK = 1024
 FORMAT = pyaudio.paInt16
 # 想要百度識別,下面這兩引數必須這樣設定,使得位元率為256kbps
 CHANNELS = 1
 RATE = 16000
 # 錄音時間
 RECORD_SECONDS = 8
 # 要寫入的檔名
 WAVE_OUTPUT_FILENAME = "output.wav"
 # 建立PyAudio物件
 p = pyaudio.PyAudio()

 # 開啟資料流
 stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)

 print("* recording")

 # 開始錄音
 frames = []
 for i in range(0,int(RATE / CHUNK * RECORD_SECONDS)):
  data = stream.read(CHUNK)
  frames.append(data)

 print("* done recording")
 # 停止資料流
 stream.stop_stream()
 stream.close()

 # 關閉PyAudio
 p.terminate()

 # 寫入錄音檔案
 wf = wave.open(WAVE_OUTPUT_FILENAME,'wb')
 wf.setnchannels(CHANNELS)
 wf.setsampwidth(p.get_sample_size(FORMAT))
 wf.setframerate(RATE)
 wf.writeframes(b''.join(frames))
 wf.close()
def ASR():
 # 錄音
 record()

 """ 你的 APPID AK SK """
 APP_ID = '****'
 API_KEY = '****'
 SECRET_KEY = '****'

 client = AipSpeech(APP_ID,API_KEY,SECRET_KEY)

 # 讀取檔案
 def get_file_content(filePath):
  with open(filePath,'rb') as fp:
   return fp.read()

 # 識別本地檔案
 res=client.asr(get_file_content('output.wav'),'wav',16000,{
  'dev_pid': 1536,})

 print(res)
if __name__ == '__main__':
 ASR()

三、語音命令控制程式

import wave
import pyaudio
from aip import AipSpeech
import win32api

def record():
 # 定義資料流塊
 CHUNK = 1024
 FORMAT = pyaudio.paInt16
 # 想要百度識別,下面這兩引數必須這樣設定,使得位元率為256kbps
 CHANNELS = 1
 RATE = 16000
 # 錄音時間
 RECORD_SECONDS = 8
 # 要寫入的檔名
 WAVE_OUTPUT_FILENAME = "output.wav"
 # 建立PyAudio物件
 p = pyaudio.PyAudio()

 # 開啟資料流
 stream = p.open(format=FORMAT,})
 if not res.get("err_no"):
  return res.get("result")[0]
 return res.get("err_no")

def control(order):
 # 命令對應的程式路徑
 open_order={"開啟QQ":r"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe","開啟記事本":r"D:\Notepad++\notepad++.exe","開啟瀏覽器":r"C:\Users\ffm11\AppData\Roaming\360se6\Application\360se.exe"}
 res=open_order.get(order)
 if res:
  # 引數1:用於指定父視窗控制代碼。當函式呼叫過程出現錯誤時,它將作為Windows訊息視窗的父視窗
  # 引數2:用於指定要進行的操作。
  # “open”操作表示執行由lpFile引數指定的程式,或開啟由lpFile引數指定的檔案或資料夾;
  # “print”操作表示列印由lpFile引數指定的檔案;
  # “explore”操作表示瀏覽由lpFile引數指定的資料夾。
  # 引數3:用於指定要開啟的檔名、要執行的程式檔名或要瀏覽的資料夾名。
  # 引數4:若lpFile引數是一個可執行程式,則此引數指定命令列引數,否則此引數應為NULL.
  # 引數5:若lpFile引數是一個可執行程式,則此引數指定程式視窗的初始顯示方式,否則此引數應設定為0。
  # 這個引數常用的常數:
  # SW_HIDE 隱藏視窗,活動狀態給令一個視窗
  # SW_MINIMIZE 最小化視窗,活動狀態給令一個視窗
  # SW_RESTORE 用原來的大小和位置顯示一個視窗,同時令其進入活動狀態
  # SW_SHOW 用當前的大小和位置顯示一個視窗,同時令其進入活動狀態
  # SW_SHOWMAXIMIZED 最大化視窗,並將其啟用
  # SW_SHOWMINIMIZED 最小化視窗,並將其啟用
  # SW_SHOWMINNOACTIVE 最小化一個視窗,同時不改變活動視窗
  # SW_SHOWNA 用當前的大小和位置顯示一個視窗,不改變活動視窗
  # SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個視窗,同時不改變活動視窗
  win32api.ShellExecute(0,'open',res,'',1)
 else:
  print("語音命令失敗")

if __name__ == '__main__':
 order=ASR()
 control(order.rstrip("。"))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。