博客
关于我
Python听写汇总结果
阅读量:800 次
发布时间:2023-03-07

本文共 4507 字,大约阅读时间需要 15 分钟。

import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import time
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
STATUS_FIRST_FRAME = 0 # 第一帧的标识
STATUS_CONTINUE_FRAME = 1 # 中间帧标识
STATUS_LAST_FRAME = 2 # 最后一帧的标识
finalResult = "" # 声明全局
class Ws_Param(object):
def __init__(self, APPID, APIKey, APISecret, AudioFile):
self.APPID = APPID
self.APIKey = APIKey
self.APISecret = APISecret
self.AudioFile = AudioFile
self.CommonArgs = {"app_id": self.APPID}
self.BusinessArgs = {"domain": "iat", "language": "zh_cn", "accent": "mandarin", "vinfo": 1, "vad_eos": 10000}
def create_url(self):
url = 'wss://ws-api.xfyun.cn/v2/iat'
now = datetime.now()
date = format_date_time(mktime(now.timetuple()))
signature_origin = "host: ws-api.xfyun.cn\n"
signature_origin += "date: " + date + "\n"
signature_origin += "GET /v2/iat HTTP/1.1"
signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'), hashlib.sha256).digest()
signature_sha = base64.b64encode(signature_sha).decode('utf-8')
authorization_origin = "api_key=%s, algorithm=hmac-sha256, headers=host date request-line, signature=%s" % (self.APIKey, signature_sha)
authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode('utf-8')
url = url + '?' + urlencode({"authorization": authorization, "date": date, "host": "ws-api.xfyun.cn"})
return url
def on_message(ws, message):
global finalResult
try:
code = json.loads(message)["code"]
sid = json.loads(message)["sid"]
if code != 0:
errMsg = json.loads(message)["message"]
print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))
else:
data = json.loads(message)["data"]["result"]["ws"]
result = ""
for i in data:
for w in i["cw"]:
result += w["w"]
print("sid:%s call success!,data is:%s" % (sid, json.dumps(data, ensure_ascii=False)))
finalResult += result
except Exception as e:
print("receive msg,but parse exception:", e)
def on_error(ws, error):
print("### error:", error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
frameSize = 8000 # 每一帧的音频大小
interval = 0.04 # 发送音频间隔(单位:s)
status = STATUS_FIRST_FRAME
with open(wsParam.AudioFile, "rb") as fp:
while True:
buf = fp.read(frameSize)
if not buf:
status = STATUS_LAST_FRAME
if status == STATUS_FIRST_FRAME:
d = {
"common": wsParam.CommonArgs,
"business": wsParam.BusinessArgs,
"data": {
"status": 0,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
status = STATUS_CONTINUE_FRAME
elif status == STATUS_CONTINUE_FRAME:
d = {
"data": {
"status": 1,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
elif status == STATUS_LAST_FRAME:
d = {
"data": {
"status": 2,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
time.sleep(1)
break
time.sleep(interval)
ws.close()
thread.start_new_thread(run, ())
请注意:以上代码仅为示例,具体参数配置请根据实际需求进行调整。代码中包含了WebSocket连接的实现,包括消息处理、错误处理、连接关闭等功能。如果需要更详细的功能扩展或优化,请根据实际应用场景进行调整。

转载地址:http://iqofk.baihongyu.com/

你可能感兴趣的文章
Python 导入requests报错No module named requests
查看>>
python 将函数加到列表中进行调用
查看>>
python 将图片与字符串相互转换
查看>>
Python 嵌套字典全面指南
查看>>
Python 常见的错误类型和继承关系
查看>>
python 常量_零基础学Python系列之一:Python的变量与常量
查看>>
Python 并发编程
查看>>
python 序列化操作
查看>>
Python 开发者,这 7 个 VS Code 插件极力推荐
查看>>
python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
查看>>
python 录音左右声道_Python分离立体声wav压缩文件的左右声道
查看>>
Python 循环异或对文件进行加解密
查看>>
Python开发环境搭建(附VMware安装包及虚拟机环境)
查看>>
python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
查看>>
Python 快速下载依赖
查看>>
python实现非参数统计的Cochran检验 (附完整源码)
查看>>
Python 手写数字识别-3-sklearn中的几种算法
查看>>
Python 打开文件注意事项
查看>>
python 批量修改文件名_python windows下批量修改文件名
查看>>
Python 抓取网页乱码问题 以及EXCEL乱码
查看>>