python录音并调用百度语音识别接口的示例


Posted in Python onDecember 01, 2020
#!/usr/bin/env python
import requests
import json
import base64
import pyaudio
import wave
import os
import psutil


#首先配置必要的信息
def bat(voice_path):
  baidu_server = 'https://aip.baidubce.com/oauth/2.0/token?'
  grant_type = 'client_credentials'
  client_id = 'uj70rS1LiwZ9sQDvMSUqKsie' #API KEY
  client_secret = 'Q88eav41PzeNLczZ3hlRjhR8e4WShXwD' #Secret KEY  这里可以自己去百度注册,这里是我的API KEY 和 Secret KEY

  #合成请求token的url
  url = baidu_server+'grant_type='+grant_type+'&client_id='+client_id+'&client_secret='+client_secret

  #获取token
  res = requests.get(url).text
  data = json.loads(res)
  token = data['access_token']

  #设置音频的属性,采样率,格式等
  VOICE_RATE = 8000
  FILE_NAME = voice_path
  # USER_ID = '16241950' #这里的id随便填填就好啦,我填的自己昵称
  FILE_TYPE = 'wav'
  CUID="wate_play"
  #读取文件二进制内容
  f_obj = open(FILE_NAME, 'rb')
  content = base64.b64encode(f_obj.read())  # 百度语音识别需要base64编码格式
  speech = content.decode("utf-8")
  size = os.path.getsize(FILE_NAME)

  #json封装
  datas = json.dumps({
    'format': FILE_TYPE,
    'rate': VOICE_RATE,
    'channel': 1,
    'cuid': CUID,
    'token': token,
    'speech': speech,
    'len': size,
    "dev_pid":"1536"
  })
  return datas

#设置headers和请求地址url
def post(datas):
  headers = {'Content-Type':'application/json'}
  url = 'https://vop.baidu.com/server_api'
  # url = "http://vop.baidu.com/server_api"

  #用post方法传数据
  request = requests.post(url, datas, headers)
  result = json.loads(request.text)
  text = result.get("result")
  if result['err_no'] == 0:
    return text
  else:
    return "Error"


def get_audio(filepath):
  input("回车开始录音 >>>")   #输出提示文本,input接收一个值,转为str,赋值给aa
  CHUNK = 256         #定义数据流块
  FORMAT = pyaudio.paInt16  #量化位数(音量级划分)
  CHANNELS = 1        # 声道数;声道数:可以是单声道或者是双声道
  RATE = 8000        # 采样率;采样率:一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHz
  RECORD_SECONDS = 5     #录音秒数
  WAVE_OUTPUT_FILENAME = filepath   #wav文件路径
  p = pyaudio.PyAudio()        #实例化

  stream = p.open(format=FORMAT,
          channels=CHANNELS,
          rate=RATE,
          input=True,
          frames_per_buffer=CHUNK)
  print("*"*10, "开始录音:请在5秒内输入语音")
  frames = []                         #定义一个列表
  for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):   #循环,采样率11025 / 256 * 5
    data = stream.read(CHUNK)                #读取chunk个字节 保存到data中
    frames.append(data)                   #向列表frames中添加数据data
  # print(frames)
  print("*" * 10, "录音结束\n")

  stream.stop_stream()
  stream.close()     #关闭
  p.terminate()      #终结

  wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')         #打开wav文件创建一个音频对象wf,开始写WAV文件
  wf.setnchannels(CHANNELS)                  #配置声道数
  wf.setsampwidth(p.get_sample_size(FORMAT))         #配置量化位数
  wf.setframerate(RATE)                    #配置采样率
  wf.writeframes(b''.join(frames))              #转换为二进制数据写入文件
  wf.close()       #关闭
  return


def check_disk():
  list_drive = psutil.disk_partitions() # 找出本地磁盘列表,保存的是结构体对象
  list_disk = []
  for drive in list_drive:
    list_disk.append(drive.device)
  return list_disk


if __name__ == '__main__':
  list_disk = check_disk() # 检索本地磁盘
  dirname_path = os.path.join(list_disk[0], "voice") # 设置语音文件存放路径, 
                                  (mac os下需要自己定存储路径)
  if not os.path.exists(dirname_path):
    os.makedirs(dirname_path)

  filename = "voice.wav" # 定义语音文件名
  in_path = os.path.join(dirname_path, filename)

  get_audio(in_path) # 录音

  datas = bat(in_path) # 封装百度语音识别需要的配置信息,返回请求头
  res = post(datas) # 连接百度语音识别接口,得到识别结果
  print("识别结果:",res[0])

实现效果:

python录音并调用百度语音识别接口的示例

在上述代码中,需要装到requests、psutil、pyaudio等库,其中pyaudio这个库在python3环境下装比较特殊,

windows环境下具体步骤如下:

第一步:下载whl文件支持

url:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

python录音并调用百度语音识别接口的示例

注意:

下载自己python解释器对应版本的

不要下载错了,资源很多 

第二步:打开cmd,cd 进入下载的whl所在目录

   执行命令:pip install Twisted-18.7.0-cp36-cp36m-win_amd64.whl     #  下载的什么版本,后面就跟什么版本 

第三步:执行命令:pip install pyaudio     安装

如果本地同时装有python2和python3,想装到python3里可以在cmd命令里把 pip 改成 pip3 即可

mac os 下安装pyaudio步骤如下:

python录音并调用百度语音识别接口的示例

到这里就结束啦!

以上就是python录音并调用百度语音识别接口的示例的详细内容,更多关于python 录音并调用语音识别接口的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
Python装饰器基础详解
Mar 09 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
python编程羊车门问题代码示例
Oct 25 Python
深入浅析Python的类
Jun 22 Python
python使用tornado实现简单爬虫
Jul 28 Python
学生信息管理系统python版
Oct 17 Python
Python应用领域和就业形势分析总结
May 14 Python
pymysql 开启调试模式的实现
Sep 24 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Python标准库itertools的使用方法
Jan 17 Python
用python爬虫批量下载pdf的实现
Dec 01 #Python
python3字符串输出常见面试题总结
Dec 01 #Python
python3中数组逆序输出方法
Dec 01 #Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 #Python
python爬虫请求头的使用
Dec 01 #Python
在pycharm创建scrapy项目的实现步骤
Dec 01 #Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 #Python
You might like
php 输出双引号"与单引号'的方法
2010/05/09 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
一个javascript参数的小问题
2008/03/02 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js中function()使用方法
2013/12/24 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
如何使用python写截屏小工具
2020/09/29 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
同学会邀请书大全
2014/01/12 职场文书
卖车协议书范例
2014/09/16 职场文书