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


相关实践学习
一键创建和部署高分电影推荐语音技能
本场景使用天猫精灵技能应用平台提供的技能模板,在2-5分钟内,创建一个好玩的高分电影推荐技能,使用模板后无须代码开发,系统自动配置意图、实体等,新手0基础也可体验创建技能的乐趣。
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
2天前
|
人工智能 弹性计算 算法
一文解读:阿里云AI基础设施的演进与挑战
对于如何更好地释放云上性能助力AIGC应用创新?“阿里云弹性计算为云上客户提供了ECS GPU DeepGPU增强工具包,帮助用户在云上高效地构建AI训练和AI推理基础设施,从而提高算力利用效率。”李鹏介绍到。目前,阿里云ECS DeepGPU已经帮助众多客户实现性能的大幅提升。其中,LLM微调训练场景下性能最高可提升80%,Stable Difussion推理场景下性能最高可提升60%。
124542 154
|
2天前
|
人工智能 程序员
AI程序员入职阿里云
AI程序员入职阿里云
|
2天前
|
人工智能 弹性计算 算法
一文解读:阿里云AI基础设施的演进与挑战
一文解读:阿里云AI基础设施的演进与挑战
|
2天前
|
人工智能 自然语言处理 JavaScript
阿里云发布 AI 编程助手 “通义灵码”——VSCode更强了 !!
阿里云发布 AI 编程助手 “通义灵码”——VSCode更强了 !!
22 3
|
2天前
|
人工智能 分布式计算 Cloud Native
大数据&AI产品月刊【2024年4月】
大数据&AI产品技术月刊【2024年4月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据&AI方面最新动态。
|
2天前
|
消息中间件 人工智能 监控
|
2天前
|
机器学习/深度学习 人工智能 搜索推荐
【AI 场景】如何使用 AI 向客户推荐个性化产品?
【5月更文挑战第3天】【AI 场景】如何使用 AI 向客户推荐个性化产品?
【AI 场景】如何使用 AI 向客户推荐个性化产品?
|
2天前
|
人工智能 自然语言处理 IDE
如何让阿里云AI001号员工帮我写代码(含IDEA插件使用)
AI 智能时代,将改变所有人的思维方式,学习方式,更注重人的创造力和思考力,如果你懒,你将会被 AI 替代,如果你只想干简单不用动脑的活,你将会被 AI 替代,如果你只会打螺丝,更会被 AI 替代。当下的 AI 人工智能时代,被认为是第四次工业革命的到来,我们更应该看到的是机会,而非跳进焦虑、困惑、悲观的一群人潮中。
|
2天前
|
人工智能 运维 Serverless
【云故事探索】NO1:看森马服饰,在阿里云上如何用AI实现创新?
在数字化转型中,云计算成为企业创新的关键驱动力。森马服饰借助阿里云函数计算,应对新零售挑战,实现业务模式重塑和效率提升。面对AI技术落地的困难,如高成本、长决策周期和复杂运维,森马通过阿里云的Serverless解决方案,快速将AI融入核心业务,优化了从设计到营销的全链条流程。通过函数计算,森马降低了AI项目初期的硬件投入和运维难题,提升了设计师的工作效率,将设计时间从3天缩短到30秒,实现了服装设计和营销的智能化升级。
|
2天前
|
机器学习/深度学习 人工智能 供应链
【专栏】阿里云RPA的Rap程序是自动化流程脚本,基于AI和机器学习,实现业务流程自动化
【4月更文挑战第29天】阿里云RPA的Rap程序是自动化流程脚本,基于AI和机器学习,实现业务流程自动化。具有灵活性、易用性、高效稳定和智能学习等特点。广泛应用于财务、人力资源、客服和供应链等领域,未来将与AI深度融合,跨平台应用,行业定制化,并构建完善生态,助力企业效率提升和创新。

热门文章

最新文章