讯飞语音识别之语音转文字------java

最近项目要用到语音识别的功能,网上找别人写的都不行,二话不说直接去讯飞官网注册下载了一个sdk,但是个人觉得sdk中并不是很明确的能运行实现功能,于是自己参考下载的sdk中的代码做了一个改动和封装。添加了一个配置文件,基本功能都能实现运行了。下面是我测试写的一个语音转文字的例子

第一:首先在官网上注册下载sdk后之后每一个sdk中都会对应一个apppid和secret key,在我的应用中就会找到(注意新手很难找到对应的secret key,我也是弄了很久,实在找不到可以留言给我)

在下载的sdk中会有对应的jar版本。我的lib是2.0的版本

第二步

我在测试实例中加了一个log4j.properties,代码如下:

log4j.rootLogger=INFO, Console,file

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%l]%m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/lfasr-sdk-client.log
log4j.appender.file.MaxFileSize=128MB
log4j.appender.file.MaxBackupIndex=50
log4j.appender.file.Append=true
log4j.appender.file.Threshold=INFO
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] %l - %m%n

配置文件config.properties

# APP ID
app_id=“写你申请sdk时候的apppid”
# secret key
secret_key='写你申请sdk时候的secret key"
# we support both http and https prototype
lfasr_host=http://lfasr.xfyun.cn/lfasr/api
# file piece size, recommended between 128KB and 10,240KB

#读取文件大小的最大显示
file_piece_size=524288
# store path: this is not the store path for the result json file, but the path for the file piece during upload
store_path=语音识别的文件的根目录

最后测试代码

package com.iflytek.msp.lfasr;

import java.util.HashMap;

import org.apache.log4j.PropertyConfigurator;

import com.alibaba.fastjson.JSON;
import com.iflytek.msp.cpdb.lfasr.client.LfasrClientImp;
import com.iflytek.msp.cpdb.lfasr.exception.LfasrException;
import com.iflytek.msp.cpdb.lfasr.model.LfasrType;
import com.iflytek.msp.cpdb.lfasr.model.Message;
import com.iflytek.msp.cpdb.lfasr.model.ProgressStatus;
public class LaugDemo {
private static final LfasrType type = LfasrType.LFASR_TELEPHONY_RECORDED_AUDIO;
public static void main(String[] args) {

//打印日志所在的项目路径
PropertyConfigurator.configure("source\\log4j.properties");
String path ="你要识别的文件";
LfasrClientImp lc =null;
String task_id = "";
try {
lc= LfasrClientImp.initLfasrClient();
HashMap<String, String> map = new HashMap<>();
map.put("has_participle", "true");

Message uploadMsg = lc.lfasrUpload(path, type, map);
int msg = uploadMsg.getOk();
if(msg == 0){
task_id = uploadMsg.getData();
System.out.println("task_id======="+task_id);
}else{
System.out.println("转换语音发生异常==========="+uploadMsg.getErr_no());
}
//Message progressMsg = lc.lfasrGetProgress(task_id);
} catch (Exception e) {
Message uploadMsg = JSON.parseObject(e.getMessage(), Message.class);
System.out.println("ecode=" + uploadMsg.getErr_no());
System.out.println("failed=" + uploadMsg.getFailed());
}

while(true){
try {
Thread.sleep(5 * 1000);
System.out.println("waiting ...");
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
//失败
Message msg = lc.lfasrGetProgress(task_id);
if(msg.getOk() !=0){ //0表示成功 -1表示失败
System.out.println("任务失败"+task_id);
System.out.println("ecode==========="+msg.getErr_no());
System.out.println("failed====="+msg.getFailed());

}else{

//成功
ProgressStatus ps = JSON.parseObject(msg.getData(),ProgressStatus.class);
if(ps.getStatus()==9){
System.out.println("任务完成===="+task_id+",status===="+ps.getDesc());
break;
}else{
System.out.println("任务没有完成====="+task_id+",status===="+ps.getDesc());
continue;
}
}
} catch (LfasrException e) {
e.printStackTrace();
}
}

}


}

猜你喜欢

转载自www.cnblogs.com/evildoer-bugs/p/10334672.html