lty/qy_lty/aiapp/audio/test.py
2026-03-17 13:17:02 +08:00

160 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import json
import http.client
from django.conf import settings
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
class AliyunAudioService():
def __init__(self, api_key, api_secret, app_id):
self.app_id = app_id
# 创建AcsClient实例
self.client = AcsClient(
api_key,
api_secret,
"cn-shanghai"
)
def get_token(self):
# 创建request并设置参数。
request = CommonRequest()
request.set_method('POST')
request.set_domain('nls-meta.cn-shanghai.aliyuncs.com')
request.set_version('2019-02-28')
request.set_action_name('CreateToken')
try :
response = self.client.do_action_with_exception(request)
print(response)
jss = json.loads(response)
if 'Token' in jss and 'Id' in jss['Token']:
token = jss['Token']['Id']
expire_time = jss['Token']['ExpireTime']
print("token = " + token)
print("expireTime = " + str(expire_time))
return token
except Exception as e:
print(e)
def synthesize_speech(self, text, language='en'):
host = 'nls-gateway-cn-shanghai.aliyuncs.com'
url = 'https://' + host + '/stream/v1/tts'
# 设置HTTPS Headers。
http_headers = {
'Content-Type': 'application/json'
}
# 设置HTTPS Body。
body = {'appkey': self.app_id, 'token': self.get_token(), 'text': text, 'format': 'mp3', 'sample_rate': 16000}
body = json.dumps(body)
print('The POST request body content: ' + body)
# Python 2.x请使用httplib。
# conn = httplib.HTTPSConnection(host)
# Python 3.x请使用http.client。
conn = http.client.HTTPSConnection(host)
conn.request(method='POST', url=url, body=body, headers=http_headers)
# 处理服务端返回的响应。
response = conn.getresponse()
print('Response status and response reason:')
print(response.status ,response.reason)
content_type = response.getheader('Content-Type')
print(content_type)
body = response.read()
if 'audio/mpeg' == content_type :
with open('./test.mp3', mode='wb') as f:
f.write(body)
print('The POST request succeed!')
else :
print('The POST request failed: ' + str(body))
conn.close()
return 'test.mp3'
def recognize_speech(self, audio_data, language='en') -> str:
app_key = self.app_id
token = self.get_token()
# 服务请求地址
url = 'https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/asr'
# audioFile = '/path/to/nls-sample-16k.wav'
# audioFile = './uploaded_files/audio.wav'
# audio_format = 'pcm'
audio_format = 'mp3'
sample_rate = 16000
enable_punctuation_prediction = True
enable_inverse_text_normalization = True
enable_voice_detection = False
# 设置RESTful请求参数
request = url + '?appkey=' + app_key
request = request + '&format=' + audio_format
request = request + '&sample_rate=' + str(sample_rate)
if enable_punctuation_prediction :
request = request + '&enable_punctuation_prediction=' + 'true'
if enable_inverse_text_normalization :
request = request + '&enable_inverse_text_normalization=' + 'true'
if enable_voice_detection :
request = request + '&enable_voice_detection=' + 'true'
# print('Request: ' + request)
# # 读取音频文件
# with open(audioFile, mode = 'rb') as f:
# audioContent = f.read()
host = 'nls-gateway-cn-shanghai.aliyuncs.com'
# 设置HTTPS请求头部
http_headers = {
'X-NLS-Token': token,
'Content-type': 'application/octet-stream',
'Content-Length': len(audio_data)
}
# Python 2.x使用httplib
# conn = httplib.HTTPSConnection(host)
# Python 3.x使用http.client
conn = http.client.HTTPSConnection(host)
conn.request(method='POST', url=request, body=audio_data, headers=http_headers)
response = conn.getresponse()
# print('Response status and response reason:')
# print(response.status ,response.reason)
body = response.read()
try:
print('Recognize response is:')
body = json.loads(body)
print(body)
status = body['status']
if status == 20000000 :
result = body['result']
print('Recognize result: ' + result)
return result
else :
print('Recognizer failed!')
return '识别失败'
except ValueError:
print('The response is not json format string')
conn.close()
return '识别失败2'
if __name__ == '__main__':
audio_ser = AliyunAudioService('LTAI5tATVLJWRY2NT8HM8xuB', 'horkstB0bEw4HPsx4sOoMLfOtzJYJC', '0kdFDQxqA8qZYGwA')
audio_ser.synthesize_speech('你好,你是谁啊')