语言识别和聊天机器人的实现

简介: 安卓上面语音识别和聊天机器人是非常常见也是非常实用的功能,在这里主要分享一款非常著名的语言平台,科大迅飞开放平台。 首先从官网下载一个sdk的包,如下图: 我们可以新建一个安卓工程,取名Robot,将下载下来的文件中的libs中的文件拷贝到我们的项目中的libs目录下,然后写一下布局文件: activity_main.xml <LinearLayout xmlns:

安卓上面语音识别和聊天机器人是非常常见也是非常实用的功能,在这里主要分享一款非常著名的语言平台,科大迅飞开放平台

首先从官网下载一个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();
	}


当启动的时候是这样的


更多的功能我们可以去看开发者文档。

目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
谷歌机器人「吃了」语言大模型后,会自学和思考了
谷歌机器人「吃了」语言大模型后,会自学和思考了
240 0
|
机器学习/深度学习 数据采集 自然语言处理
谷歌机器人迈入「交互语言」新纪元!开放命令正确率高达93.5%,开源数据量提升十倍
谷歌机器人迈入「交互语言」新纪元!开放命令正确率高达93.5%,开源数据量提升十倍
|
人工智能 机器人
为什么聊天机器人不会在语言密集型角色中完全取代人类
在这篇博文中,我们讨论了在客户服务和写作行业中使用聊天机器人的利弊。虽然聊天机器人能够对客户查询提供快速准确的响应,但它们缺乏人类作家和客户服务代表所拥有的创造力、同理心和真实性。我们还将讨论围绕聊天机器人和人工智能的一般使用的道德问题。总的来说,聊天机器人应该被视为一种补充,而不是人类劳动的替代品。在这篇文章中详细了解聊天机器人在劳动力中的作用。 我理解许多人对人工智能取代人类工人的潜力的担忧。具体来说,人们一直在猜测聊天机器人有可能取代人类客户服务代表、作家和其他依赖语言技能的专业人士。
74 0
|
人工智能 自然语言处理 机器人
两个Bot自创新语言!Facebook机器人纽约自由行导航定位碾压人类
在FAIR和蒙特利尔大学合作的最新研究中,研究人员首次将实验中将感知、行动和使用自然语言交互达成目标这三个任务结合在一起:让两个Bot使用自然语言对话,让“导游bot”将“游客bot”带到指定地点,而且导航成功率超越了人类。
1659 0
|
新零售 人工智能 自然语言处理
复旦博士给机器人当语言老师,教出了英语四级水平的“阿里小蜜“
海外生活十五载,这位全美律师都离不开的复旦博士,回国第一份工作,是进阿里做客服小二。
1934 0
|
3月前
|
传感器 人工智能 监控
智能耕耘机器人
智能耕耘机器人
45 3
|
7月前
|
人工智能 自然语言处理 机器人
智能电话机器人核心技术:自然语言处理
什么是自然语言处理? 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法.自然语言处理是一门融语言学、计算机科学、数学于一体的科学.因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别. 自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统.因而它是计算机科学的一部分. 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域.
|
2月前
|
传感器 人工智能 自然语言处理
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人

热门文章

最新文章