语言识别和聊天机器人的实现
安卓上面语音识别和聊天机器人是非常常见也是非常实用的功能,在这里主要分享一款非常著名的语言平台,科大迅飞开放平台。
首先从官网下载一个sdk的包,如下图:
我们可以新建一个安卓工程,取名Robot,将下载下来的文件中的libs中的文件拷贝到我们的项目中的libs目录下,然后写一下布局文件:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lv_list" android:layout_width="wrap_content" android:layout_height="0dp" android:divider="@null" android:layout_weight="1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bottom_bar" android:gravity="center" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="@drawable/btn_selector" android:onClick="startListen" android:text="点击开始语音识别" android:textColor="#000" android:textSize="16sp" /> </LinearLayout> </LinearLayout>list_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_ask" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_margin="5dp" android:background="@drawable/asker_bubble" android:gravity="center" android:text="你吃饭了吗?" android:textColor="#000" android:textSize="16sp" /> <LinearLayout android:id="@+id/ll_answer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_ask" android:layout_margin="5dp" android:background="@drawable/answer_bubble" android:orientation="vertical" > <TextView android:id="@+id/tv_answer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="" android:textColor="#000" android:textSize="16sp" /> <ImageView android:id="@+id/iv_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/m" android:visibility="gone" /> </LinearLayout> </RelativeLayout>界面效果如下:
我们可以在主界面中实现上面的功能:
// 初始化语音引擎
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=54b8bca3");
/** * 语音朗诵 */ public void read(String text) { SpeechSynthesizer mTts = SpeechSynthesizer .createSynthesizer(this, null); mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); mTts.setParameter(SpeechConstant.SPEED, "50"); mTts.setParameter(SpeechConstant.VOLUME, "80"); mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); mTts.startSpeaking(text, null); } /** * 开始语音识别 * * @param view */ public void startListen(View view) { RecognizerDialog iatDialog = new RecognizerDialog(this, null); // 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类 iatDialog.setParameter(SpeechConstant.DOMAIN, "iat"); iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin"); iatDialog.setListener(recognizerDialogListener); iatDialog.show(); } class ChatAdapter extends BaseAdapter { @Override public int getCount() { return mChatList.size(); } @Override public ChatBean getItem(int position) { return mChatList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(MainActivity.this, R.layout.list_item, null); holder.tvAsk = (TextView) convertView.findViewById(R.id.tv_ask); holder.tvAnswer = (TextView) convertView .findViewById(R.id.tv_answer); holder.llAnswer = (LinearLayout) convertView .findViewById(R.id.ll_answer); holder.ivPic = (ImageView) convertView .findViewById(R.id.iv_pic); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ChatBean item = getItem(position); if (item.isAsker) {// 是提问者 holder.tvAsk.setVisibility(View.VISIBLE); holder.llAnswer.setVisibility(View.GONE); holder.tvAsk.setText(item.text); } else { holder.tvAsk.setVisibility(View.GONE); holder.llAnswer.setVisibility(View.VISIBLE); holder.tvAnswer.setText(item.text); if (item.imageId != -1) {// 有图片 holder.ivPic.setVisibility(View.VISIBLE); holder.ivPic.setImageResource(item.imageId); } else { holder.ivPic.setVisibility(View.GONE); } } return convertView; } } static class ViewHolder { public TextView tvAsk; public TextView tvAnswer; public LinearLayout llAnswer; public ImageView ivPic; } /** * 解析语音数据 * * @param resultString */ protected String parseData(String resultString) { Gson gson = new Gson(); VoiceBean bean = gson.fromJson(resultString, VoiceBean.class); ArrayList<WSBean> ws = bean.ws; StringBuffer sb = new StringBuffer(); for (WSBean wsBean : ws) { String text = wsBean.cw.get(0).w; sb.append(text); } return sb.toString(); }
当启动的时候是这样的
更多的功能我们可以去看开发者文档。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识...
这是一篇国外的文章,介绍如何通过 WebRTC、OpenCV 和 WebSocket 技术实现在 Web 浏览器上的人脸识别,架构在 Jetty 之上。 实现的效果包括: 还能识别眼睛 人脸识别的核心代码: 页面: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <div> <video id= "live" width= "320" height= "240" autoplay style= "display: inline;" ></video> <canvas width= "320" id= "canvas" height= "240" style= "display: inline;" ></canvas> </div> <script type= "text/javascript" > var video = $( "#live" ).get()[0]; var canvas = $( "#canv...
- 下一篇
触摸屏程序设计要点
【项目实战派】触摸屏程序设计要点 触摸屏作为一种更为直接的人机交互方式,现在广泛运用于智能手机、工业控制、场景展示等许多场合。作为程序员,如何理解触摸屏程序设计?如何做好的触摸屏程序设计?现在已经有的资源包括那些?借着项目牵引,我对这个问题进行一定探索,经验有限,欢迎批评交流。 一、如何理解触摸屏程序设计 操作系统层面已经实现了基础功能,基于触摸屏的界面,从本质上来说和普通的GuI界面是没有区别的。程序的界面设计需要服务于程序的功能, 为客户提供直观、易用、体验效果较好的界面效果 。作为以图像处理为核心的程序界面设计,相对来说还是比较简单的。举个例子, 我认为至少包括以下要素: 1、主体是图像处理窗口,包括原始界面、处理过程、处理结果和截取的界面等; 2、基本操作,包括摄像头的选择和打开、主要功能按钮、对结果保存和输出的按钮; 3、状态输出。如果项目包括识别功能,需要有对当前状态的情况汇总,对特殊的状态要有告警; 4、除了按钮以外,应该有完整的菜单,能够对所有按钮的功能进行备份。 那么触摸屏程序是怎样的了? win8是较为典型的适用于触摸屏的程序。这个界面可以看到,各种应...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启