python调用讯飞付费版语音转写

python调用讯飞付费版语音转写

讯飞开发平台提供了付费版的语音转写(Long Form Automatic Speech Recognition,通过SDK调用云端转写服务,将长段音频(5小时以内)转换成文字信息。)功能,分为标准版和电话专用版
http://www.xfyun.cn/services/lfasr

但是目前只提供Java平台的sdk,如果想要运行在Python下,可以通过jpype调用Java代码实现

具体的应用创建和sdk下载,请参照讯飞文档:
http://www.xfyun.cn/doccenter/lfasr

实现步骤

1.导入lfasr_1.1.0001.0.jar,编写Java代码

可以参照官方提供的demo,比较简单,就是先把音频文件上传(调用client.lfasr_upload(fileName)),会返回一个Message对象,对象的getData方法得到的就是刚刚上传的音频的任务ID,再根据这个ID调用client.lfasr_get_result(taskid)方法就返回了识别后的数据

package test;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iflytek.voicecloud.client.LfasrClient;
import com.iflytek.voicecloud.model.LfasrType;
import com.iflytek.voicecloud.model.Message;

public class Test {

    public static void main(String[] args) throws Exception {
        //上传音频文件
        String path = "D:/test.wav";
        String result = upload(path);
        System.out.println(result);

    }

    public static String upload(String path) throws Exception {
        String appid = "appid";       //您的appid,如"5848d773"
        String secret_key = "secret_key";  //您的secret_key,如"b849c87a8bc2c7ww68b6dfbddee6dc35"
        LfasrType type = LfasrType.LFASR_TELEPHONY_RECORDED_AUDIO;//(“电话专用版-已录制音频”)
        //LfasrType type = LfasrType.LFASR_STANDARD_RECORDED_AUDIO;//LFASR_STANDARD_RECORDED_AUDIO(“标准版-已录制音频”)
        LfasrClient client = LfasrClient.InitClient(appid, secret_key, type);

        Message message = client.lfasr_upload(path);  //阻塞,直到返回message

        String taskid = message.getData();//刚刚上传的音频的任务ID

        return result(taskid,client);

    }

    public static String result(String taskid,LfasrClient client) throws Exception {
        String result = "";
        while(true){//lfasr_get_result(taskid)是异步的,需要不断的轮询获取结果,官方的说明是:1个小时的音频至少需间隔大于8分钟后才可调用此方法
            Message message = client.lfasr_get_result(taskid);
            if(message.getOk() == 0){
                String data = message.getData();
                JSONArray jsonArray = JSONArray.parseArray(data);
                for(int i = 0;i<jsonArray.size();i++){
                    JSONObject object = (JSONObject) jsonArray.get(i);
                    String onebest = (String) object.get("onebest");
                    result += onebest;
                }
                break;
            }
        }
        System.out.println("result == " + result);
        return result;
    }

}

2.导出jar包

编写MANIFEST.MF文件
这里写图片描述
(注意:第4行是空行)

选择File—>Export
这里写图片描述

选择导出的项目,填写导出路径
这里写图片描述

默认
这里写图片描述

选择刚刚填写的MANIFEST.MF文件
这里写图片描述

点击Finish,就生成了这里写图片描述

3.编写Python代码

先安装jpype框架,详见http://blog.csdn.net/benhuo931115/article/details/61421228

代码如下:

#-*- coding: utf-8 -*-
from jpype import *
import os.path
jarpath = os.path.join(os.path.abspath('.'), '')
startJVM(getDefaultJVMPath(),"-ea", "-Djava.class.path=%s" % (jarpath + 'xfTelTest.jar'))
JDClass = JClass("test.Test")
#jd = JDClass()
#jd = JPackage("test").Test() #两种创建jd的方法
result = JDClass.upload('D:/test.wav')
print result
shutdownJVM()

ps:讯飞这个付费版对于电话的音频识别还是很准的,但是识别的时间较长,3秒的音频识别要花费5秒

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值