百度云语音识别接口使用:


百度云语音识别接口文档:https://cloud.baidu.com/doc/SPEECH/ASR-API.html#JSON.E6.96.B9.E5.BC.8F.E4.B8.8A.E4.BC.A0

一. 解析用户语音输入,转换为字符串

  • 捕获用户的语音输入

    • windows安装
    1. pip3 install PyAudio   #如果报错可以尝试2,3步骤 丶 如果用pip3下载安装报错可以在python第三方安装包下载地址搜索下载安装https://pypi.org/
    2. python -m pip install --upgrade pip
    3. pip install PyAudio
    • CentOS 7.4 下安装PyAudio 需要先安装 portaudio (采用的方法,可行)

      1、在安装pyaudio时,报错failed error: portaudio.h: 没有那个文件或目录

      2、pyaudio的运行需要依赖于portaudio这个库,应该先安装一个portaudio库

      3、portaudio安装步骤:

        a)下载portaudio库http://portaudio.com/download.html

        b)将下载的文件进行解压

        c)进入解压后的portaudio文件,依次执行命令:

          ./configure

          make

          make install

        d)进入~/.bashrc文件:vim ~/.bashrc

          在文件最后一行加入  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

          然后执行命令source ~/.bashrc

      4、到此portaudio库安装成功

      5、安装pyaudio库,pip3 install pyaudio (wget https://files.pythonhosted.org/packages/ab/42/b4f04721c5c5bfc196ce156b3c768998ef8c0ae3654ed29ea5020c749a6b/PyAudio-0.2.11.tar.gz)

      成功后显示版本为0.2.11

二,音频数据给到百度云

  • 音频数据的格式规则  
    • format:格式  wav
    • rate:采样率  16000
    • channel:声道  1单声道
    • cuid:用户ID  MAC地址,只要保证唯一
    • token:身份识别  在百度云接口平台注册后,才能拿到
    • dev_pid:  1536英文,1537中文
    • len:数据的长度 原始的  len(data) ->
    • speech:数据对象  
        1,base64 编码
        2,经常用于网络中的音频图像二进制的数据传输
        3,base64.b64encode(data)
  • **JSON**格式POST上传本地音频流数据
  • header:Content-Type:application/json
    • 标识,
    • GET:直接获取服务器上的数据
    • POST:客户端先向服务端提交数据,服务端在返回,POST一定会向服务器提交数据
  • RESTFUL:资源定义成了连接(url 同一资源,这个要了解一下)
    • 连接,www.baidu.com
    • POST提交数据,
    • WEB服务 HTTP协议
    • RESTFUL:ip/?shutdown   #关机命令
  • http://vop.baidu.com/server_api        #百度云api接口地址,我们的语音信息提交到这个接口就行了

三,捕获百度云返回的结果

  • JSON的返回    #无论什么方式上传都会以JSON格式返回结果
    • json.loads() 解析json数据变为Python中数据对象 字典
    • j'son.dumps() dict -> dict
  • result   #音频返回的结果在result字段中
四,接口使用:
  • PyAudio:对象,实例化一个设备
  • pa.open(format=存储位深 int 16位, channels=声道,rate=采样率,input=True,frame_per_buffer=1024)
五,注册登录百度云管理中心创建任务         ### https://console.bce.baidu.com/ai/?_=1545815700081#/ai/speech/app/create
 六,代码编写如下:
  1. import time
  2. from pyaudio import PyAudio,paInt16
  3. from urllib.request import urlopen,Request #专门处理http协议的模块
  4. import json
  5. import base64
  6. def play_audio(data): #播放音频
  7. pa = PyAudio() #设备实例化
  8. equip = pa.open(
  9. format=paInt16,
  10. channels=1, #单声道
  11. rate=16000,
  12. output=True,
  13. ) #打开设备,并且支持输出
  14. equip.write(data) #设备的write函数,写入音频数据
  15. equip.stop_stream() #关闭写入
  16. equip.close()
  17. pa.terminate() #关闭设备实例
  18. def record_audio(): #输入音频
  19. pa = PyAudio() #设备实例化
  20. equip = pa.open(
  21. format=paInt16,
  22. channels=1,
  23. rate=16000,
  24. input=True,
  25. frames_per_buffer=1024,
  26. ) #打开设备,并且支持输入
  27. data = [] #存储未来的语音输入
  28. #一截一截的语音数据 [b'1',b'2',]
  29. times = 0 #用来控制用户输入语音长度的
  30. start = time.time()
  31. while times < 50: #3S
  32. data.append(equip.read(1024)) #读取设备中此时的语音数据
  33. times += 1
  34. end = time.time()
  35. print('[TALK] %.2f' % (end - start)) #%.2f 保留2位小数点有效位数字
  36. data = b''.join(data) #完整的音频流数据
  37. equip.close()
  38. pa.terminate() #关闭设备实例
  39. return data
  40. def baidu_token():
  41. API_Key = 'oAcBP47GDDpj6XIHWmcSkeRi'
  42. Secret_Key = 'ba2EKROswCy6KXzLdTpnGqPnPhHSFHU7'
  43. grant_type = 'client_credentials'
  44. url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=%s&client_id=%s&client_secret=%s'
  45. response = json.loads(urlopen(url % (grant_type,API_Key,Secret_Key)).read().decode())
  46. access_token = response['access_token']
  47. return access_token
  48. def baidu_fenxi(data):
  49. url = 'http://vop.baidu.com/server_api'
  50. data_len = len(data)
  51. audio_data = base64.b64encode(data).decode()
  52. access_token = baidu_token()
  53. post_data = json.dumps({
  54. "format":"wav",
  55. "rate":16000,
  56. "dev_pid":1536,
  57. "channel":1,
  58. "token":access_token,
  59. "cuid":"00-50-56-C0-00-08",
  60. "len":data_len,
  61. "speech":audio_data,
  62. }).encode() #变为json的二进制
  63. headers = {'Content-Type':'application/json'}
  64. req = Request(url=url,headers=headers,data=post_data)
  65. result = json.loads(urlopen(req).read().decode()).get('result')
  66. if result:
  67. return result[0]
  68. else:
  69. return None
  70. def main():
  71. data = record_audio()
  72. res = baidu_fenxi(data)
  73. print(res)
  74. if __name__ == '__main__':
  75. #程序入口
  76. main()
运行结果:

  1. E:\python学习资料\上课代码编写\代码练习py>python e:/python学习资料/上课代码编写/代码练习py/百度云.py
  2. [TALK] 3.21
  3. 你好  
 
 
 

35.百度云语音识别接口使用及PyAudio语音识别模块安装的更多相关文章

  1. C#调用百度云存储接口上传文件

    因前几日见园子里有人说可以把网站静态文件放在百度上,于是去百度开放平台看了看,发现之前那篇文章不是调的云存储接口啊... 于是自己写了个C#能调百度云存储的例子(百度云开放平台只提供php.java. ...

  2. 百度云服务接口错误:Parameter invalid, the key input with filter parameter is not searchfilter column key

    百度LBS云服务接口: 地址:http://lbsyun.baidu.com/index.php?title=lbscloud/api/geosearch 访问接口:http://api.map.ba ...

  3. 借助百度云API进行人脸识别

    前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测.笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病, ...

  4. 百度云语音识别,Audio2Txt(c#)

    百度云识别没有提供c#版本的sdk,下面给个c#的 1.打开网址http://developer.baidu.com/ 2.登陆 3.管理控制台>开发者服务管理 4.创建工程 5.输入名称,点击 ...

  5. python录音并调用百度语音识别接口

    #!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os ...

  6. python调用百度语音识别接口实时识别

    1.本文直接上干货 奉献代码:https://github.com/wuzaipei/audio_discern/tree/master/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5% ...

  7. 利用百度云接口实现车牌识别·python

    一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和变异第三方库麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开始 ...

  8. python利用百度云接口实现车牌识别

    一个小需求---实现车牌识别. 目前有两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) ! 一开始准备使 ...

  9. Android推送服务——百度云推送

    一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...

随机推荐

  1. 工作 巧遇 sql 查询 一组数据中 最新的一条

    SELECT * FROM rsl a, (SELECT CODE, max(time_key) time_key FROM rsl GROUP BY CODE ) b WHERE a. CODE = ...

  2. paramiko远程上传下载文件

    import paramiko import sys user = "root" pwd = " # 上传文件 def sftp_upload_file(server_p ...

  3. LNOI2018 劈配

    主要思路为连反向边. 对于本题,贪心策略,依次决定每个人的最优解 但因为每人达到的最优解可能有多种方式,如果每个都尝试就会超时,所以只能先采取其中一种 并将这个方案连反向边,其它方案连正向边 这样对于 ...

  4. 下拉框 显示name 隐藏code

    暂未做详细整理, 后期有机会完善 jsp 是否有效: <s:select id="queryIsValid" name="configBean.queryIsVal ...

  5. mfc编程之发送wm_paint消息时绘图界面只出现一瞬间

    实现的功能是在打开一个文件然后把文件的图形信息绘制在picture控件上. 问题描述:我把绘制的操作放在了窗口中onpaint()函数里,打开文件后发送一个wm_paint的消息,发现picture控 ...

  6. Drainage Ditches (HDU - 1532)(最大流)

    HDU - 1532 题意:有m个点,n条管道,问从1到m最大能够同时通过的水量是多少? 题解:最大流模板题. #include <iostream> #include <algor ...

  7. 1656:Combination

    一本通1656:Combination 1656:Combination 时间限制: 1000 ms         内存限制: 524288 KB提交数: 89     通过数: 49 [题目描述] ...

  8. 访问redis集群提示连接超时的问题

    上周在服务器通过docker部署了一个单机版redis集群,今天通过StackExchange.Redis访问的时候报了这个错: 提示我把超时时间设置一下,我去服务器上找到redis的配置文件,发现不 ...

  9. Maven版本问题导致的 unable to import maven project, see logs for details. 问题

    新电脑安装了基础环境后,jdk,maven也都安装好了,idea安装后,导入Java项目一切正常,但是idea中code一直导入import依赖包出现问题,错误提示:unable to import ...

  10. 7 AOP

    AOP:Aspect Oriented Programming 面向切面编程.AOP是对面向对象编程的一种补充,在运行时动态地将代码切入到类的指定方法.指定位置的编程思想.将不同的方法的同一位置抽象成 ...