文章目录

  • 一、创建应用
  • 二、测试接口

一、创建应用

点击控制台,创建新应用
点击应用,进入详情页,可获取APPID、APISecret、APIKey

二、测试接口

安装包

pip install websocket
pip install websocket-client==0.57.0
#!/usr/bin/env python
# -*- coding: utf-8 -*-import base64
import hashlib
import hmac
import json
import os
import timeimport pandas as pd
import requestslfasr_host = 'http://raasr.xfyun.cn/api'# 请求的接口名
api_prepare = '/prepare'
api_upload = '/upload'
api_merge = '/merge'
api_get_progress = '/getProgress'
api_get_result = '/getResult'
# 文件分片大小10M
file_piece_sice = 10485760# ——————————————————转写可配置参数————————————————
# 参数可在官网界面(https://doc.xfyun.cn/rest_api/%E8%AF%AD%E9%9F%B3%E8%BD%AC%E5%86%99.html)查看,根据需求可自行在gene_params方法里添加修改
# 转写类型
lfasr_type = 0
# 是否开启分词
has_participle = 'false'
has_seperate = 'true'
# 多候选词个数
max_alternatives = 0
# 子用户标识
suid = ''class SliceIdGenerator:"""slice id生成器"""def __init__(self):self.__ch = 'aaaaaaaaa`'def getNextSliceId(self):ch = self.__chj = len(ch) - 1while j >= 0:cj = ch[j]if cj != 'z':ch = ch[:j] + chr(ord(cj) + 1) + ch[j + 1:]breakelse:ch = ch[:j] + 'a' + ch[j + 1:]j = j - 1self.__ch = chreturn self.__chclass RequestApi(object):def __init__(self, appid, secret_key, upload_file_path):self.appid = appidself.secret_key = secret_keyself.upload_file_path = upload_file_path# 根据不同的apiname生成不同的参数,本示例中未使用全部参数您可在官网(https://doc.xfyun.cn/rest_api/%E8%AF%AD%E9%9F%B3%E8%BD%AC%E5%86%99.html)查看后选择适合业务场景的进行更换def gene_params(self, apiname, taskid=None, slice_id=None):appid = self.appidsecret_key = self.secret_keyupload_file_path = self.upload_file_pathspeaker_number = 2role_type = 2ts = str(int(time.time()))m2 = hashlib.md5()m2.update((appid + ts).encode('utf-8'))md5 = m2.hexdigest()md5 = bytes(md5, encoding='utf-8')# 以secret_key为key, 上面的md5为msg, 使用hashlib.sha1加密结果为signasigna = hmac.new(secret_key.encode('utf-8'), md5, hashlib.sha1).digest()signa = base64.b64encode(signa)signa = str(signa, 'utf-8')file_len = os.path.getsize(upload_file_path)file_name = os.path.basename(upload_file_path)param_dict = {}if apiname == api_prepare:# slice_num是指分片数量,如果您使用的音频都是较短音频也可以不分片,直接将slice_num指定为1即可slice_num = int(file_len / file_piece_sice) + (0 if (file_len % file_piece_sice == 0) else 1)param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['speaker_number'] = speaker_numberparam_dict['has_seperate'] = has_seperateparam_dict['role_type'] = role_typeparam_dict['ts'] = tsparam_dict['file_len'] = str(file_len)param_dict['file_name'] = file_nameparam_dict['slice_num'] = str(slice_num)elif apiname == api_upload:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['speaker_number'] = speaker_numberparam_dict['has_seperate'] = has_seperateparam_dict['role_type'] = role_typeparam_dict['ts'] = tsparam_dict['task_id'] = taskidparam_dict['slice_id'] = slice_idelif apiname == api_merge:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['speaker_number'] = speaker_numberparam_dict['has_seperate'] = has_seperateparam_dict['role_type'] = role_typeparam_dict['ts'] = tsparam_dict['task_id'] = taskidparam_dict['file_name'] = file_nameelif apiname == api_get_progress or apiname == api_get_result:param_dict['app_id'] = appidparam_dict['signa'] = signaparam_dict['speaker_number'] = speaker_numberparam_dict['has_seperate'] = has_seperateparam_dict['role_type'] = role_typeparam_dict['ts'] = tsparam_dict['task_id'] = taskidreturn param_dict# 请求和结果解析,结果中各个字段的含义可参考:https://doc.xfyun.cn/rest_api/%E8%AF%AD%E9%9F%B3%E8%BD%AC%E5%86%99.htmldef gene_request(self, apiname, data, files=None, headers=None):response = requests.post(lfasr_host + apiname, data=data, files=files, headers=headers)result = json.loads(response.text)if result["ok"] == 0:print("{} success:".format(apiname) + str(result))return resultelse:print("{} error:".format(apiname) + str(result))exit(0)return result# 预处理def prepare_request(self):return self.gene_request(apiname=api_prepare,data=self.gene_params(api_prepare))# 上传def upload_request(self, taskid, upload_file_path):file_object = open(upload_file_path, 'rb')try:index = 1sig = SliceIdGenerator()while True:content = file_object.read(file_piece_sice)if not content or len(content) == 0:breakfiles = {"filename": self.gene_params(api_upload).get("slice_id"),"content": content}response = self.gene_request(api_upload,data=self.gene_params(api_upload, taskid=taskid,slice_id=sig.getNextSliceId()),files=files)if response.get('ok') != 0:# 上传分片失败print('upload slice fail, response: ' + str(response))return Falseprint('upload slice ' + str(index) + ' success')index += 1finally:'file index:' + str(file_object.tell())file_object.close()return True# 合并def merge_request(self, taskid):return self.gene_request(api_merge, data=self.gene_params(api_merge, taskid=taskid))# 获取进度def get_progress_request(self, taskid):return self.gene_request(api_get_progress, data=self.gene_params(api_get_progress, taskid=taskid))# 获取结果def get_result_request(self, taskid):return self.gene_request(api_get_result, data=self.gene_params(api_get_result, taskid=taskid))def all_api_request(self):# 1. 预处理pre_result = self.prepare_request()taskid = pre_result["data"]# 2 . 分片上传self.upload_request(taskid=taskid, upload_file_path=self.upload_file_path)# 3 . 文件合并self.merge_request(taskid=taskid)# 4 . 获取任务进度while True:# 每隔20秒获取一次任务进度progress = self.get_progress_request(taskid)progress_dic = progressif progress_dic['err_no'] != 0 and progress_dic['err_no'] != 26605:print('task error: ' + progress_dic['failed'])returnelse:data = progress_dic['data']task_status = json.loads(data)if task_status['status'] == 9:print('task ' + taskid + ' finished')breakprint('The task ' + taskid + ' is in processing, task status: ' + str(data))# 每次获取进度间隔20Stime.sleep(20)# 5 . 获取结果res = self.get_result_request(taskid=taskid)# 保存到txtdata = res['data']data = eval(data)return data# 注意:如果出现requests模块报错:"NoneType" object has no attribute 'read', 请尝试将requests模块更新到2.20.0或以上版本(本demo测试版本为2.20.0)
# 输入讯飞开放平台的appid,secret_key和待转写的文件路径
if __name__ == '__main__':# 解析单条语音并保存到xlsapi = RequestApi(appid="", secret_key="",upload_file_path=r"data/record/20220715014532.mp3")xf_result = api.all_api_request()print(xf_result)

调用科大讯飞语音转文本相关推荐

  1. 科大讯飞语音转文本(极速转换和普通转换两种)

    有两种语音转换模式 参考 极速语音转换 和普通语音转换不一样 下载官方的demo以后, 上传m4a不行,用格式转换的软件转换为wav,可以上传, 然后有报错, "message": ...

  2. Python调用科大讯飞语音API实现文字转音频

    科大讯飞语音合成API https://www.xfyun.cn/doc/tts/online_tts/API.html 首先打开控制台创建应用,获得APP_ID,APP_KEY,APP_SECRET ...

  3. python实现调用科大讯飞语音听写(将音频识别成文字输出)

    一.大致流程 1)申请科大讯飞账号(https://passport.xfyun.cn/register) 2)创建应用(应用平台选择WebAPI) 3)查看开发文档 4)根据开发文档和示例代码进行调 ...

  4. Android studio调用科大讯飞的语音转文字功能

    Android studio调用科大讯飞的语音转文字功能 一.在科大讯飞的官网上注册并下载SDK 二.配置安卓项目 三.运行效果展示 一.在科大讯飞的官网上注册并下载SDK 1.首先去讯飞开放平台申请 ...

  5. 调用科大讯飞语音合成离线SDK的基础上调用pyqt5模块编写gui界面

    程序说明 该程序是继我上一次调用科大讯飞语音合成离线SDK,用Python写了一个文本转语音的程序的进一步开发,这次开发是用pyqt5模块和其自带的designer做了一个gui界面. 程序展示 该程 ...

  6. android集成科大讯飞语音听写和语音合成

    android集成科大讯飞语音听写和语音合成 集成科大讯飞语音听写和语音合成,语音听写只是语音识别下面的一部分,别弄混淆了,由于科大讯飞暂未开放gradle引包方式,所以目前集成还是手动引包.我的流程 ...

  7. C#调用科大讯飞离线语音合成TTS

    原作者勿怪,未经允许就转载了,感谢万分. http://www.cnblogs.com/xuguanghui/p/4505555.html ------------------------------ ...

  8. 909422229_科大讯飞语音听写Java web API接口

    技术交流群:958923746,有学习视频,文档等. 1. 接口说明 语音听写接口可将语音(≤60秒)转换成对应的文字信息.本接口适用于将音频一次性发送至云端,块式传输. 2. 接口地址 POST h ...

  9. 【记录】科大讯飞语音控件的使用——Android Studio

    ##一.将libs文件夹移至Android Studio的Project的根目录下 将科大讯飞提供的SDK中的libs文件夹直接拖拽至Android Studio的Project的根目录下 ##二.导 ...

最新文章

  1. 移动端打开html控制台,移动端中使用调试控制台 eruda
  2. 一文看懂NB-IoT!
  3. 3D图形学的线性代数的通俗解释。
  4. java hasset 顺序_java集合排序问题
  5. 20145326蔡馨熠《信息安全系统设计》第2周学习总结
  6. git拉取请求_24个“拉取请求”挑战鼓励卓有成效的贡献
  7. 深度优先搜索——选数(洛谷 P1036)
  8. chrome使用脚本修改组策略_允许Chrome安装第三方网站的脚本以及扩展的方法
  9. Java面向对象思想
  10. Maven项目中父子项目互相找不到的解决方法
  11. 【PCL自学:Feature7】基于转动惯量和偏心量的描述符 (持续更新)
  12. 个人发卡网站源码运营版 内置4套模板
  13. 淘宝/天猫API接口详情介绍(B类高级接口)
  14. AutoIt安装下载及使用总结
  15. 【BZOJ2109/2535】【NOI2010】航空管制(贪心)
  16. 三维激光扫描技术知识检测----选择、判断
  17. 看了 Google 大神 Jeff Dean 的传说,我拜服了~
  18. android listview 宽度,Android ListView项目没有填充宽度
  19. 广州车展直击:现代汽车携豪华阵容共建未来汽车生态圈
  20. 用HTML5+CSS实现3d动画立方体

热门文章

  1. C++中头文件和源文件
  2. VMware 15 桥接网络设置
  3. 爱普生Epson WF-6093 打印机驱动
  4. 从本地或者网络读取图片,并转换为Bitmap图片
  5. 全球及中国工业垃圾处理产业前景展望与发展战略研究报告2022版
  6. 参加DW(Data warehouse) 11g R2 讲师培训结束
  7. vue--图片预览器(vant)+ 安卓返回键处理
  8. 微导纳米科创板上市:市值125亿 无锡首富王燕清再敲钟
  9. 7-23 顺序法排序
  10. RuntimeError: Failed to init API, possibly an invalid tessdata path: C:\Program Files\Tesseract