阿里语音识别服务java调用全程手把手详解-适合中小学生快速上手





阿里语音识别与百度语音识别的调用对比:

用例:1分30秒的录音文件

   百度用时:3秒

   阿里用时:30秒





   识别准确率来看:阿里还算准确,百度除了个别的关键词之外其余都不大准确

   二次开发方便性来说:

       百度的范例稍微修改能直接运行,调用方便,返回结果简单明了

       阿里不是缺少这个就是缺少那个,很多额外的包、库连个说法都没有(很无语),调用比较复杂,获取结果更是令人无语了





第一步注册开通(免费的):

    1、进入阿里云官网(https://account.aliyun.com/login/login.htm),申请阿里云账号。若已有阿里云账号,请忽略之。

    2、到“智能语音交互服务”页面(https://data.aliyun.com/product/nls),点击后『立即开通』。

    3、(免费)在跳转后的页面,点击『立即购买』,购买语音服务。注意目前公测服务是0折,您试用的话并不收费。

    4、在数加-Access Key页面(https://ak-console.aliyun.com/?spm=5176.doc30437.2.2.tA7VPD#/) 创建并获取您的Access Key 和 Access Secret。

第二步:不知道啥原因只能

    不能上传本地文件进行识别,必须是阿里什么oss里面存储的文件,调用的时候指定文件的URL地址

    这个阿里叫做对象存储oss,地址在:https://oss.console.aliyun.com/overview

    不知道为什么叫这么个名字,就叫阿里云盘不久可以了吗,功能喵了几眼没仔细看,反正就是上传一个文件,复制一个地址出来就可以了

第三步调用需要哪些参数:

    其实就四个需要的:

       1、Access Key

       2、Access Secret

       3、文件的http链接

       4、Appkey 这个从字面意思来理解完全风马牛不相及,正确的理解就是识别类型

          大体上一个语音的识别分成了种方式:

    一句话识别

             实时语音识别

             录音文件识别

             用户自定义热词

             自然语言理解(NLU)

          每种方式又根据语音的类型、速度、比特率等分成几个小类,为了区分这个整出了一个Appkey

 

 我因为要识别的是录音文件,所以这个Appkey有下面几个选项:

 参考地址: https://help.aliyun.com/document_detail/32378.html

 app_key
                  描述         语音文件

nls-service-telephone8khz
8kHz采样率 8k语音文件

nls-service-shurufa16khz
16kHz采样率 16k语音文件

nls-service-en
16k采样率 英文语音文件

nls-service-multi-domain
16kHz采样率 短视频,视频直播领域,教育,娱乐,文学,法律,财经等





 这个一般来说电脑录音、呼叫中心录音一般是 8k,所以我就直接选择:Appkey="nls-service-telephone8khz"





第四步写个客户端代码:

    1、先发几句牢骚啊:

    :( 这个地方也是,写官样文章的人都脑子用来吃屎的,不是用来让你明白的

    按照原因识别方式的不同,又给定了几种不同的调用方式,有些提供了SDK,有些没有提供,文件识别就没有提供SDK

    理论上只提供了一个叫做REST API的,这JB名字也很恶心,你就说http post不就完了吗,非得整的这么洋气,关键还没法理解(这也就是为什么现在装逼的越来越多了)

    2、代码调用步骤

    录音文件识别”API包括两部分:POST方式的“请求调用接口”,GET方式的“结果查询接口”。

    这个做法我感觉明显是脱裤子放屁啊,POST难道就不能返回结果吗,实在很无语了

    3、言归正传,下载一下范例代码地址:

    http://download.taobaocdn.com/freedom/33762/compress/nls-asr-files-java-demo-1.0.2.zip?spm=5176.doc32290.2.5.SAEBsN&file=nls-asr-files-java-demo-1.0.2.zip

    地址如果不对请参考:https://help.aliyun.com/document_detail/32290.html

    代码下载下来就四个java文件:

        a、TranscriptionDemo.java 这个是main文件 这个文件里面main方法前四行改一下就好了

   public static void main(String[] args) throws InterruptedException {

                第一行:String ak_id = "Xxxxxxxxxxxxxxxxxxxxx";//args[0]; //数加管控台获得的accessId

                第二行:String ak_secret = "yyyyyyyyyyyyyyyyyyyyyyy";/  /args[1]; // 数加管控台获得的accessSecret





                第三行:body.setApp_key("nls-service-telephone8khz"); //简介页面给出的Appkey

                第四行:body.setFile_link("http://xxxxx.oss-cn-beijing.aliyuncs.com/xxxxx.mp3");  //离线文件识别的文件url,推荐使用oss存储文件。链接大小限制为128MB

b、HttpResponse.java 这个没什么卵用,一个实体文件,不用看,也不用改

c、RequestBody.java 这个定义一些参数的,也没什么卵用,不用看,也不用改

d、HttpUtil.java 这个就是用来POST和GET的实际文件,你要急于看效果,这文件也不用看,也不用该

    4、到这一步你以为可以编译了吗?错误兄弟,这里面竟然还用了2个别的玩意

        a、fastjson (这个是阿里的下载地址:https://nchc.dl.sourceforge.net/project/fastjson/fastjson-1.1.34.jar)

b、slf4j (这个下载地址:https://www.slf4j.org/dist/slf4j-1.7.25.zip,

         解压以后里面一大堆不知道干嘛的,其实只需要:slf4j-api-1.7.25.jar 这一个就够了)

第五步编译运行一下:   

    我呢,因为不大习惯各种开发工具一般就是找个记事本+ ant就能搞定了

    所以我的做法是:组织一下目录结构,编一个build.xml,然后在dos下面运行 ant就编译好了,下面看看具体做法啊:

    1、目录结构

       x:\nls-asr-files-java-demo-1.0.2 (阿里范例代码解压目录)

           |---src  (阿里范例代码解压目录)这里面就是客户端的代码

  |---lib  自己建立一下,把 slf4j-api-1.7.25.jar 和 fastjson-1.1.34.jar 放进去

  |---build..xml 建一个这个啊,这个是ant编译需要的指令集,文件内容如下:

    2、编辑ant编译需要的 build.xml文件

  ========================build.xml begin======================================

  <?xml version="1.0" encoding="UTF-8" ?>

<project name="alinlsasr" default="run" basedir=".">

<property name="src" value="src"/>

<property name="dest" value="classes"/>

<property name="base.dir" value="." /> 

<property name="lib.dir" value="${base.dir}/lib" />  

<property name="doc.dir" value="doc"/>

<property name="cfcatest_jar" value="nls-asr-files-java-demo-1.0.2.jar"/>

<!-- <property name="obfjar" value="nls-asr-files-java-demo-1.0.2-obf.jar" /> 这里不用管,是我其它项目用来做代码混淆的-->

<property name="main.class" value="com.alibaba.idst.nls.TranscriptionDemo"/>

   <path id="lib_classpath">

       <fileset dir="${lib.dir}">

           <include name="*.jar"/>

       </fileset>  

 

   </path>


<target name="init">

  <mkdir dir="${dest}"/>

</target>

<target name="compile" depends="init">

  <javac srcdir="${src}" destdir="${dest}" includeantruntime="on" encoding="UTF-8">

    <classpath refid="lib_classpath"/>

  </javac>

</target>





<!-- <target name="build1" depends="jar">

  <taskdef name="obfuscate" classname="com.yworks.yguard.ObfuscatorTask" classpath="D:/apache-ant-1.9.7/lib/yguard.jar" />

 

  <obfuscate mainclass="${main.class}" logfile="${obfuscationlog}" replaceclassnamestrings="false">

  <inoutpair in="${cfcatest_jar}" out="${obfjar}" />

  </obfuscate>

</target> -->





<target name="build" depends="compile">

<!-- <target name="build" depends="compile,createdoc"> -->

  <jar jarfile="${cfcatest_jar}" basedir="${dest}" encoding="UTF-8">

<manifest>

<attribute name="Main-Class" value="${main.class}"/>

<attribute name="Class-Path" value="lib/fastjson-1.1.34.jar lib/slf4j-api-1.7.25.jar"/>

</manifest>

</jar>

</target>

<target name="run" depends="clean,build">

  <!-- <java classname="com.zdz.ant.test.HelloAnt" classpath="${helloant_jar}"/> -->

</target>

<target name="clean">

  <delete dir="${dest}" />

  <delete file="cfcatest_jar" />

</target>

<target name="rerun" depends="clean,run">

  <ant target="clean" />

  <ant target="run" />

</target>

<!-- <target name="createdoc">

     <delete dir="${doc.dir}" />

     <mkdir dir="${doc.dir}"/>

     <javadoc destdir="${doc.dir}" encoding="UTF-8" docencoding="UTF-8">

      <packageset dir="${src}">

       <include name="**"/>

      </packageset>

     </javadoc>

    </target>
这里不用管,是用来生成代码说明文档的 -->

</project>

  ========================build.xml end========================================

    3、打开DOS窗口或者linux终端

       cd x:\nls-asr-files-java-demo-1.0.2

       输入 ant 然后回车

    4、不出意外会显示:

       一大堆,最后显示:

build:

     [jar] Building jar: x:\nls-asr-files-java-demo-1.0.2\nls-asr-files-java-demo-1.0.2.jar





run:





BUILD SUCCESSFUL

Total time: 1 second





:) nls-asr-files-java-demo-1.0.2.jar 这个就是编译结果了

    5、执行一下看看效果啊

    输入 java -jar nls-asr-files-java-demo-1.0.2.jar 回车

    大约30秒以后会出现想要的结果了:)

    6、如果显示结果是乱码,不出意外肯定也是,怎么处理呢?

       打开:HttpUtil.java 找到 sendGet 这个方法

       把里面的:

       System.out.println("get response status code: ["+response.getStatus()+"], response massage : ["+response.getMassage()+"] ,result :["+response.getResult()+"]");

       改成:

       System.out.println(new String(response.getResult().getBytes("GBK"),"UTF-8"));

    7、在运行一下  

       输入 java -jar nls-asr-files-java-demo-1.0.2.jar 回车

    看到了吧





第六步、大功告成!









本人原创未经许可,可随意转载!

阿里语音识别(语音转文字)java调用全程手把手详解-适合中小学生快速上手的更多相关文章

  1. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  2. 机器人之路的第一小步:录音+语音识别(语音转文字),大小600K(免费下载)!

    机器人之路的第一小步:录音+语音识别(语音转文字),大小600K,本人出品! 机器人之路的第一小步:录音+语音识别,准确率还不是特别高,不过普通话标准的话,识别准确率还是不错的,大家可以体验一下,请下 ...

  3. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  4. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  5. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  6. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  7. java.util.Scanner应用详解++扫描控制台输入

    java.util.Scanner应用详解   java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...

  8. Java的JDBC事务详解

    Java的JDBC事务详解         分类:             Hibernate              2010-06-02 10:04     12298人阅读     评论(9) ...

  9. (转)java.util.Scanner应用详解

    java.util.Scanner应用详解   java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...

随机推荐

  1. (5)How to let go of being a "good" person — and become a better person

    https://www.ted.com/talks/dolly_chugh_how_to_let_go_of_being_a_good_person_and_become_a_better_perso ...

  2. 华为机试-iNOC产品部-杨辉三角的变形

    题目描述 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 11 4 10 16 19 16 10 4 1以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数 ...

  3. Effective C++ 随笔(4)

    条款21:必须返回对象时,别妄想返回其reference 例子: Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为 const Rational&am ...

  4. AngularJS的select设置默认值

    AngularJS的select设置默认值 在使用Angular时候使用select标签时会遇到绑定数据指定默认显示值可这样实现 <!DOCTYPE html> <html ng-a ...

  5. js常见input校验

    //校验输入价格等,保留2位小数 function clearNoNum(obj){ obj.onkeyup = function(event){ var e = event || window.ev ...

  6. 如果我写一个开源的HIS软件

    HIS也称为医院信息管理系统,如果我要写一个 开源的,会成吗?为什么要这么做?出于对这个行业的担忧及其当前该行业的一些问题的思考.我曾跟两个HIS供应商讨论过这个话题,但可以感受到他们在利益面前,最终 ...

  7. android:padding和android:margin的区别[转]

    本文综合了:http://zhujiao.iteye.com/blog/1856980 和 http://blog.csdn.net/maikol/article/details/6048647 两篇 ...

  8. Html5与Css3知识点拾遗(二)

    页面title 选择能简要概括文档内容的文字作为title文字,title核心内容放在前60个字符 分级标题 1.创建分级标题时,避免跳过级别,如h3直接跳到h5,但允许从低级别跳到高级别. 2.不用 ...

  9. 配置SecureCRT密钥连接Linux

    SSH公钥加密的方式使得对方即使截取了帐号密码,在没有公钥私钥的情况下,依然无法远程ssh登录系统,这样就大大加强了远程登录的安全性. 1.        编辑配置文件 /etc/ssh/sshd_c ...

  10. jQuery插件初级练习4

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...