利用django实现百度AI 语音识别、合成 RESTful API Python SDK
官方文档:https://ai.baidu.com/ai-doc/SPEECH/tk4o0bm3v
1. 我们要创建百度ai的语音技术应用
2. 查看应用的 appid apikey secretkey
3. 安装使用Python SDK有如下方式:
- 如果已安装pip,执行
pip install baidu-aip
即可。 - 如果已安装setuptools,执行
python setup.py install
即可。
4. 上代码
#views.py from aip import AipSpeech import os from rest_framework.response import Response from rest_framework.views import APIView import uuid from django_test.settings import UPLOAD_ROOT APP_ID = '你的appid' API_KEY = '你的apikey' SECRET_KEY = '你的secretkey' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) class Get_pcmAPI(APIView): def post(self,request): #获取到pcm对象 data_pcm = request.data.get('pcm_audio') #利用uuid给文件对象级别名防止重复 pcm_name = str(uuid.uuid4()) + '.pcm' #存储到静态目录下 upload_ = os.path.join(UPLOAD_ROOT,pcm_name) with open(upload_,'wb')as pf: #将对象以二进制留写入目录 chunks将文件分成快上传 for i in data_pcm.chunks(): pf.write(i) #获取文件的方法 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content(upload_), 'pcm', 16000, { 'dev_pid': 1536, }) print(res) #{'corpus_no': '6845169661962051650', 'err_msg': 'success.', 'err_no': 0, 'result': ['今天天气怎么样'], 'sn': '124218514521593765257'} return Response({'code':200,'message':res.get('result')[0]})
5. 送上前端小代码
利用 js小插件 `js-audio-recorder`
npm方式:npm i js-audio-recorder
官方文档:https://www.npmjs.com/package/js-audio-recorder
<template> <div> <Button @click="start_luyin">开始录音</Button> <Button @click="end_luyin">结束录音</Button> <p v-if="messge_audio"> 你刚刚说的话是: {{messge_audio}} </p> </div> </template> <script> import Recorder from 'js-audio-recorder'; var recorder = new Recorder({ sampleBits: 16, // 采样位数,支持 8 或 16,默认是16 sampleRate: 16000, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000 numChannels: 1, // 声道,支持 1 或 2, 默认是1 // compiling: false,(0.x版本中生效,1.x增加中) // 是否边录边转换,默认是false }); export default { data() { return { messge_audio: '', } }, //定义组建标签 components: {}, filters: {}, //自定义方法 methods: { start_luyin: function () { recorder.start().then(() => { alert('开始录音') }) }, end_luyin: function () { recorder.stop() var pcm_auido = recorder.getPCMBlob() console.log(pcm_auido) var fromdata = new FormData() fromdata.append('pcm_audio', pcm_auido) this.axios({ url: 'http://127.0.0.1:8000/getpcm/', method: 'post', data: fromdata }).then((res) => { this.messge_audio = res.data.message }) } }, //钩子方法 mounted: function () { console.log('这是初始化方法'); }, //监听属性 watch: {}, //计算属性 computed: {} } </script> <style> </style>