@

0. 太长不看系列,直接使用

1.2官网注册后拿到APISecret和APIKey,直接复制文章2.5demo代码,保存为real_time_audio_recognition.py,在命令行执行

python real_time_audio_recognition.py -client_secret=您的client_secret -client_id=您的client_id -file_path=test.wav --audio_format=wav --sample_rate=16000

使用中有任何问题,欢迎留言提问。

1. Python调用标贝科技语音识别websocket接口,实现语音转文字

1.1 环境准备:

Python 3

1.2 获取权限

标贝科技 https://ai.data-baker.com/#/index

填写邀请码fwwqgs,每日免费调用量还可以翻倍

1.2.1 登录

点击产品地址进行登录,支持短信、密码、微信三种方式登录。

1.2.2 创建新应用

登录后进入【首页概览】,各位开发者可以进行创建多个应用。包括一句话识别、长语音识别、录音文件识别;在线合成、离线合成、长文本合成。

1.2.3 选择服务

进入【已创建的应用】,左侧选择您需调用的AI技术服务,右侧展示对应服务页面概览(您可查询用量、管理套餐、购买服务量、自主获取授权、预警管理)。

1.2.4 获取Key&Secret

通过服务 / 授权管理,获取对应参数,进行开发配置(获取访问令牌token

拿到Key和Secret就可以正式使用啦!

2. 代码实现

2.1 获取access_token

在拿到Key和Secret后,我们还需要调用授权接口获取access_token,这个access_token有效时长是24小时。

# 获取access_token用于鉴权
def get_access_token(client_secret, client_id):
grant_type = "client_credentials"
url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}" \
.format(grant_type, client_secret, client_id) try:
response = requests.post(url)
response.raise_for_status()
except Exception as e:
print(response.text)
raise Exception
else:
access_token = json.loads(response.text).get('access_token')
return access_token

2.2 准备数据

需要根据接口要求设置参数,并且对音频数据进行分割

# 准备数据
def prepare_data(args, access_token):
# 读取音频文件
with open(args.file_path, 'rb') as f:
file = f.read() # 填写Header信息
audio_format = args.audio_format
sample_rate = args.sample_rate splited_data = [str(base64.b64encode(file[i:i + 5120]), encoding='utf-8') for i in range(0, len(file), 5120)]
asr_params = {"audio_format": audio_format, "sample_rate": int(sample_rate), "speech_type": 1} json_list = []
for i in range(len(splited_data)):
if i != len(splited_data) - 1:
asr_params['req_idx'] = i
else:
asr_params['req_idx'] = -len(splited_data) + 1
asr_params["audio_data"] = splited_data[i]
data = {"access_token": access_token, "version": "1.0", "asr_params": asr_params} json_list.append(json.dumps(data)) return json_list

2.3 配置接口参数

client_secret和client_id:在文章1.2的官网获取,必填

file_save_path:文件保存路径,必填

audio_format:音频类型,默认wav格式

sample_rate:采样率,默认16000Hz

# 获取命令行输入参数
def get_args():
parser = argparse.ArgumentParser(description='ASR')
parser.add_argument('-client_secret', type=str, required=True)
parser.add_argument('-client_id', type=str, required=True)
parser.add_argument('-file_path', type=str, required=True)
parser.add_argument('--audio_format', type=str, default='wav')
parser.add_argument('--sample_rate', type=str, default='16000')
args = parser.parse_args() return args

2.4 建立websocket客户端

class Client:
def __init__(self, data, uri):
self.data = data
self.uri = uri #建立连接
def connect(self):
ws_app = websocket.WebSocketApp(uri,
on_open=self.on_open,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close)
ws_app.run_forever() # 建立连接后发送消息
def on_open(self, ws):
print("sending..")
for i in range(len(self.data)):
ws.send(self.data[i]) # 接收消息
def on_message(self, ws, message):
code = json.loads(message).get("code")
if code != 90000:
# 打印接口错误
print(message)
if json.loads(message).get('end_flag') == 1:
print(json.loads(message).get('asr_text')) # 打印错误
def on_error(slef, ws, error):
print("error: ", str(error)) # 关闭连接
def on_close(ws):
print("client closed.")

2.5 完整demo

import argparse
import json
import base64
import requests
import websocket class Client:
def __init__(self, data, uri):
self.data = data
self.uri = uri #建立连接
def connect(self):
ws_app = websocket.WebSocketApp(uri,
on_open=self.on_open,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close)
ws_app.run_forever() # 建立连接后发送消息
def on_open(self, ws):
print("sending..")
for i in range(len(self.data)):
ws.send(self.data[i]) # 接收消息
def on_message(self, ws, message):
code = json.loads(message).get("code")
if code != 90000:
# 打印接口错误
print(message)
if json.loads(message).get('end_flag') == 1:
print(json.loads(message).get('asr_text')) # 打印错误
def on_error(slef, ws, error):
print("error: ", str(error)) # 关闭连接
def on_close(ws):
print("client closed.") # 准备数据
def prepare_data(args, access_token):
# 读取音频文件
with open(args.file_path, 'rb') as f:
file = f.read() # 填写Header信息
audio_format = args.audio_format
sample_rate = args.sample_rate splited_data = [str(base64.b64encode(file[i:i + 5120]), encoding='utf-8') for i in range(0, len(file), 5120)]
asr_params = {"audio_format": audio_format, "sample_rate": int(sample_rate), "speech_type": 1} json_list = []
for i in range(len(splited_data)):
if i != len(splited_data) - 1:
asr_params['req_idx'] = i
else:
asr_params['req_idx'] = -len(splited_data) + 1
asr_params["audio_data"] = splited_data[i]
data = {"access_token": access_token, "version": "1.0", "asr_params": asr_params} json_list.append(json.dumps(data)) return json_list # 获取命令行输入参数
def get_args():
parser = argparse.ArgumentParser(description='ASR')
parser.add_argument('-client_secret', type=str, required=True)
parser.add_argument('-client_id', type=str, required=True)
parser.add_argument('-file_path', type=str, required=True)
parser.add_argument('--audio_format', type=str, default='wav')
parser.add_argument('--sample_rate', type=str, default='16000')
args = parser.parse_args() return args # 获取access_token用于鉴权
def get_access_token(client_secret, client_id):
grant_type = "client_credentials"
url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}" \
.format(grant_type, client_secret, client_id) try:
response = requests.post(url)
response.raise_for_status()
except Exception as e:
print(response.text)
raise Exception
else:
access_token = json.loads(response.text).get('access_token')
return access_token if __name__ == '__main__':
try:
args = get_args() # 获取access_token
client_secret = args.client_secret
client_id = args.client_id
access_token = get_access_token(client_secret, client_id) # 准备数据
data = prepare_data(args, access_token) uri = "wss://openapi.data-baker.com/asr/realtime"
# 建立Websocket连接
client = Client(data, uri)
client.connect()
except Exception as e:
print(e)

2.5 执行

复制所有代码,确定音频为wav格式,采样率为16K,在命令行执行

python real_time_audio_recognition.py -client_secret=您的client_secret -client_id=您的client_id -file_path=test.wav --audio_format=wav --sample_rate=16000

填写邀请码fwwqgs,每日免费调用量还可以翻倍

Python使用websocket调用语音识别,语音转文字的更多相关文章

  1. 机器人之路的第一小步:录音+语音识别(语音转文字),大小600K(免费下载)!

    机器人之路的第一小步:录音+语音识别(语音转文字),大小600K,本人出品! 机器人之路的第一小步:录音+语音识别,准确率还不是特别高,不过普通话标准的话,识别准确率还是不错的,大家可以体验一下,请下 ...

  2. 阿里语音识别(语音转文字)java调用全程手把手详解-适合中小学生快速上手

    阿里语音识别服务java调用全程手把手详解-适合中小学生快速上手 阿里语音识别与百度语音识别的调用对比: 用例:1分30秒的录音文件    百度用时:3秒    阿里用时:30秒    识别准确率来看 ...

  3. 人工智能-baidu-aip语音识别(语音转文字)

    做这个之前,需要在电脑上安装FFmpeg工具,将要转的语音格式转为PCM格式.FFmpeg不需要安装,下载后,打开bin文件夹,然后将路径放在系统环境变量里.记住,要关闭所有打开的Pycharm,然后 ...

  4. 手把手使用Python语音识别,进行语音转文字

    0. 太长不看系列,直接使用 在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.4demo代码,确定音频为wav格式,采样率为16K,在命令行执行 python single_s ...

  5. C# 语音识别(文字to语音、语音to文字)

    最近打算研究一下语音识别,但是发现网上很少有C#的完整代码,就把自己的学习心得放上来,和大家分享一下. 下载API: 1)SpeechSDK51.exe                   (67.0 ...

  6. 语音识别系统:有免费实用的"语音到文字"的软件么?

    自从看了<李开复自传>,就对"语音识别系统"产生了非常深刻的印象. 根据自己的判断,语音识别系统还是非常有用的. 以自己的实际需求来看: 1.中国象棋中的应用. 中国象 ...

  7. iOS 10中如何搭建一个语音转文字框架

    在2016WWDC大会上,Apple公司介绍了一个很好的语音识别的API,那就是Speech framework.事实上,这个Speech Kit就是Siri用来做语音识别的框架.如今已经有一些可用的 ...

  8. Python如何实现文本转语音

    准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...

  9. 调用百度语音AI实现语音的识别和合成

    #coding:utf-8 ## 先去ffmpeg官网下载(https://ffmpeg.zeranoe.com/builds/),好了之后解压缩,配一下环境变量 ## 打开cmd,运行命令,安装如下 ...

随机推荐

  1. TortoiseGit:拉代码密码错误remote: Coding 提示: Authentication failed! 认证失败,请确认您输入了正确的账号密码

    问题 在控制面板里找到凭据管理器 修改密码之后拉取密码

  2. Kafka源码分析系列-目录(收藏不迷路)

    持续更新中,敬请关注! 目录 <Kafka源码分析>系列文章计划按"数据传递"的顺序写作,即:先分析生产者,其次分析Server端的数据处理,然后分析消费者,最后再补充 ...

  3. 语音降噪论文“A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier”的研读

    最近认真的研读了这篇关于降噪的论文.它是一种利用混合模型降噪的方法,即既利用了生成模型(MoG高斯模型),也利用了判别模型(神经网络NN模型).本文根据自己的理解对原理做了梳理. 论文是基于" ...

  4. Flutter 2.2 现已发布!

    在本次 Google I/O 2021 大会 上,我们正式发布了 Flutter 2.2.Flutter 2.2 是我们最新版的开源工具包,可让开发者立足单个平台构建适合任何设备的精美应用.Flutt ...

  5. [项目] 淘淘商城 Part.2

    商品列表查询 Easyui 商品添加 商品类目选择 图片上传 富文本编辑器使用 添加的实现 展示首页 略 分页插件 在SqlMapConfig.xml,配置一个plugin 在sql语句执行之前,添加 ...

  6. shell初学之PHP

    初次接触脚本,写了一个通过Apache实现PHP动态网站的脚本: #!/bin/bash yum -y install php rm -rf /etc/httpd/conf.d/welcome.con ...

  7. 任务相关的API函数-uxTaskGetSystemState

    uxTaskGetSystemState:此函数用于获取系统中所有的任务状态,每个任务的状态信息保存在一个TaskStatus_t类型的结构体里面.要使用此函数必须把 configUSE_TRACE_ ...

  8. TCP/IP、Http的区别--(转自任智康)

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:"我们在传输数据 ...

  9. 并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

    在前面的文章<青铜4:synchronized用法初体验>中,我们已经提到锁的概念,并指出synchronized是锁机制的一种实现.可是,这么说未免太过抽象,你可能无法直观地理解锁究竟是 ...

  10. java基础之8种基本数据类型

    简单往往是最重要的,在刚刚学java的时候老师会给我们先讲这8种基本数据类型,今天再来做一个温习,[本文大部分参考了 https://zhuanlan.zhihu.com/p/25439066,在上面 ...