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秒