最近由于一项目需求,需要实现上位机对下位机的语音控制,(嫌弃语音模块太贵,才想着做没有成本的方法实现),这里主要测试了两种调用百度语音识别API的方案,一种是基于SDK(这里测试使用Android SDK),一种是通过java实现API调用。
先看下Android SDK的使用,下面是使用效果(不知道为什么我使用app按下录音时,录屏没有录进我说的话。。。。影响不大,就当我说了):

百度语音识别调用

然后是一些SDK的使用方式:
首先我们需要在自己的项目中导入百度AI下载Android sdk,即图中的core:

关于如何调用sdk中的功能,在官方的下载包中有明确的讲解,这里不展开说明,仅分享个人感受,这里我使用的是它sdk中的短语音识别:

下面的没有用过,应该是指唤醒功能什么的吧,在我自己的项目activity中继承这个类:

然后在按钮事件中调用其功能:

  vocal_home.setOnTouchListener(new View.OnTouchListener() {@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {//更改为按下时start();// Toast.makeText(ActivityMiniRecog.this, "我正在听", Toast.LENGTH_LONG).show();vocal_home.setBackgroundResource(R.drawable.shape2);vocal_home.setText("正在识别(识别完成后再次点击发送)");} else if (event.getAction() == MotionEvent.ACTION_UP) {//改为抬起时的图片vocal_home.setBackgroundResource(R.drawable.shape3);vocal_home.setText("按下说话");stop();//Toast.makeText(ActivityMiniRecog.this, "", Toast.LENGTH_LONG).show();//  Toast.makeText(MainActivity.this, "松开:" + final_result, Toast.LENGTH_SHORT).show();// mqtt.publishmessageplus("curtain_control", final_result);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}if (final_result.equals("打开窗帘。"))mqtt.publishmessageplus("curtain_control", "{\"power\":\"right\"}");else if (final_result.equals("关闭窗帘。"))mqtt.publishmessageplus("curtain_control", "{\"power\":\"left\"}");else if (final_result.equals("暂停。"))mqtt.publishmessageplus("curtain_control", "{\"power\":\"off\"}");}return false;}});

由此实现了语音识别和记录,得到了数据,便可以做自己想做的事了,例如这里我是用来控制窗帘的运动的。

sdk中的东西太多了,如有需要可以深入探索,这里到此为止,然后是我在使用过程中遇到的一些问题:一个是sdk使用的是androidx,而我原来的项目使用的是android.support,导致我自己的项目发生冲突,这里我的解决方法是全更新使用Androidx库,毕竟新总胜于旧嘛。
然后是通过java 使用api调用百度语音识别,这里我采用了官网提供的pcm语音数据,没有做录音处理,就是懒。。。如下是识别结果:

然后贴下代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import netscape.javascript.JSObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class Baidu_vocal {public static void main(String[] args) throws IOException {final String APP_KEY = "GUb5H9oEQ6TBG9bEGbqglQlI";final String SECRET_KEY = "Vr2AYu9C8nAmSdbufGhHuRs8hfyBFqTt";final String FILENAME = "16k.pcm";String CUID = "1234567JAVA";final String FORMAT = FILENAME.substring(FILENAME.length() - 3);final int RATE = 16000;String URLd="http://vop.baidu.com/server_api";int DEV_PID=1537;String SCOPE="audio_voice_assistant_get";String token="24.3787ab07a129cb6f7191d49db4b4680d.2592000.1620725159.282335-23943116";String contentTypeStr = "audio/" + FORMAT + "; rate=" + RATE;String url2 = URLd + "?cuid=" + URLEncoder.encode(CUID, "UTF-8") + "&dev_pid=" + DEV_PID + "&token=" + token;byte[] content ;File file = new File(FILENAME);FileInputStream is = null;try {is = new FileInputStream(file);byte[] b = new byte[1024];// 定义一个输出流存储接收到的数据ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 开始接收数据int len = 0;while (true) {len = is.read(b);if (len == -1) {// 数据读完break;}byteArrayOutputStream.write(b, 0, len);}//音频转换的数据流content=byteArrayOutputStream.toByteArray();} finally {if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}HttpURLConnection conn = (HttpURLConnection) new URL(url2).openConnection();conn.setConnectTimeout(5000);conn.setRequestProperty("Content-Type", contentTypeStr);conn.setRequestMethod("POST");conn.setDoOutput(true);conn.getOutputStream().write(content);conn.getOutputStream().close();System.out.println("url is " + url2);System.out.println("header is  " + "Content-Type :" + contentTypeStr);String result;int responseCode = conn.getResponseCode();InputStream inputStream = conn.getInputStream();if (responseCode != 200) {System.err.println("http 请求返回的状态码错误,期望200, 当前是 " + responseCode);if (responseCode == 401) {System.err.println("可能是appkey appSecret 填错");}System.err.println("response headers" + conn.getHeaderFields());if (inputStream == null) {inputStream = conn.getErrorStream();}}byte[] results = getInputStreamContent(inputStream);result=new String(results);JSONObject jsonObject = JSONObject.parseObject(result);String out_put= jsonObject.getString("result");File files = new File("result.txt");FileWriter fo = new FileWriter(files);fo.write(result);fo.close();System.out.println("Result also wrote into " + files.getAbsolutePath());System.out.println("result:" + out_put);}public static byte[] getInputStreamContent(InputStream is) throws IOException {byte[] b = new byte[1024];// 定义一个输出流存储接收到的数据ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 开始接收数据int len = 0;while (true) {len = is.read(b);if (len == -1) {// 数据读完break;}byteArrayOutputStream.write(b, 0, len);}return byteArrayOutputStream.toByteArray();}
}

这里流程懒得画图,大概说一下,首先你得保证你在百度AI上创建了自己的产品,如图:

官方提供了免费的额度,可以白嫖,创建完后,需要使用到所创建产品的三要素:

然后通过三要素先获取一边token(代码中没有做这一步,可以直接复制连接得到token),然后利用token post本地语音转码后的数据给它,它会返回json类型的数据回来,整个流程就这样。
文章写得很菜,纯当个人记录,很多细节没有上图,如有疑问可以留言探讨。

javaAPI和android sdk接入百度语音识别相关推荐

  1. 踩坑!穿山甲广告Android SDK接入

    随着流量变现的兴起,越来越多的广告SDK汹涌而来,除了字节的穿山甲,还有腾讯的优量汇.百度的广告联盟,其他的例如AdView和万普世纪已经逐渐退出历史的舞台. 本篇文章将基于com.pangle.cn ...

  2. Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

    一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有 ...

  3. Unity3d Android SDK接入解析(三)接入Android Library的理解(爱贝云支付为例)

    一.前言 写这个主题的原因,出于刚入门u3d,需要接入爱贝云支付的内容,苦于爱贝支付是一个Android的Library库,看到网上漫天遍野都是Android接入的帖子,但却没有我想要的关于Libra ...

  4. android 360游戏sdk,360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明

    360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明 360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明: Android SDK SDK版本 ...

  5. 百度android sdk聚合,SDK接入 · 百度移动统计Android SDK使用手册

    可视化圈选SDK接入 SDK简介 百度移动统计无埋点SDK是在现有的手动埋点SDK上的一个功能升级.结合了所有手动埋点的优势,同时避免了手动埋点的繁琐过程.实现了一行代码接入,配合WEB端圈选,完成页 ...

  6. Unity接入百度语音识别SDK windows平台

    1.先注册百度开放平台的账号,然后按文档申请试用资格及创建应用:https://ai.baidu.com/ai-doc/SPEECH/qknh9i8ed Windows平台选择"不需要&qu ...

  7. Unity接入百度语音识别WebAPI

    第一步,布局如图 image.png 第二步,代码如下 (自行填写apiKey和secretKey) using System; using System.Collections; using Sys ...

  8. android 阿里云 maven,Android SDK接入(Maven集成)

    定义Application类,编写onCreate方法,启动服务. 说明 建议将崩溃分析服务的SDK初始化代码段,放在所有业务代码之前,确保App在启动时,优先加载崩溃分析服务,保障后续崩溃的信息,可 ...

  9. 数位云Android SDK接入指南

    1 概述 数位场景识别Android SDK是一个提供精准室内位置的数据服务应用程序接口.该接口可提供无需额外硬件部署的室内位置识别功能,使移动设备应用快速具备获取用户室内精准位置的能力.https: ...

最新文章

  1. 理解为何用期望最大化或梯度下降等启发式方法处理非凸函数在实际中如此有效,对于理论计算机科学而言是一大挑战
  2. Hyper-V 故障转移群集管理
  3. python3.8自带matlop和numpy吗_Python enlop包_程序模块 - PyPI - Python中文网
  4. 【Java/JFrame/多线程】小球碰到边缘的回弹效果
  5. SAP CRM Fiori My Opportunity应用文件上传的技术实现
  6. Ubuntu 18.04 与 20.04 LTS 性能测试
  7. java trie_java字典树(Trie)实现中文模糊匹配
  8. Qt学习之路1---软件下载安装及工程简介
  9. Lucene 的索引文件锁原理
  10. WHILE (Transact-SQL)
  11. HTML简单的登录页面--实例
  12. 切比雪夫多项式(Chebyshev Polynomials)
  13. 灵棋排盘:一款让人感到惊喜的命理排盘工具
  14. 量化指标公式源码_五行量化副图指标 源码 通达信
  15. 如何区分零线和地线,及其相关理解
  16. # 2gether 在一起 # 2 号星际碎片现身,全军出击!
  17. PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
  18. 《终结拖延症》读书笔记,作者威廉·克瑙斯
  19. JNA实战笔记汇总(二)——JNA和C / C ++的数据类型映射(dll函数回调、结构体、指针)
  20. java毕业生设计医院分诊管理系统计算机源码+系统+mysql+调试部署+lw

热门文章

  1. 因子分析累计贡献率_累计方差贡献率和方差贡献率是什么关系SPSS中~~
  2. pywinauto实现中信证券股票交易接口
  3. python中利用类封装进行的设计:个人体重计算
  4. rx590 黑苹果 无货_黑苹果10.14免驱显卡表
  5. 需求池与功能清单的区别
  6. oracle数据库安装卡在 正在保存产品清单 70%进度条
  7. yolov8训练筷子点数数据集
  8. 记一次阿里前端面试的具体经历(资料已更新)
  9. MobileNet_v2 with transfer learning(修改Mobile_v2 模型)
  10. 启动idea报Failed to load JVM DLL..jre\bin\jvm.dll,If you already have 32-bit JDK installed