《阿里云AI产品必知必会系列电子书》——智能语音交互—— 一句话识别QuickStart使用教程(3)

简介: 《阿里云AI产品必知必会系列电子书》——智能语音交互—— 一句话识别QuickStart使用教程(3)

《阿里云AI产品必知必会系列电子书》——智能语音交互—— 一句话识别QuickStart使用教程(2) https://developer.aliyun.com/article/1232530?groupCode=supportservice



三、通过SDK调用一句话识别服务


注:由于模型的采样率在配置时使用16K,所有测试的音频文件采样率也需要是

16K(常见音频采样率:8000Hz/16000Hz)。为了便于快速测试请下载示例音频文件


•3.1 导入Maven依赖文件


<dependency>
 <groupId>com.alibaba.nls</groupId>
 <artifactId>nls-sdk-recognizer</artifactId>
 <version>2.2.1</version>
</dependency>


•3.2 java SDK Code


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import com.alibaba.nls.client.AccessToken;
import com.alibaba.nls.client.protocol.InputFormatEnum;
import com.alibaba.nls.client.protocol.NlsClient;
import com.alibaba.nls.client.protocol.SampleRateEnum;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizer;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizerListener;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizerResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 此示例演示了:
 * ASR一句话识别API调用。
 * 动态获取token。
 * 通过本地文件模拟实时流发送。
 * 识别耗时计算。
 */
public class SpeechRecognizerDemo {
 private static fifinal Logger logger = LoggerFactory.getLogger(SpeechRecognizerDemo.class);
AIprivate String appKey;
 NlsClient client;
 public SpeechRecognizerDemo(String appKey, String id, String secret, String url) {
 this.appKey = appKey;
 //应用全局创建一个NlsClient实例,默认服务地址为阿里云线上服务地址。
 //获取token,实际使用时注意在accessToken.getExpireTime()过期前再次获取。
 AccessToken accessToken = new AccessToken(id, secret);
 try {
 accessToken.apply();
 System.out.println("get token: " + accessToken.getToken() + ", expire time: " + accessToken.getExpireTime());
 if(url.isEmpty()) {
 client = new NlsClient(accessToken.getToken());
 }else {
 client = new NlsClient(url, accessToken.getToken());
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 private static SpeechRecognizerListener getRecognizerListener(fifinal int myOrder, fifinal String userParam) {
 SpeechRecognizerListener listener = new SpeechRecognizerListener() {
 //识别出中间结果。仅当setEnableIntermediateResult为true时,才会返回该消息。
 @Override
 public void onRecognitionResultChanged(SpeechRecognizerResponse response) {

择的最简单推荐形式。可以使用nodeSelector字段将pod调度到指定的节点标签

的节点上。


AccessToken accessToken = new AccessToken(id, secret);
 try {
 accessToken.apply();
 System.out.println("get token: " + accessToken.getToken() + ", expire time: " + accessToken.getExpireTime());
 if(url.isEmpty()) {
 client = new NlsClient(accessToken.getToken());
 }else {
 client = new NlsClient(url, accessToken.getToken());
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 private static SpeechRecognizerListener getRecognizerListener(fifinal int myOrder, fifinal String userParam) {
 SpeechRecognizerListener listener = new SpeechRecognizerListener() {
 //识别出中间结果。仅当setEnableIntermediateResult为true时,才会返回该消息。
 @Override
 public void onRecognitionResultChanged(SpeechRecognizerResponse response) {
 //getName是获取事件名称,getStatus是获取状态码,getRecognizedText是语音识别文本。
 System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", result: " + 
response.getRecognizedText());
 }
 //识别完毕
 @Override
 public void onRecognitionCompleted(SpeechRecognizerResponse response) {
 //getName是获取事件名称,getStatus是获取状态码,getRecognizedText是语音识别文本。
 System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", result: " + 
response.getRecognizedText());
@Override
 public void onStarted(SpeechRecognizerResponse response) {
 System.out.println("myOrder: " + myOrder + "; myParam: " + userParam + "; task_id: " + response.getTaskId());
 }
 @Override
 public void onFail(SpeechRecognizerResponse response) {
 //task_id是调用方和服务端通信的唯一标识,当遇到问题时,需要提供此task_id。
 System.out.println("task_id: " + response.getTaskId() + ", status: " + response.getStatus() + ", status_text: " + 
response.getStatusText());
 }
 };
 return listener;
 }
 //根据二进制数据大小计算对应的同等语音长度
 //sampleRate仅支持8000或16000。
 public static int getSleepDelta(int dataSize, int sampleRate) {
 // 仅支持16位采样。
 int sampleBytes = 16;
 // 仅支持单通道。
 int soundChannel = 1;
 return (dataSize * 10 * 8000) / (160 * sampleRate);
!
 }
 public void process(String fifilepath, int sampleRate) {
 SpeechRecognizer recognizer = null;
 try {
 //传递用户自定义参数
 String myParam = "user-param";
 int myOrder = 1234;
 SpeechRecognizerListener listener = getRecognizerListener(myOrder, myParam);
recognizer = new SpeechRecognizer(client, listener);
 recognizer.setAppKey(appKey);
 //设置音频编码格式。如果是OPUS文件,请设置为InputFormatEnum.OPUS。
 recognizer.setFormat(InputFormatEnum.PCM);
 //设置音频采样率
 if(sampleRate == 16000) {
 recognizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
 } else if(sampleRate == 8000) {
 recognizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_8K);
 }
 //设置是否返回中间识别结果
 recognizer.setEnableIntermediateResult(true);
 //此方法将以上参数设置序列化为JSON发送给服务端,并等待服务端确认。
 long now = System.currentTimeMillis();
 recognizer.start();
 logger.info("ASR start latency : " + (System.currentTimeMillis() - now) + " ms");
 File fifile = new File(fifilepath);
 FileInputStream fifis = new FileInputStream(fifile);
 byte[] b = new byte[3200];
 int len;
 while ((len = fifis.read(b)) > 0) {
 logger.info("send data pack length: " + len);
 recognizer.send(b, len);
 //本案例用读取本地文件的形式模拟实时获取语音流,因为读取速度较快,这里需要设置sleep时长。
 // 如果实时获取语音则无需设置sleep时长,如果是8k采样率语音第二个参数设置为8000。
 int deltaSleep = getSleepDelta(len, sampleRate);
 Thread.sleep(deltaSleep);
 }
 //通知服务端语音数据发送完毕,等待服务端处理完成。
now = System.currentTimeMillis();
 //计算实际延迟,调用stop返回之后一般即是识别结果返回时间。
 logger.info("ASR wait for complete");
 recognizer.stop();
 logger.info("ASR stop latency : " + (System.currentTimeMillis() - now) + " ms");
 fifis.close();
 } catch (Exception e) {
 System.err.println(e.getMessage());
 } fifinally {
 //关闭连接
 if (null != recognizer) {
 recognizer.close();
 }
 }
 }
 public void shutdown() {
 client.shutdown();
 }
 public static void main(String[] args) throws Exception {
 String appKey = "XXXXXXXXXX"; //填写appkey
 String id = "XXXXXXXXXX"; //填写AccessKey Id
 String secret = "XXXXXXXXXX"; //填写AccessKey Secret
 String url = "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1"; // 默认值:wss://nls-gateway.cn-shanghai.ali
yuncs.com/ws/v1
 SpeechRecognizerDemo demo = new SpeechRecognizerDemo(appKey, id, secret, url);
 //本案例使用本地文件模拟发送实时流数据。
 demo.process("XXXXXXXXX", 16000);
 //demo.process("./nls-sample.opus", 16000);
 demo.shutdown();


•3.3 测试结果


name: RecognitionResultChanged, status: 20000000, result: 北
name: RecognitionResultChanged, status: 20000000, result: 北京的
name: RecognitionResultChanged, status: 20000000, result: 北京的天
name: RecognitionResultChanged, status: 20000000, result: 北京的天气


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
打赏
0
0
0
0
52
分享
相关文章
阿里云《AI 剧本生成与动画创作》技术解决方案测评
本问是对《AI 剧本生成与动画创作》的用心体验。结论不是特别理想,在实际使用中仍存在一些问题。
95 22
阿里云AI剧本生成与动画创作解决方案深度评测
阿里云AI剧本动画全链路解决方案基于函数计算FC、百炼大模型和ComfyUI技术架构,实现从剧本生成到动画渲染的自动化流程。方案在电商广告、知识科普等快速批产场景表现出色,大幅缩短创作时间(如30秒动画从9.5小时减至16.1分钟)。然而,在强剧情连续性和物理规则方面存在不足,建议结合人工审核优化。测试显示其商用级成熟度,推荐采用“AI初稿-人工润色”模式。
370 137
阿里云AI剧本生成与动画创作解决方案深度评测
宜搭融合 DeepSeek R1 满血版!手把手教你玩转低代码 AI 产品
AI技术的迅猛发展,特别是DeepSeek的推出,为企业带来了前所未有的智能化体验。当低代码平台与AI技术结合时,迸发出丰富的应用场景。本文详细介绍如何通过宜搭平台使用DeepSeek,涵盖网页版、AI助理版、AI生成组件、连接器等功能,帮助用户轻松实现智能化业务系统。
354 7
宜搭融合 DeepSeek R1 满血版!手把手教你玩转低代码 AI 产品
用 SAP ABAP 接入国内 AI 产品通用接口技术指南 1、调用AI接口
SAP 系统与国内先进的 AI 产品(如百度文心一言、阿里通义千问、字节跳动云雀模型、华为盘古大模型、豆包、Deepsheek 等)集成通用接口技术指南
AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型
DeepSeek是近期热门的开源大语言模型(LLM),以其强大的训练和推理能力备受关注。然而,随着用户需求的增长,其官网在高并发和大数据处理场景下常面临服务不稳定的问题。本文将深度测评通过阿里云平台调用满血版DeepSeek模型(671B),以充分发挥其性能和稳定性。阿里云提供高效、低延迟、大规模并发支持及稳定的云服务保障,并为用户提供100万免费token,简化操作流程,确保企业在AI应用上的高效性和成本效益。尽管如此,DeepSeek API目前不支持联网搜索和图片、文档分析功能,需结合其他工具实现。
882 16
阿里云《AI 剧本生成与动画创作》解决方案技术评测
随着人工智能技术的发展,越来越多的工具和服务被应用于内容创作领域。阿里云推出的《AI 剧本生成与动画创作》解决方案,利用函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 工具,实现了从故事剧本撰写、插图设计、声音合成和字幕添加到视频合成的一站式自动化流程。本文将对该方案进行全面的技术评测,包括实现原理及架构介绍、部署文档指引、具体耗时分析以及实际使用体验。
110 16
“云+AI”守护中国年!阿里云为中国邮政、西安政务云、总台春晚重保护航
“云+AI”守护中国年!阿里云为中国邮政、西安政务云、总台春晚重保护航
97 1
阿里云 AI 搜索开放平台集成 DeepSeek 模型
阿里云 AI 搜索开放平台最新上线 DeepSeek -R1系列模型。
阿里云携手DeepSeek,AI应用落地五折起!
近年来,人工智能技术飞速发展,越来越多的企业希望借助AI的力量实现数字化转型,提升效率和竞争力。然而,AI应用的开发和落地并非易事,企业往往面临着技术门槛高、成本投入大、落地效果难以保障等挑战。
63 1

热门文章

最新文章