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,
                    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,
    })
    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(""))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM