《阿里云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: 北京的天气


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
4天前
|
人工智能 运维 Kubernetes
阿里云容器服务AI助手2.0 - 新一代容器智能运维能力
2024年11月,阿里云容器服务团队进一步深度融合现有运维可观测体系,在场景上覆盖了K8s用户的全生命周期,正式推出升级版AI助手2.0,旨在更好地为用户使用和运维K8S保驾护航。
|
7天前
|
机器学习/深度学习 存储 人工智能
2024阿里云AI交出答卷,全球领先!
2024阿里云AI交出答卷,全球领先!
53 9
2024阿里云AI交出答卷,全球领先!
|
8天前
|
人工智能 Serverless API
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
68 8
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
|
2天前
|
人工智能 移动开发 JavaScript
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
|
7天前
|
人工智能 云计算
官宣!阿里云成为总台春晚云计算AI独家合作伙伴
官宣!阿里云成为总台春晚云计算AI独家合作伙伴
154 22
|
6天前
|
机器学习/深度学习 人工智能 安全
阿里云先知安全沙龙(武汉站) ——AI赋能软件漏洞检测,机遇, 挑战与展望
本文介绍了漏洞检测的发展历程、现状及未来展望。2023年全球披露的漏洞数量达26447个,同比增长5.2%,其中超过7000个具有利用代码,115个已被广泛利用,涉及多个知名软件和系统。文章探讨了从人工审计到AI技术的应用,强调了数据集质量对模型性能的重要性,并展示了不同检测模型的工作原理与实现方法。此外,还讨论了对抗攻击对模型的影响及提高模型可解释性的多种方法,展望了未来通过任务大模型实现自动化漏洞检测与修复的趋势。
|
1天前
|
人工智能 运维 监控
阿里云Milvus产品发布:AI时代云原生专业向量检索引擎
随着大模型和生成式AI的兴起,非结构化数据市场迅速增长,预计2027年占比将达到86.8%。Milvus作为开源向量检索引擎,具备极速检索、云原生弹性及社区支持等优势,成为全球最受欢迎的向量数据库之一。阿里云推出的全托管Milvus产品,优化性能3-10倍,提供企业级功能如Serverless服务、分钟级开通、高可用性和成本降低30%,助力企业在电商、广告推荐、自动驾驶等场景下加速AI应用构建,显著提升业务价值和稳定性。
|
1天前
|
存储 人工智能 数据管理
媒体声音|专访阿里云数据库周文超博士:AI就绪的智能数据平台设计思路
在生成式AI的浪潮中,数据的重要性日益凸显。大模型在实际业务场景的落地过程中,必须有海量数据的支撑:经过训练、推理和分析等一系列复杂的数据处理过程,才能最终产生业务价值。事实上,大模型本身就是数据处理后的产物,以数据驱动的决策与创新需要通过更智能的平台解决数据多模处理、实时分析等问题,这正是以阿里云为代表的企业推动 “Data+AI”融合战略的核心动因。
|
8天前
|
弹性计算 人工智能 自然语言处理
云工开物:阿里云弹性计算走进高校第2期,与北京大学研一学生共探AI时代下的应用创新
阿里云高校合作、弹性计算团队​于北京大学,开展了第2届​【弹性计算进校园】​交流活动。
|
3天前
|
人工智能 Cloud Native 数据管理
数据+AI融合趋势洞察暨阿里云OpenLake解决方案发布
Forrester是全球领先的市场研究与咨询机构,专注于新兴技术在各领域的应用。本文探讨如何加速现代数据管理,推动人工智能与客户业务的融合创新。面对数据标准缺乏、多云环境复杂性、新兴业务场景及过多数据平台等挑战,Forrester提出构建AI就绪的数据管理基石,通过互联智能框架、全局数据管理和DataOps、端到端数据管理能力、AI赋能的数据管理以及用例驱动的策略,帮助企业实现数据和AI的深度融合,提升业务价值并降低管理成本。