1. 编写目的

介绍一下阿里云这一产品,并且在所给的例子上因为需要加一定的修改,做成自己想要的效果。

注重官方文档:
https://help.aliyun.com/document_detail/84459.html?spm=a2c4g.11186623.6.560.77385397x0OfXk

2. 效果展示

  • 到处jar包后,以命令行的形式运行此jar,并指定语音文件的地址。

    java  -jar  aliasr.jar  "d:/YAN/nls-sample-16k.wav"
    
  • 回车后可以看到效果如下:

    效果说明 nls-sample-16k.wav文件是在官网上文档中下载的一个测试文件,识别后输出的结果就是“北京的天气”。

3. 具体步骤

  1. 在官网阿里云智能语音交互 上登录注册一个免费的项目,这个过程在此不多说了。
  2. 复制项目的appkey,并且获取AccessToken,注意获得AccessToken的位置和复制appkey的位置不一样。.
  3. 使用Eclipse,新建一个Maven项目。并且添加依赖包如下:
     <dependency><groupId>com.alibaba.nls</groupId><artifactId>nls-sdk-short-asr</artifactId><version>2.0.3</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.26</version></dependency>
  1. 新建一个类SpeechRecognizerDemo,然后复制下面的代码。注意修改其中的appid和AccessToken。
package cn.smileyan.asr;
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.SpeechRecognizerResponse;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizerListener;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
/*** SpeechRecognizerDemo class** 一句话识别Demo*/
public class SpeechRecognizerDemo {private String appKey;private String accessToken;NlsClient client;/*** @param appKey* @param token*/public SpeechRecognizerDemo(String appKey, String token) {this.appKey = appKey;this.accessToken = token;// Step0 创建NlsClient实例,应用全局创建一个即可,默认服务地址为阿里云线上服务地址client = new NlsClient(accessToken);}private static SpeechRecognizerListener getRecognizerListener() {SpeechRecognizerListener listener = new SpeechRecognizerListener() {// 识别出中间结果.服务端识别出一个字或词时会返回此消息.仅当setEnableIntermediateResult(true)时,才会有此类消息返回@Overridepublic void onRecognitionResultChanged(SpeechRecognizerResponse response) {// 事件名称 RecognitionResultChangedSystem.out.println("name: " + response.getName() +// 状态码 20000000 表示识别成功", status: " + response.getStatus() +// 一句话识别的中间结果", result: " + response.getRecognizedText());}// 识别完毕@Overridepublic void onRecognitionCompleted(SpeechRecognizerResponse response) {// 事件名称 RecognitionCompletedSystem.out.println("name: " + response.getName() +// 状态码 20000000 表示识别成功", status: " + response.getStatus() +// 一句话识别的完整结果", result: " + response.getRecognizedText());}};return listener;}public void process(InputStream ins) {SpeechRecognizer recognizer = null;try {// Step1 创建实例,建立连接recognizer = new SpeechRecognizer(client, getRecognizerListener());recognizer.setAppKey(appKey);// 设置音频编码格式recognizer.setFormat(InputFormatEnum.PCM);// 设置音频采样率recognizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);// 设置是否返回中间识别结果recognizer.setEnableIntermediateResult(true);// Step2 此方法将以上参数设置序列化为json发送给服务端,并等待服务端确认recognizer.start();// Step3 语音数据来自声音文件用此方法,控制发送速率;若语音来自实时录音,不需控制发送速率直接调用 recognizer.sent(ins)即可recognizer.send(ins, 3200, 100);// Step4 通知服务端语音数据发送完毕,等待服务端处理完成recognizer.stop();} catch (Exception e) {System.err.println(e.getMessage());} finally {// Step5 关闭连接if (null != recognizer) {recognizer.close();}}}public void shutdown() {client.shutdown();}public static void main(String[] args) {if (args.length < 1) {System.err.println("SpeechRecognizerDemo need params: <wav>");System.exit(-1);}// 为了方便,请使用自己的key 和 token  String appKey = "输入自己的appKey";String token = "输入自己的token";/*** 由于本人在使用官网给的例子的时候发现有些不便,所以做了一定的修改。* 如果有什么问题的话,欢迎交流。* Smileyan*/SpeechRecognizerDemo demo = new SpeechRecognizerDemo(appKey, token);File f= new File(""+args[0]) ;    // 声明File对象InputStream ins = null;try {ins = new FileInputStream(f);} catch (FileNotFoundException e) {e.printStackTrace();} if (null == ins) {System.err.println("open the audio file failed!");System.exit(-1);}demo.process(ins);demo.shutdown();}
}
  1. 修改成自己的key和token后,在eclipse上运行肯定是会提示:SpeechRecognizerDemo need params: ,需要导出jar文件再带参数运行。
    推荐使用eclipse也是因为eclipse导出jar可能更加方便一些。

4. 总结

注意这里面的java代码绝大多数都是来自官网的示例代码,只是根据自己修改做了一定的修改,主要原因是使用官网的代码总是提示找不到wav文件(open the audio file failed!),所以做了一定的修改,在自己使用的win 10系统上,和centOS7是完全可以使用的。
重要提示: 如果遇到了什么问题,欢迎留言交流!

Smileyan 2019年3月15日

阿里云一句话识别,Java例子相关推荐

  1. 干货 应用阿里AI一句话识别 java 实现语音实时识别

    首次讲讲思路,如果说不定大佬们也可以自己完成  ,如果大佬们懒得弄那就直接 看这里看这里 上面我已经实现了语音的实时录入检测识别并且附带了录入和识别的子项目 1.)本地语音的实时录入.并检测是否有语音 ...

  2. 阿里云人脸识别C#调用示例参考

    概述 前面介绍了关于阿里云人脸识别Java调用示例参考,本文主要介绍C#调用阿里云人脸识别服务,参数等的获取参考阿里云人脸识别使用流程简介. Code Sample 1.使用网络图片 using Sy ...

  3. 阿里云人脸识别C#调用示例参考 1

    概述 前面介绍了关于阿里云人脸识别Java调用示例参考,本文主要介绍C#调用阿里云人脸识别服务,参数等的获取参考阿里云人脸识别使用流程简介. Code Sample 1.使用网络图片 using Sy ...

  4. 阿里云人脸识别PHP调用示例参考

    概述 前面分别给出了关于阿里云人脸识别Java调用示例参考.阿里云人脸识别C#调用示例参考.阿里云人脸识别Python3调用示例参考 .本文主要介绍PHP调用阿里云人脸识别服务,参数等的获取参考阿里云 ...

  5. 使用java调用阿里云车牌识别API

    实现车牌识别功能我采用调用阿里云车牌识别API的方法,我使用的是eclipse,jdk 1.8,Tomcat 9.0 1.进入阿里云主页先创建阿里云账号 2.在控制台的头像那里找到AccessKey管 ...

  6. 调用阿里云身份证识别OCR

    这个是需要收费的第三方身份证识别OCR的接口 这个是官方给出的案例和文档 https://market.aliyun.com/products/57124001/cmapi028587.htmlspm ...

  7. 阿里云人脸识别使用流程简介

    概述 之前写过一篇关于Java 使用阿里云人脸识别的博客,介绍了如何使用网络及本地图片基于Rest API调用人脸识别服务.实际的使用中发现很多用户因为之前没有使用过人脸识别,对前期的一些参数配置还是 ...

  8. .Net 调用阿里云接口-识别车牌

    参考文档:生成URL - 阿里云视觉智能开放平台 - 阿里云 参考文档:https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeLicenseP ...

  9. 调用阿里云人脸识别接口示例

    下面我为大家展示一下我调用阿里云人脸识别接口的示例 首先说下开发环境,springboot 开发的 org.apache.commons.codec.binary.Base64; 这个主要是用来进行b ...

最新文章

  1. spring包自动扫描声明
  2. BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding
  3. 刷牙刷了这么多年,我们居然都搞错了!
  4. android--创建自己的内容提供器
  5. 陶哲轩实分析引理 11.1.4
  6. 《设计模式 基于C#的工程化实现及扩展》 - 书摘精要
  7. python在银行的应用案例_银行风控案例(python)
  8. Linux读取SSD的smart信息,使用smartmontools查看SSD的“秘密”信息
  9. 关于表情符号与UTF-8的探讨
  10. java 多进程多线程_Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题...
  11. dedeCMS如何进行关键词过滤替换和屏蔽非法词汇?
  12. 遇到一个Linux文件系统因bios时间错误变成只读的问题
  13. 【clickhouse】Clickhouse的MySQL引擎同步数据不准确 Decimal
  14. VS2013模块对于SAFESEH映像是不安全的解决方法
  15. 找呀志_通过开源框架引AsyncHttpClient处理get/post要求
  16. 【C语言】07-基本语句和运算
  17. 全志A33_Vstar
  18. 华为光纤猫HG8240破解,开启路由功能表
  19. java thread 简单写法_Java线程池写法改写为C#线程池写法
  20. Tomcat 启动速度慢,一直转圈的原因

热门文章

  1. java里面赋值运算符解释_Java语言中,赋值运算符是双目运算符。
  2. HiC-Pro: Hi-C数据预处理高效工具
  3. SOR和SSOR迭代
  4. Pr零基础快速入门Premiere视频剪辑系列(1):初识Premiere
  5. 通信原理包络是什么意思_通信原理调制:频谱搬移 先冲模拟调制中调幅说起...
  6. android rtsp server or clinet work success
  7. android 虚线画不出来的,Android shape画虚线,不显示或者显示是实线的解决方案
  8. 拿到月薪20k的前端工程师简历是什么样的?
  9. 路径规划仿真平台1.1 MSA*算法
  10. mysql定时任务每天凌晨删除一周前数据