阿里语音识别(语音转文字)java调用全程手把手详解-适合中小学生快速上手
阿里语音识别服务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 回车
看到了吧
第六步、大功告成!
本人原创未经许可,可随意转载!
阿里语音识别与百度语音识别的调用对比:
用例: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 回车
看到了吧
第六步、大功告成!
本人原创未经许可,可随意转载!
小白救星 QQ 99923309
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?