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

2023-06-1704:22:13 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

构建智能的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 + '/' + '2020-05-20T20:40:00Z' + '/' + '1800' + '/' + signature)

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

authorization_rs.append('x-bce-date:2020-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

腾讯云正在大促:点击 https://2bcd.com/go/tx/进入最新活动页】领取无门槛代金券,附云服务器价格表,2核2G4M轻量应用服务器99元1年,新老用户都可以买,可以享受1次续费99元一年、135元15个月、三年560元,MySQL云数据库59元1年起,2核2G3M配置82元1年,2核4G5M配置188元一年、3年900元,4核8G12M轻量服务器880元15个月,8核16G配置1890元15个月,更多16核32G28M带宽和云服务器CVM标准型S5、GPU服务器、CVM标准型SA2租用优惠价格如下,可以 点此进入最新活动页 查看当前最新的优惠券和活动信息。还可以领下10元无门槛代金券:点此直达 阿里云限量超级红包:点击领取】5亿上云补贴和2088元满减代金券,阿里云服务器租用费用最新价格表【点击了解】,最便宜轻量应用服务器2核2G3M带宽82元1年,ECS云服务器2核2G3M带宽99元一年,ECS u1实例2核4G5M带宽优惠价格199元一年,香港30M带宽轻量服务器24元1个月、288元一年,4核8G服务器706元一年,ECS云服务器4核16G10M带宽30元1个月、90元3个月,云服务器8核32G10M带宽109元1个月、327元3个月。阿里云产品最高降价55%,点击 https://2bcd.com/go/aliyun/ 进入最新活动页了解。 腾讯云续费贵,一次性买3年/5年,免得续费贵。3年轻量 2核2G 4M 560元;3年轻量 2核4G 5M 3年900元,活动入口:点击前往(下拉到“爆品专区”即可看到)。 老用户享新人优惠的方法:用Qq登录、1人可注册3个新账号/用家人朋友的身份注册新号(点击注册新账号)。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: