IBM Watson SDK使用教程
前言
最近有小伙伴让我帮忙看看如何在Unity中使用IBM Watson SDK,我看了一些基础教学视频把如何接入和简单的使用过程记录了一下,作为学习笔记,希望能帮助到大家。
使用步骤:
1. 注册并从IBM Cloud官网获取授权资料
首先,打开IBM Cloud 的注册网站登录或者注册一个账号,这个就此略过。
注册完之后,登录到自己的主界面,点开左侧的菜单栏,找到“Watson”选项,单击进去
到了下一个界面,可以看到IBM Watson的一些概述。我们接着找到左边菜单栏的“Watson服务”下面的浏览服务
然后你能看到我们所能够选择的Watson所提供的服务。选中其中一个我们需要的服务,在这里我选择了Language Translator服务来演示。顾名思义,这项服务是可以帮助我们在Unity中实现文字翻译的功能。
修改好了初始设置之后,点击右下角的创建即可看到我们项目已经创建完成并且提供给了我们接下来在Unity中使用该SDK会用到的URL和API秘钥属性
2.接入SDK到Unity中
首先,创建一个Unity项目或者打开你想接入的项目,这里我是用来演示的所以就新创了一个Unity 项目。然后我直接从AssetStore上搜索并导入了IBM Watson SDK。
同时我创建了一个文本文档用来做最基本的翻译演示。然后,创建一个空物体,命名为“LanguageTranslator”并为其添加一个脚本,叫“LanguageTranslatorScript”。
如果你跟着我做到这步,你的场景应该如下图所示:
之后基本上就是存代码上的东西啦。打开我们的脚本文件进行编辑,代码在下面:
看代码之前,有几个坑提前说一下:
- 官网教程展示的还是v2版的LanguageTranslator但是现在其实已经开始使用了v3版本的我就直接拿v3版本的进行演示。使用区别就是v3版的构造函数还需要穿入一个Version函数,我取的就是IBM Watson帮我产生的秘钥的日期
- 另外一个坑就是创建Credentials的时候,网络上很多教程都是直接给Username和Password赋值就可以成功。然而这时候你发现,你的IBM Watson上自动产生的协议里面根本没有这两个属性,只给了我们Api秘钥和URL。这个时候怎么办呢? 我翻了不少博客终于找到很多答案,有的说用TokenOptions之类的,但是都没有通过测试,目前只有我下面写的这一种方法成功的获取到了翻译:就是在Username和Password这两个属性里面直接写入"apikey"和你实际的Api秘钥值
using System.Collections;
using System.Collections.Generic;
using IBM.Watson.DeveloperCloud.Connection;
using IBM.Watson.DeveloperCloud.Logging;
using IBM.Watson.DeveloperCloud.Services.LanguageTranslator.v3;
using IBM.Watson.DeveloperCloud.Utilities;
using UnityEngine;
using UnityEngine.UI;
public class LanguageTranslatorScript : MonoBehaviour
{
public Text txtResponse;
private LanguageTranslator _translator;
private string _translatorModel = "en-zh";
private string content = "I love you";
void Start()
{
//首先创建一个认证信息类
Credentials languageTranslatorCredentials = new Credentials()
{
//这里有个坑,要注意:新版的Watson Service 已经倾向使用apikey而不再是username 和 password
Username = "apikey", //用户名输入"apikey"
Password = "nN0D0alLdjBCDDexj9K3z3_mICPfh3eawcG3UoVIExul" //密码则是你的api秘钥
};
//v3版的LanguageTranslator现在除了Credentials之外还需要一个版本信息,这里我填的就是我IBM Watson上看到的安全协议产生日期
_translator = new LanguageTranslator("2018-12-25", languageTranslatorCredentials);
//之后直接调用获取翻译方法:注意要创建相对应的回调,具体格式可以自行F12到定义里去看
_translator.GetTranslation(OnComplete, OnFail, content, _translatorModel);
}
//翻译完成回调
private void OnComplete(Translations response, Dictionary<string, object> customData)
{
Debug.Log(response);
txtResponse.text = response.translations[0].translation;
}
//翻译失败回调
private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData)
{
Debug.Log(error.ToString());
}
}
趟过代码里面的几个坑,跑起来就可以把"I love you"转成“我爱你”啦,上图:
到这里,IBM Watson SDK的接入Demo就算是完成了。这里头当然还有很多可以可改进的地方,比如能实时输入然后实时翻译等。又或者把翻译和语音输入服务一起用,实时翻译语音输入等等。那些如果我有空玩的时候再更新上来吧。希望这个简单的教程能够帮到大家!