#!/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":""
})
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])

实现效果:

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

windows环境下具体步骤如下:

第一步:下载whl文件支持

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

注意:

下载自己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录音并调用百度语音识别接口的更多相关文章

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

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

  2. js调用百度地图接口

    原文:js调用百度地图接口 这是前几天公司做的新项目,上面需要用到地图的数据.第一次做这类型的东西没啥思路,咱们经理说,这东西简单,截个图存文件夹里调整好尺寸,数据库里存上图片的地址动态调用就行了.心 ...

  3. Winform调用百度地图接口简单示例

    1.首先用一个html文件调用百度地图接口(主要注册一个序列号):   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  4. Python实战---制作专属有声小说(调用百度语音合成接口)

    这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来. 百度云接口调用 百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调 ...

  5. Winform调用百度地图接口

    using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using ...

  6. PHP 最完美调用百度翻译接口代码示例 (原)

    php调用百度翻译最新接口代码 问       题:写的过程遇到了一个问题,url拼接好的原翻译内容,appid,sign的地址直接输出到浏览器可以打开看到翻译后的返回值,但是各种curl,file_ ...

  7. .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  8. PHP调用百度天气接口API

    //百度天气接口API $location = "北京"; //地区 $ak = "5slgyqGDENN7Sy7pw29IUvrZ"; //秘钥,需要申请,百 ...

  9. WebApiClientCore简约调用百度AI接口

    WebApiClientCore WebApiClient.JIT/AOT的netcore版本,集高性能高可扩展性于一体的声明式http客户端库,特别适用于微服务的restful资源请求,也适用于各种 ...

随机推荐

  1. 立即执行函数与For. . .in语句

    ㈠立即执行函数 ⑴定义:在函数定义完,立即被调用,这样的函数叫做立即执行函数 ⑵语法:函数对象() ⑶注意:立即执行函数往往只会执行一次 ⑷示例1: (function(){ alert(" ...

  2. H5页面测试总结

    前言 在最近几个项目中,小编接触了较多关于H5页面的测试,H5页面的测试除了业务逻辑功能测试外,其他部分的测试方法基本是可以通用的,在此对H5页面的一些通用测试方法进行总结分享给大家. H5页面介绍 ...

  3. FPGA数据舍入方式

    1,在Verilog代码中,常用的代码写法为直接截位: 2,在Vivado的IP核中常见的两种舍入方式为Truncation和Rounding, 3,在Matlab中常见的四种舍入函数为floor, ...

  4. react须知

    1. JSX是什么? 1)JSX是一种facebook发明的语法.就是将HTML和JS 可以同时书写.其实是一种js的语法糖. 但是浏览器不能识别,需要通过babel-loader来转译. @babe ...

  5. java+上传整个文件夹的所有文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  6. 小米oj 有多少个公差为2的等差数列

     有多少个公差为 2 的等差数列 序号:#31难度:有挑战时间限制:1000ms内存限制:10M 描述 给出一个正整数N(2<= N <=10000000),统计有多少公差为2的正整数等差 ...

  7. 【luoguP1991】 无线通讯网--最小生成树

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  8. JavaScript设计模式—适配器模式

    适配器模式介绍 旧接口格式和使用者不兼容,中间加一个适配器转换接口 在生活中,我们有许多的适配器,例如iPhone7以后的耳机接口从3.5mm圆孔接口更改成为了苹果专属的 lightning接口.许多 ...

  9. IDEA如何切换到括号外

    一般我们输入完括号后都会习惯性Enter或者Shift + Enter切换到括号外,结果却变成了: public void nothing() Enter → public void nothing( ...

  10. mysqldump 命令

    [参考文章]:mysqldump命令详解 mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 1. 参数介绍 默认为 true:表示默认情况下 ...