构建智能的Linux语音识别与语音合成系统 – 实现人机交互的新时代

 2023-12-25  阅读 5  评论 0

摘要:在当今信息化时代,人机交互已经成为日常生活中不可缺少的一部分。而语音技术作为一种更加自然、便捷的交互方式,也越来越受到人们的关注。本文将介绍一个使用Linux操作系统构建的智能语音识别与语音合成系统,为用户提供更加便利的人机交互体验。 一、系统概述 本系统基于L

构建智能的Linux语音识别与语音合成系统 – 实现人机交互的新时代

在当今信息化时代,人机交互已经成为日常生活中不可缺少的一部分。而语音技术作为一种更加自然、便捷的交互方式,也越来越受到人们的关注。本文将介绍一个使用Linux操作系统构建的智能语音识别与语音合成系统,为用户提供更加便利的人机交互体验。

一、系统概述

本系统基于Linux操作系统,采用Python语言编写。主要分为两个模块:语音识别模块和语音合成模块。其中,语音识别模块通过调用百度AI的语音识别API,将用户输入的语音转换为文本。语音合成模块通过调用百度AI的语音合成API,将系统生成的文本转换为语音输出。用户可以通过麦克风输入语音指令,系统将自动识别并执行操作,同时将执行结果以语音形式返回给用户。

二、系统实现

1.语音识别模块

在语音识别模块中,我们使用了百度AI的语音识别API。由于百度AI提供了Python SDK,因此我们可以轻松地通过Python调用API。

首先,为了使用百度AI的语音识别API,我们需要在百度AI开放平台申请API Key和Secret Key,并安装百度AI Python SDK。

接着,我们需要用PyAudio库录制用户的语音,并将录制的语音文件转换成PCM格式。最后,我们通过API将PCM格式的语音文件上传至百度AI主机,并获取识别结果。

以下是语音识别模块的代码:

```python

import urllib.parse

import hmac

import hashlib

import base64

from aip import AipSpeech

import pyaudio

import wave

APP_ID = 'YOUR_APP_ID'

API_KEY = 'YOUR_API_KEY'

SECRET_KEY = 'YOUR_SECRET_KEY'

def generate_request_param():

rate = 16000

format = 'pcm'

channel = 1

cuid = '123456PYTHON'

dev_pid = 1537

param = {'dev_pid': dev_pid, 'cuid':cuid, 'rate':rate, 'channel':channel, 'format':format}

return param

def generate_request_url():

url = ''

grant_type = 'client_credentials'

client_id = API_KEY

client_secret = SECRET_KEY

request_url = url + '?grant_type=' + grant_type + '&client_id=' + client_id + '&client_secret=' + client_secret

return request_url

def get_token():

request_url = generate_request_url()

token_response = urllib.request.urlopen(request_url).read()

token_content = json.loads(token_response.decode('utf-8'))

return token_content['access_token']

def get_file_content(filepath):

with open(filepath, 'rb') as fp:

return fp.read()

def recognize():

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

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

token = get_token()

request_url = '' + '?access_token=' + token

audio_data = get_file_content(WAVE_OUTPUT_FILENAME)

params = generate_request_param()

headers = {

'Content-Type': 'audio/' + params['format'] + '; rate=' + str(params['rate']),

'Content-Length': len(audio_data)

}

signature_headers = headers.copy()

signature_headers['Host'] = 'vop.baidu.com'

signature_rs = []

for key, value in signature_headers.items():

signature_rs.append(key + ': ' + value)

signature = 'n'.join(signature_rs)

http_method = 'POST'

canonical_uri = '/server_api'

canonical_querystring = ''

canonical_headers = 'Host:vop.baidu.comn' + signature

canonical_request = http_method + 'n'

+ canonical_uri + 'n'

+ canonical_querystring + 'n'

+ canonical_headers + 'nn'

+ hashlib.md5(audio_data).hexdigest()

secret_key_bytes = bytes(SECRET_KEY, encoding='utf-8')

signature_bytes = bytes(signature, encoding='utf-8')

hmac_obj = hmac.new(secret_key_bytes, signature_bytes, hashlib.sha1)

hmac_str = base64.b64encode(hmac_obj.digest()).decode('utf-8')

authorization_rs = []

authorization_rs.append('bce-auth-v1' + '/' + API_KEY + '/' + '2023-05-20T20:40:00Z' + '/' + '1800' + '/' + signature)

authorization_rs.append('host:' + 'vop.baidu.com')

authorization_rs.append('x-bce-date:2023-05-20T20:40:00Z')

authorization_rs.append('x-bce-content-sha256:' + hashlib.sha256(audio_data).hexdigest())

authorization = 'n'.join(authorization_rs)

headers['Authorization'] = authorization

response = requests.post(request_url, headers=headers, data=audio_data)

return response.json()['result'][0]

```

2.语音合成模块

在语音合成模块中,我们同样使用了百度AI的语音合成API。与语音识别模块相似,我们同样需要在百度AI平台上申请API Key和Secret Key,然后安装百度AI Python SDK。

接着,我们将需要合成的文本通过API传递给百度AI主机,主机将返回一个PCM格式的语音文件,我们将其写入一个WAV文件,最后通过PyAudio库播放语音。

以下是语音合成模块的代码:

per = 0

spd = 5

pit = 5

vol = 5

aue = 6

param = {'per': per, 'spd': spd, 'pit': pit, 'vol': vol, 'aue': aue}

def generate_request_url(text):

url = ''

body = urllib.parse.urlencode({'tex': text, 'tok': token, 'cuid': '123456PYTHON', 'lan': 'zh', 'ctp': 1})

request_url = url + '?' + body

def get_audio_content(url):

response = requests.get(url)

return response.content

def get_audio_file(content, filename):

with open(filename, 'wb') as f:

f.write(content)

def play_audio(filename):

wf

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/151335.html

发表评论:

验证码

管理员

  • 内容1196554
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0166秒, 内存占用359.5 KB, 访问数据库18次