您的位置:首页 > 移动开发 > Android开发

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

2016-12-27 10:34 357 查看

注册

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

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



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.e
d4fd
xample.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();
}
}


注:灵云的在线识别功能需要联网才能使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: