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


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
5天前
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
|
17天前
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
80 12
|
7天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
6天前
|
人工智能 大数据 测试技术
自主和开放并举 探索下一代阿里云AI基础设施固件创新
12月13日,固件产业技术创新联盟产业峰会在杭州举行,阿里云主导的开源固件测试平台发布和PCIe Switch固件技术亮相,成为会议焦点。
|
20天前
|
人工智能 NoSQL MongoDB
阿里云与MongoDB庆祝合作五周年,展望AI赋能新未来
阿里云与MongoDB庆祝合作五周年,展望AI赋能新未来
|
15天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
22天前
|
人工智能 数据可视化 专有云
阿里云飞天企业版获评2024年AI云典型案例
近日,由全球数字经济大会组委会主办、中国信息通信研究院和中国通信企业协会承办的“云·AI·计算国际合作论坛”作为2024全球数字经济大会系列活动之一,在北京举办。论坛以“智启云端,算绘蓝图”为主题,围绕云·AI·计算产业发展、关键技术、最佳实践等展开交流讨论。阿里云飞天企业版异构算力调度平台获评2024年AI云典型案例。
|
1天前
|
人工智能
阿里云领跑生成式AI工程领域,两大维度排名Gartner®生成式AI工程Market Quadrant全球第二
阿里云凭借强劲实力入选Gartner 《Innovation Guide for Generative AI Technologies》所有领域的新兴领导者象限。
|
27天前
|
存储 人工智能 缓存
官宣开源 阿里云与清华大学共建AI大模型推理项目Mooncake
近日,清华大学和研究组织9#AISoft,联合以阿里云为代表的多家企业和研究机构,正式开源大模型资源池化项目 Mooncake。
|
22天前
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。