1.录制音频文件

使用pyaudio进行录音,并保存录音文件,文件名为output.wav,代码如下:

import pyaudio

import wave

CHUNK = 1024

FORMAT = pyaudio.paInt16

CHANNELS = 1

RATE = 16000

RECORD_SECONDS = 5

WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,

                channels=CHANNELS,

                rate=RATE,

                input=True,

                frames_per_buffer=CHUNK)


print("开始录音,请说话...")

frames = []


for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):

    data = stream.read(CHUNK)

    frames.append(data)

print("录音结束。")


stream.stop_stream()

stream.close()

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()

2.语音识别

使用API调用百度智能云中的语音技术

百度智能云-登录

点击创建应用

应用名随便填,应用归属个人,应用描述随便填。

创建后生成对应的API_Key和SECRET_Key(后面要用)。

可以用API调试应用,把第一步生成的录音文件传入,查看应用是否可用,代码如下:

​
import base64
import urllib
import requests
import json

API_KEY = "GO40EP****lr5Oql"
SECRET_KEY = "4Ug8LK****VPcmPE"

def main():
       
    url = "https://vop.baidu.com/server_api"
   
    # speech 可以通过 get_file_content_as_base64("C:\fakepath\output.wav",False) 方法获取
    payload = json.dumps({
        "format": "wav",
        "rate": 16000,
        "channel": 1,
        "cuid": "FBcahJJZPVmENtIifK8MN5XaCpZh8zrn",
        "token": get_access_token(),
        "speech": "UklGRiRwAgBXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQBwAgAAAAAA//8AAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAA...",
        "len": 159788
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
   
    response = requests.request("POST", url, headers=headers, data=payload)
   
    print(response.text)
   

def get_file_content_as_base64(path, urlencoded=False):
    """
    获取文件base64编码
    :param path: 文件路径
    :param urlencoded: 是否对结果进行urlencoded
    :return: base64编码信息
    """
    with open(path, "rb") as f:
        content = base64.b64encode(f.read()).decode("utf8")
        if urlencoded:
            content = urllib.parse.quote_plus(content)
    return content

def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()

​

3.大模型

接入百度千帆大模型,具体可以参考这篇文章:https://blog.csdn.net/dream_of_grass/article/details/135535369?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-135535369-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-135535369-null-null.nonecase

4.语音输出

使用pyttsx,代码如下:

import pyttsx3 as pyttsx

engine = pyttsx.init()

a = "你好"

engine.say(a)

engine.runAndWait()

总体效果:

总的项目代码,可以参考我的github:https://github.com/Unconsoled/SR-LLM

更多推荐