【Android】灵云在线语义理解功能使用说明

来源:互联网 发布:电脑扩音器软件 话筒 编辑:程序博客网 时间:2024/04/30 10:33

注册

使用灵云的语义理解功能需要先在官网上进行注册应用。官网地址

注册比较简单,就不做过多介绍了,注册完应用以后,在后台创建自己的应用,创建完应用以后需要给应用开通对应的语义理解能力。
这里写图片描述

capKey说明:

  • nlu.cloud 云端语义理解别功能

使用nlu.cloud功能时,需要勾选对应的领域,以下示例按照百科领域进行测试。
这里写图片描述

领域的介绍手册

集成

下载灵云的Android版本语义理解功能,下载地址

源码

Github

灵云在线语义理解功能

需要加入的so和jar包有:

  • libhci_curl.so
  • libhci_sys.so
  • libhci_sys_jni.so
  • libhci_nlu.so
  • libhci_nlu_jni.so
  • libhci_nlu_cloud_recog.so
  • libstlport_shared.so
  • hcicloud-5.0.jar

需要使用的权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

加载配置类

package com.miao.test.util;/** * 灵云配置信息 * Created by 10048 on 2016/12/3. */public class ConfigUtil {    /**     * 灵云APP_KEY     */    public static final String APP_KEY = "c85d54f1";    /**     * 开发者密钥     */    public static final String DEVELOPER_KEY = "712ddd892cf9163e6383aa169e0454e3";    /**     * 灵云云服务的接口地址     */    public static final String CLOUD_URL = "http://test.api.hcicloud.com:8888";    /**     * 需要运行的灵云能力     */    // 云端语义理解    public static final String CAP_KEY_NLU_CLOUD_RECOG = "nlu.cloud";}

封装灵云系统的初始化功能

package com.example.sinovoice.util;import android.content.Context;import android.os.Environment;import android.util.Log;import com.sinovoice.hcicloudsdk.api.HciCloudSys;import com.sinovoice.hcicloudsdk.common.AuthExpireTime;import com.sinovoice.hcicloudsdk.common.HciErrorCode;import com.sinovoice.hcicloudsdk.common.InitParam;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;/** * Created by miaochangchun on 2016/11/28. */public class HciCloudSysHelper {    private static final String TAG = HciCloudSysHelper.class.getSimpleName();    private static HciCloudSysHelper mHciCloudSysHelper = null;    private HciCloudSysHelper(){    }    public static HciCloudSysHelper getInstance() {        if (mHciCloudSysHelper == null) {            return  new HciCloudSysHelper();        }        return  mHciCloudSysHelper;    }    /**     * 初始化函数     * @param context     * @return     */    public int init(Context context){        //配置串参数        String strConfig = getInitParam(context);        int errCode = HciCloudSys.hciInit(strConfig, context);        if (errCode != HciErrorCode.HCI_ERR_NONE){            Log.e(TAG, "hciInit Failed and return errcode = " + errCode);            return errCode;        }        errCode = checkAuthAndUpdateAuth();        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "checkAuthAndUpdateAuth Failed and return errcode = " + errCode);            return errCode;        }        return HciErrorCode.HCI_ERR_NONE;    }    /**     * 获取授权     * @return     */    private int checkAuthAndUpdateAuth() {        // 获取系统授权到期时间        AuthExpireTime objExpireTime = new AuthExpireTime();        int initResult = HciCloudSys.hciGetAuthExpireTime(objExpireTime);        if (initResult == HciErrorCode.HCI_ERR_NONE) {            // 显示授权日期,如用户不需要关注该值,此处代码可忽略            Date date = new Date(objExpireTime.getExpireTime() * 1000);            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);            Log.i(TAG, "expire time: " + sdf.format(date));            if (objExpireTime.getExpireTime() * 1000 > System.currentTimeMillis()) {                // 已经成功获取了授权,并且距离授权到期有充足的时间(>7天)                Log.i(TAG, "checkAuth success");                return initResult;            }        }        // 获取过期时间失败或者已经过期        initResult = HciCloudSys.hciCheckAuth();        if (initResult == HciErrorCode.HCI_ERR_NONE) {            Log.i(TAG, "checkAuth success");            return initResult;        } else {            Log.e(TAG, "checkAuth failed: " + initResult);            return initResult;        }    }    /**     * 获取配置传参数     * @param context     * @return     */    private String getInitParam(Context context) {        InitParam initParam = new InitParam();        //灵云云服务的接口地址,此项必填        initParam.addParam(InitParam.AuthParam.PARAM_KEY_APP_KEY, ConfigUtil.APP_KEY);        //灵云云服务的接口地址,此项必填        initParam.addParam(InitParam.AuthParam.PARAM_KEY_DEVELOPER_KEY, ConfigUtil.DEVELOPER_KEY);        //灵云云服务的接口地址,此项必填        initParam.addParam(InitParam.AuthParam.PARAM_KEY_CLOUD_URL, ConfigUtil.CLOUD_URL);        String authPath = context.getFilesDir().getAbsolutePath();        //授权文件所在路径,此项必填        initParam.addParam(InitParam.AuthParam.PARAM_KEY_AUTH_PATH, authPath);        //日志数目,默认保留多少个日志文件,超过则覆盖最旧的日志        initParam.addParam(InitParam.LogParam.PARAM_KEY_LOG_FILE_COUNT, "5");        String logPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator                + "sinovoice" + File.separator                + context.getPackageName() + File.separator                + "log" + File.separator;        File file = new File(logPath);        if (!file.exists()) {            file.mkdirs();        }        //日志的路径,可选,如果不传或者为空则不生成日志        initParam.addParam(InitParam.LogParam.PARAM_KEY_LOG_FILE_PATH, logPath);        Log.d(TAG, "logPath = " + logPath);        //日志大小,默认一个日志文件写多大,单位为K        initParam.addParam(InitParam.LogParam.PARAM_KEY_LOG_FILE_SIZE, "1024");        //日志等级,0=无,1=错误,2=警告,3=信息,4=细节,5=调试,SDK将输出小于等于logLevel的日志信息        initParam.addParam(InitParam.LogParam.PARAM_KEY_LOG_LEVEL, "5");        return initParam.getStringConfig();    }    /**     * 反初始化     * @return     */    public int release(){        return HciCloudSys.hciRelease();    }}

封装灵云语义理解功能

package com.example.sinovoice.util;import android.util.Log;import com.sinovoice.hcicloudsdk.api.nlu.HciCloudNlu;import com.sinovoice.hcicloudsdk.common.HciErrorCode;import com.sinovoice.hcicloudsdk.common.Session;import com.sinovoice.hcicloudsdk.common.nlu.NluConfig;import com.sinovoice.hcicloudsdk.common.nlu.NluInitParam;import com.sinovoice.hcicloudsdk.common.nlu.NluRecogResult;/** * Created by miaochangchun on 2016/12/15. */public class HciCloudNluHelper {    private static final String TAG = HciCloudNluHelper.class.getSimpleName();    private static HciCloudNluHelper mHciCloudNluHelper = null;    private HciCloudNluHelper(){    }    public static HciCloudNluHelper getInstance() {        if (mHciCloudNluHelper == null) {            return  new HciCloudNluHelper();        }        return mHciCloudNluHelper;    }    /**     * nlu的初始化功能     * @return     */    public int initNlu(){        NluInitParam nluInitParam = new NluInitParam();        nluInitParam.addParam(NluInitParam.PARAM_KEY_INIT_CAP_KEYS, ConfigUtil.CAP_KEY_NLU_CLOUD_RECOG);        nluInitParam.addParam(NluInitParam.PARAM_KEY_FILE_FLAG, "android_so");//        nluInitParam.addParam(NluInitParam.PARAM_KEY_DATA_PATH, dataPath);        int errCode = HciCloudNlu.hciNluInit(nluInitParam.getStringConfig());        return errCode;    }    /**     * nlu的识别功能     * @param text 要解析的文本     * @param intention     选择的领域信息     */    public void recog(String text, String intention){        NluConfig nluConfig = new NluConfig();        nluConfig.addParam(NluConfig.SessionConfig.PARAM_KEY_CAP_KEY, ConfigUtil.CAP_KEY_NLU_CLOUD_RECOG);        //如果使用多个领域,可以以分号间隔        nluConfig.addParam(NluConfig.ResultConfig.PARAM_KEY_INTENTION, intention);        Session session = new Session();        int errCode = HciCloudNlu.hciNluSessionStart(nluConfig.getStringConfig(), session);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluSessionStart failed and return " + errCode);            return;        }        NluRecogResult nluRecogResult = new NluRecogResult();        errCode = HciCloudNlu.hciNluRecog(session, text, "", nluRecogResult);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluRecog failed and return " + errCode);            return;        }        errCode = HciCloudNlu.hciNluSessionStop(session);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluSessionStop failed and return " + errCode);            return;        }    }    /**     * nlu的反初始化功能     * @return     */    public int releaseNlu(){        return HciCloudNlu.hciNluRelease();    }}

在MainActivity中使用语义理解的功能

package com.example.sinovoice.util;import android.util.Log;import com.sinovoice.hcicloudsdk.api.nlu.HciCloudNlu;import com.sinovoice.hcicloudsdk.common.HciErrorCode;import com.sinovoice.hcicloudsdk.common.Session;import com.sinovoice.hcicloudsdk.common.nlu.NluConfig;import com.sinovoice.hcicloudsdk.common.nlu.NluInitParam;import com.sinovoice.hcicloudsdk.common.nlu.NluRecogResult;/** * Created by miaochangchun on 2016/12/15. */public class HciCloudNluHelper {    private static final String TAG = HciCloudNluHelper.class.getSimpleName();    private static HciCloudNluHelper mHciCloudNluHelper = null;    private HciCloudNluHelper(){    }    public static HciCloudNluHelper getInstance() {        if (mHciCloudNluHelper == null) {            return  new HciCloudNluHelper();        }        return mHciCloudNluHelper;    }    /**     * nlu的初始化功能     * @return     */    public int initNlu(){        NluInitParam nluInitParam = new NluInitParam();        nluInitParam.addParam(NluInitParam.PARAM_KEY_INIT_CAP_KEYS, ConfigUtil.CAP_KEY_NLU_CLOUD_RECOG);        nluInitParam.addParam(NluInitParam.PARAM_KEY_FILE_FLAG, "android_so");//        nluInitParam.addParam(NluInitParam.PARAM_KEY_DATA_PATH, dataPath);        int errCode = HciCloudNlu.hciNluInit(nluInitParam.getStringConfig());        return errCode;    }    /**     * nlu的识别功能     * @param text 要解析的文本     * @param intention     选择的领域信息     */    public void recog(String text, String intention){        NluConfig nluConfig = new NluConfig();        nluConfig.addParam(NluConfig.SessionConfig.PARAM_KEY_CAP_KEY, ConfigUtil.CAP_KEY_NLU_CLOUD_RECOG);        //如果使用多个领域,可以以分号间隔        nluConfig.addParam(NluConfig.ResultConfig.PARAM_KEY_INTENTION, intention);        Session session = new Session();        int errCode = HciCloudNlu.hciNluSessionStart(nluConfig.getStringConfig(), session);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluSessionStart failed and return " + errCode);            return;        }        NluRecogResult nluRecogResult = new NluRecogResult();        errCode = HciCloudNlu.hciNluRecog(session, text, "", nluRecogResult);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluRecog failed and return " + errCode);            return;        }        errCode = HciCloudNlu.hciNluSessionStop(session);        if (errCode != HciErrorCode.HCI_ERR_NONE) {            Log.e(TAG, "hciNluSessionStop failed and return " + errCode);            return;        }    }    /**     * nlu的反初始化功能     * @return     */    public int releaseNlu(){        return HciCloudNlu.hciNluRelease();    }}

注:灵云的在线识别功能需要联网才能使用。

0 0