博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3调用腾讯实时语音识别示例
阅读量:4301 次
发布时间:2019-05-27

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

官方Python2 的demo小改一下:

# -*- coding:utf-8 -*-import json# python3导入from urllib import requestimport hmacimport hashlibimport base64import timeimport randomimport os#secret_key,secretid,appid换成自己申请的secret_key='xxx'secretid='xxx'appid='xxx'engine_model_type='16k_0'res_type=0result_text_format=0voice_format=1cutlength=20000template_name=""def formatSignString(param):    signstr = "POSTaai.qcloud.com/asr/v1/"    for t in param:        if 'appid' in t:            signstr += str(t[1])            break    signstr += "?"    for x in param:        tmp = x        if 'appid' in x:            continue        for t in tmp:            signstr += str(t)            signstr += "="        signstr = signstr[:-1]        signstr += "&"    signstr = signstr[:-1]    # print 'signstr',signstr    return signstrdef sign(signstr, secret_key):    # python3做二进制转换    bytes_signstr = bytes(signstr,'utf-8')    bytes_secret_key = bytes(secret_key,'utf-8')    # bytes_secret_key = bytes(secret_key, 'latin-1')    hmacstr = hmac.new(bytes_secret_key, bytes_signstr, hashlib.sha1).digest()    s = base64.b64encode(hmacstr)    # print 'sign: ',s    return sdef randstr(n):    seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"    sa = []    for i in range(n):        sa.append(random.choice(seed))    salt = ''.join(sa)    # print salt    return saltdef sendVoice(secret_key, secretid, appid, engine_model_type, res_type, result_text_format, voice_format, filepath,cutlength, template_name=""):    if len(str(secret_key)) == 0:        print('secretKey can not empty')        return    if len(str(secretid)) == 0:        print('secretid can not empty')        return    if len(str(appid)) == 0:        print('appid can not empty')        return    if len(str(engine_model_type)) == 0 or (            str(engine_model_type) != '8k_0' and str(engine_model_type) != '16k_0' and str(        engine_model_type) != '16k_en'):        print('engine_model_type is not right')        return    if len(str(res_type)) == 0 or (str(res_type) != '0' and str(res_type) != '1'):        print('res_type is not right')        return    if len(str(result_text_format)) == 0 or (str(result_text_format) != '0' and str(result_text_format) != '1' and str(            result_text_format) != '2' and str(result_text_format) != '3'):        print('result_text_format is not right')        return    if len(str(voice_format)) == 0 or (            str(voice_format) != '1' and str(voice_format) != '4' and str(voice_format) != '6'):        print('voice_format is not right')        return    if len(str(filepath)) == 0:        print('filepath can not empty')        return    if len(str(cutlength)) == 0 or str(cutlength).isdigit() == False or cutlength > 200000:        print('cutlength can not empty')        return    # secret_key = "oaYWFO70LGDmcpfwo8uF1IInayysGtgZ"    query_arr = dict()    query_arr['appid'] = appid    query_arr['projectid'] = 1013976    if len(template_name) > 0:        query_arr['template_name'] = template_name    query_arr['sub_service_type'] = 1    query_arr['engine_model_type'] = engine_model_type    query_arr['res_type'] = res_type    query_arr['result_text_format'] = result_text_format    query_arr['voice_id'] = randstr(16)    query_arr['timeout'] = 100    query_arr['source'] = 0    query_arr['secretid'] = secretid    query_arr['timestamp'] = str(int(time.time()))    query_arr['expired'] = int(time.time()) + 24 * 60 * 60    query_arr['nonce'] = query_arr['timestamp'][0:4]    query_arr['voice_format'] = voice_format    file_object = open(filepath, 'rb')    file_object.seek(0, os.SEEK_END)    datalen = file_object.tell()    file_object.seek(0, os.SEEK_SET)    seq = 0    while (datalen > 0):        end = 0        if (datalen < cutlength):            end = 1        query_arr['end'] = end        query_arr['seq'] = seq        query = sorted(query_arr.items(), key=lambda d: d[0])        signstr = formatSignString(query)        autho = sign(signstr, secret_key)        if (datalen < cutlength):            content = file_object.read(datalen)        else:            content = file_object.read(cutlength)        seq = seq + 1        datalen = datalen - cutlength        headers = {}        headers['Authorization'] = autho        headers['Content-Length'] = len(content)        requrl = "http://"        requrl += signstr[4::]        #python3        req = request.Request(requrl, data=content, headers=headers)        res_data = request.urlopen(req)        # time.sleep(0.3)        res = res_data.read().decode('utf-8')        print(res)    file_object.close()    return resdef get_result(file_path):    res=sendVoice(secret_key=secret_key,secretid=secretid,appid=appid,engine_model_type=engine_model_type,res_type=res_type,result_text_format=result_text_format,voice_format=voice_format,cutlength=cutlength,filepath=file_path)    res_dict=json.loads(res)    data=res_dict.get('text')    return dataif __name__ == '__main__':    get_result('test.wav')

 

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

你可能感兴趣的文章
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>