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


相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
1天前
|
人工智能 算法 大数据
懂场景者得AI,瓴羊发布年度产品智能化战略
9月20日,瓴羊智能科技(以下简称瓴羊)在2024云栖大会上举办了“Data × AI:企业服务智能化,价值增长新动能”专场论坛。阿里巴巴集团副总裁、瓴羊智能科技CEO 朋新宇在会上发布年度产品智能化战略:“(算法 + 算力 + 数据) x 场景 ”,强调企业必须重视场景,只有通过解构场景、重构业务,才能真正拥抱AI,带来突破性增长。
|
7天前
|
消息中间件 人工智能 运维
|
15天前
|
人工智能 分布式计算 DataWorks
大数据&AI产品月刊【2024年8月】
大数据& AI 产品技术月刊【2024年8月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
23天前
|
人工智能 自动驾驶 架构师
Gartner 首次发布 AI 代码助手魔力象限,阿里云进入挑战者象限,通义灵码产品能力全面领先
通义灵码由阿里云和通义实验室联合打造,上线不到一年就入围 Gartner 挑战者象限,产品能力得到广泛认可。
|
1月前
|
SQL 人工智能 分布式计算
飞天发布时刻:大数据AI平台产品升级发布
阿里云飞天发布时刻产品发布会围绕阿里云大数据AI平台的新能力和新产品进行详细介绍。人工智能平台PAI、云原生大数据计算服务MaxCompute、开源大数据平台E-MapReduce、实时数仓Hologres、阿里云Elasticsearch、向量检索Milvus等产品均带来了相关发布的深度解读。
|
1月前
|
人工智能 分布式计算 大数据
大数据AI产品月刊-2024年7月
大数据& AI 产品技术月刊【2024年7月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
1月前
|
机器学习/深度学习 人工智能 安全
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
阿里云 AI 容器镜像有开箱即用、生态丰富、性能优化、安全合规和服务支持五大优势。
|
23天前
|
人工智能 语音技术 Windows
语音识别教程:Whisper
本文是一份详细的Whisper语音识别模型使用教程,包括了FFmpeg的安装、Whisper模型的安装与使用,以及如何实现实时录制音频并转录的步骤和代码示例,旨在帮助用户基于Whisper和GPT创建AI字幕。
|
2月前
|
存储 人工智能 运维
AI基础设施!产品力全球第二
AI基础设施!产品力全球第二
61 2
|
2月前
|
人工智能 弹性计算 自然语言处理
通义万相AI创作绘画产品方案产品体验
本次我有幸接触并体验了阿里云通义万相这一创新的AI绘画工具方案。该方案它是在利用人工智能技术,为用户提供创新、便捷的绘画创作体验。在体验过程中,我主要关注了产品的易用性、功能性、创新性、用户体验及方案本身等方面。
132 3