科大讯飞语义

简介: 讯飞语义效果图源码下载地址(Android Studio工程):http://download.

讯飞语义

效果图

这里写图片描述

源码

下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9064463

语义测试接口

地址:http://osp.voicecloud.cn/index.php/default/quicktest/index

P1

开通服务,下载SDK

之前已经介绍过,地址:http://blog.csdn.net/q4878802/article/details/47762169#t8

这里说一下,进入到SDK的下载界面,你发现找不到语义的服务,而在我们开通服务的时候都是默认就帮我们把语义的服务开启了,可能是因为语义是只能用网络的,没有本地的资源,所以只要选择一个在线的功能,使用的jar包应该都是一样的,为什么没有直接下载语义的SDK我也不是很清楚,但是都可以用。

说明

之前的工程都是在Eclipse下演示的,随着Android Studio的普及,我这里也开始使用Android Studio写Demo,虽然导入jar包和so库的过程可能不太一样,但是整体的流程是一样的。

将jar包和so库导入Android Studio工程

将jar包copy到libs目录下

在main目录下创建jniLibs目录,将so文件copy过来

P2

初始化

在清单文件中application标签下添加name属性

android:name=".InitApplication"

初始化

package com.example.kongqw.kqwunderstanddemo;

import android.app.Application;
import android.widget.Toast;

import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;

/**
 * Created by kongqw on 2015/8/29.
 */
public class InitApplication extends Application {
    @Override
    public void onCreate() {
        Toast.makeText(this, "InitApplication", Toast.LENGTH_LONG).show();
        // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成SpeechUtility对象为null
        // 如在Application中调用初始化,需要在Mainifest中注册该Applicaiton
        // 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数:SpeechConstant.FORCE_LOGIN+"=true"
        // 参数间使用“,”分隔。
        // 设置你申请的应用appid
        StringBuffer param = new StringBuffer();
        param.append("appid=55d33f09");
        param.append(",");
        param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC);
        // param.append(",");
        // param.append(SpeechConstant.FORCE_LOGIN + "=true");
        SpeechUtility.createUtility(InitApplication.this, param.toString());

        super.onCreate();
    }
}

语义理解工具类

package com.example.kongqw.kqwunderstanddemo.engine;

import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.TextUnderstander;
import com.iflytek.cloud.TextUnderstanderListener;
import com.iflytek.cloud.UnderstanderResult;

/**
 * 科大讯飞语义理解
 *
 * @author kongqw
 */
public abstract class KqwUnderstander {

    public abstract void result(String json);

    // 上下文
    private Context mContext;
    // Log标记
    private static final String TAG = "KqwUnderstander";
    // 语义理解对象(文本到语义)。
    private TextUnderstander mTextUnderstander;

    /**
     * 构造方法
     *
     * @param context
     */
    public KqwUnderstander(Context context) {
        // 上下文
        mContext = context;

        // 初始化语义理解对象
        mTextUnderstander = TextUnderstander.createTextUnderstander(context, textUnderstanderListener);
    }

    // TODO  返回科大讯飞返回Json的实体类的对象
    public String textUnderstander(String text) {
        if (mTextUnderstander.isUnderstanding()) {
            mTextUnderstander.cancel();
        } else {
            int ret = mTextUnderstander.understandText(text, textListener);
            if (ret != 0) {
                Toast.makeText(mContext, "语义理解失败,错误码:" + ret, Toast.LENGTH_SHORT).show();
            }
        }

        return null;
    }

    /**
     * 初始化监听器(文本到语义)。
     */
    private InitListener textUnderstanderListener = new InitListener() {

        @Override
        public void onInit(int code) {
            Log.d(TAG, "textUnderstanderListener init() code = " + code);
            if (code != ErrorCode.SUCCESS) {
                Toast.makeText(mContext, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();
            }
        }
    };

    private TextUnderstanderListener textListener = new TextUnderstanderListener() {

        @Override
        public void onResult(final UnderstanderResult result) {

            if (null != result) {
                // 显示
                Log.d(TAG, "understander result:" + result.getResultString());
                // Toast.makeText(mContext, "understander result:" + result.getResultString(), Toast.LENGTH_SHORT).show();
                String text = result.getResultString();
                if (!TextUtils.isEmpty(text)) {
                    result(text);
                }
            } else {
                Log.d(TAG, "understander result:null");
                Toast.makeText(mContext, "识别结果不正确。", Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onError(SpeechError error) {
            Toast.makeText(mContext, "onError Code:" + error.getErrorCode(), Toast.LENGTH_SHORT).show();
        }
    };
}

测试类

package com.example.kongqw.kqwunderstanddemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.kongqw.kqwunderstanddemo.engine.KqwUnderstander;

public class MainActivity extends Activity {

    private EditText mEtText;
    private KqwUnderstander mKqwUnderstander;
    private TextView mTvShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mEtText = (EditText) findViewById(R.id.et_text);

        mTvShow = (TextView) findViewById(R.id.tv_show);

        // 初始化语音合成对象
        mKqwUnderstander = new KqwUnderstander(this) {
            @Override
            public void result(String json) {
                mTvShow.setText(json);
                // Toast.makeText(MainActivity.this, "json = " + json, Toast.LENGTH_SHORT).show();
            }
        };

    }

    /**
     * 语义理解
     *
     * @param view
     */
    public void start(View view) {
        Toast.makeText(this, "语义理解 : " + mEtText.getText().toString().trim(), Toast.LENGTH_SHORT).show();
        mKqwUnderstander.textUnderstander(mEtText.getText().toString().trim());
    }
}

XML页面布局

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="上帝到西二旗怎么走"
        android:textSize="20dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_text"
        android:gravity="center"
        android:onClick="start"
        android:text="语义理解"
        android:textSize="20dp" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/button">

        <TextView
            android:id="@+id/tv_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </ScrollView>
</RelativeLayout>

注意

在使用语义之前一定要开通对应的语义场景

相关文章
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
讯飞星火大模型:AI语言模型的巅峰之作
今年,我们不得不提的一个热门话题就是ChatGPT,这是一款基于语言模型的人机对话系统。它在工作和生活中给我们带来了极大的便利。作为一名从事IT行业的人,我深切体会到了它在技术和文本处理方面的重要性。
247 0
讯飞星火大模型:AI语言模型的巅峰之作
|
10月前
|
算法 程序员 测试技术
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
押注数字人,百度、科大讯飞“短兵相接”
公众对数字人的认知上升到了一个新的台阶。
69 0
|
5月前
|
自然语言处理 Java API
对接科大讯飞NLP
对接科大讯飞NLP
25 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
2022科大讯飞AI开发者大赛,来了!
6月9日,第四届(2018~2022)科大讯飞AI开发者大赛,正式启动! 科大讯飞联合优质企业、知名高校、融投资机构等53家合作伙伴, 围绕十大新兴产业开启算法、应用、编程赛、虚拟形象选拔、辩论赛、创意集市创意赛等108个赛道方向,覆盖了智能语音、视觉、自然语言、图文识别等人工智能热门技术,涵盖了元宇宙、农业养殖、遗址文化、生物与环保、医疗健康、地理遥感、企业数字化、智能家居、电商销售等多领域。
|
机器学习/深度学习 人工智能 自然语言处理
国产AI大模型酣战,科大讯飞打响“智慧涌现”第一枪
AI大模型技术需求也随之水涨船高,成为科技企业重点关注的方向。
148 0
|
机器人 Java 开发工具
讯飞AIUI智能机器人1
讯飞AIUI智能机器人1
109 0
讯飞AIUI智能机器人1
|
机器人 Shell API
讯飞AIUI智能机器人2
讯飞AIUI智能机器人2
272 0
讯飞AIUI智能机器人2
|
机器学习/深度学习 算法 开发者
科大讯飞学术论文分类挑战赛 0.79+ baseline
科大讯飞学术论文分类挑战赛 0.79+ baseline
180 0
科大讯飞学术论文分类挑战赛 0.79+ baseline
|
人工智能 自然语言处理 搜索推荐
科大讯飞也推AI智能硬件,K12“知识图谱型”AI教育“真香”?
一次性推出5款新硬件产品,公众认知中一向ToB的“明星企业”科大讯飞前两天的发布会让人“意外”,ToC转型似乎说来就来。
科大讯飞也推AI智能硬件,K12“知识图谱型”AI教育“真香”?