自然语言交流网 phxnet团队 创新实训 项目博客 (十三)

 

针对我们项目被之关键技术实现进行总结:

 

同一、3DMax关键技术实现

1、一下之关于3DMax中对于人之统筹与操作均要在针对3DMax基础知识熟练掌握的气象下展开的。

2、
骨骼架设:首先对导入到3DMax遭的人士模型进行架构骨骼,首先,先加载一个人,锁定住,别为他乱动。用biped工具建立一个主导骨骼——可以起脚部位置于上拖延拽鼠标来树。在移动命令面板,点biped卷展栏的 figure mode在各视图中,使用旋转缩放位移的办法,调整骨骼的岗位以及范的职务,让双方对旅。 PS: 1双击骨骼,可以给骨骼的子物体全部入选。2 若选中骨骼时,复制的选择项 是灰色的,就因此新建命令 给他打个 名字即可了。3 职责骨骼的配合不是一次性就可知不负众望的,需要在挨家挨户阶段进行调,系统让来之Biped物体是一个稳定的百分比,调整好后以。将骨骼绑定到范上入选模型,如果发生起组的请解组。进入修改命令面板,选择physique修改命令。单击 按钮,H 键打开选对话框,双击Bip01物体。弹出对话框后,单击 进行解算。解算完毕后得以视黄色的“筋”。3DMax假设骨骼是一个心细的干活,需要骨骼及皮肤中完全符合,这样于后面的制作过程中才能够比较顺利

3、
  蒙皮知识:做好骨骼后,要要动画的当儿模型就骨骼做运动且动用蒙皮,使模型附着于骨骼上面。这样骨骼动的时,模型会随之而动。所以蒙皮就是一定给以原本的骨骼上面盖上亦然交汇皮,这样好叫骨骼在动的时候会带来模型动起来。但是蒙皮的时刻许注意防止有些骨骼没有真正的附在皮肤的下边。蒙皮是以骨骼控制模型的相节点,达到合理的绑定效果,所谓的象节点就是标轮廓。蒙皮分点儿种植:柔性和刚性,效果差,作用也不比。一般刚性绑定中为不过直接p给骨骼,父子级关系,也克上想如果结果。

4、
  封套处理:先经调节封套的分寸来调节每个骨骼部分的影响范围,注意内圈控制到以外的一半虽可了。封套时注意有同片皮肤会受到几清骨骼的熏陶,然后跟着进行调,还要注意某块皮肤吸收那么到底骨骼的影响等一样文山会海题材。

5、
  调权重问题:权重就是蒙了皮之骨骼对体定点的震慑程度,使用Zbrush的Trans
pose功能进行动作调整,只待吃范设置动态线,通过遮照进行简易的权重设置(非常方便),就足以被范调整Pose。当然,Transpose这种概括的蒙皮是碰头有些许免正常的变形的,但足以由此Zbrush雕刻之主意快速的弥补。权重调整是一个比较细致的售,需要团结小心每一样片的震慑程度之轻重,根据这个来安装合适的权重题材。

6、  
动画打:在动画的造作中第一得举行的即使是装有内需之动作。然后以重中之重帧打开的景下便好设计协调得的动作,再规划好下虽可以拓展动画渲染,在导出诸侯还和Photoshop的旅利用,增加动画的视觉效果。

7、 
 在3DMax方用索要的动画片制作好之后就得以渲染导出,然后继续工作拿当unity3D上展开动画具体的操作

仲、Server关键技术实现

1、  分词

分词借用庖丁分词。同时加以盘古分词词库以及词素进行增援分词。

2、  匹配

行使特殊的数据结构,架构字典树来存储规则库内的规则进行匹配从而达到省空间,相比传统的卓绝丰富匹配有针对性许句子有比较准确的报。同时也这种字典树之结构也由自然程度达到生正有滋有味的消歧作用。

3、  情感分析

运用人工神经网络的BP模型进行情感分析。此处借用了台湾大学中文通用情感词典(NTUSD)进行训练人工神经网络。同时结合人工神经网络改进从输入层到输出层的权值的梯度下降算法。结合上下文从而进行针对性用户情感的分析,继而由答案库中选中较好的报,使得回答称当下底语境,增强用户体验。

4、  学习

这边用的拿用户的问题与答案进行分词并且加载在内存中还要于后来存储。

5、  专业模块

以业内领域我们采访大量之音讯以及天地知识。通过判断决定是否接触专业模块知识。

其三、Unity3D关键技术实现

1、2D仿聊天界面——————NGUI插件

2、3D语音聊天界面——————科大讯飞语音文本的变

3、UNITY与Android进行交互

4、UNITY融合3D人物模型

5、UNITY与劳动器端进行相互——————-TCP/IP协议

第一,从你进软件开始,你便成立了跟服务器的联络。这是一致段与服务器的增长连,直到你离是软件。

2D字聊天界面大致实现了仿输入、发送信息、接收信息、你可由此点击按钮让机器人开启聊天模式或者学模式、又或者进入3D语音聊天界面或者退。在assets文件夹下导入NGUI(使用的凡3.6.8本子的.unitypackage)包,点击按钮时有声音和透明度、阴影的变动,通过吃按钮上加声音…..这样的零件,使得用户体验得到增强,每当点击发送按钮实例化一个prefab呈现在侃对话框中,你可瞥见你发送的契和而自服务器收到至的回的对话,通过点击聊天对话框的亲笔,你的音信可以合关闭小隐没,这是下NGUI插件的UI
Play
Tween.script,通过劳务器端发送回来的信息附带着标识字符,可以要人做出相应的动作,画面的层系感是通过调试两独照相机的DEPTH、PROJECTION、SIZE、CLIPPING
PLANES实现之,学习模式以及拉模式的交互切换则是由此向服务器发送标识字符来实现模式切换。

3D语音聊天界面重在动画,把动画过度的condition设置也产单卡通也TRUE,当接到服务器端的标识字符,就拿它们装为TRUE,人物就来动画的过于。在人模型的季独方向搭建照相机,调节照相机在最终屏幕及面世的职务,经过四棱锥对光的折射和反光,四只照相机所摄及的状况恰恰使其阴影至了四棱锥中心,形成了立体。背景被,地势是因此unity的Terrain,勾出起伏的地貌,铺上texture草坪和扶植,给四个照相机添加天空盒子组件。同时,你吧足以在3D界面通过按钮点击实现去2D言聊天界面或者退是程序。

UNITY和Android的交互:

AndroidJavaClass jc =

new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);

AndroidJavaObject 
activity=jc.GetStatic<AndroidJavaObject>(“currentActivity”);

取得AndroidJavaClass类并且取得AndroidJavaObject 
的activity对象,通过activity.Call(“”,args)函数的第一独参数(函数誉为)可以调用Android端的一个函数,args传递了这个函数的参数,

UnityPlayer.UnitySendMessage

(“AndroidManager”,
“AndroidCallBack”,””);在安卓端将由科大讯飞翻译下的文书传送给了坐AndroidManager命名的类中AndroidCallBack为名的函数,由此实现了安卓暨unity的彼此。

UNITY和3DMAX动画模型的同甘共苦:
在assets包下导入3DMAX动画模型的保险,创建一个Animator
Controller,实现一个动画片向下一个卡通的过度,将动画模型在场景,给各一个动画片模型加上这动画控制器,使得动画控制的口径为产一个动画也true时,当从服务器收到到标识符时,就如他产生不同之卡通,这样就算贯彻了基于对话内容被范做出相应的动作。

UNITY和服务器的通信:通过TCP/IP协议进行通信,使用SOCKET建立及针对承诺IP对应端口号的连接,开启一个线程去等在接由服务器端发送过来的音,读入时编码方式使用UTF-8,发送字符串通过socket,BeginSend方法实现发送。

季、文本语音输入输出关键技术实现

话音转文本有的是调用的科大讯飞的在线语音,它的刺激方式是按键,通过按钮触发开启安卓设备的录音,此部分要在源码中形容副有关安卓权限的求,来调用安卓底录音权限,当按钮被激起,则开进入语音录制阶段,将话筒所录下之话音实时的传染被云端的科大讯飞服务器。、

由声音里面得到文本:

public void GetWordFromVoice() {

    boolean isShowDialog = mSharedPreferences.getBoolean(“iat_show”,
true);

    if (isShowDialog) {

        showIatDialog();

    } else {

        if (null == iatRecognizer) {

           iatRecognizer = SpeechRecognizer.createRecognizer(this);

      

        }

        if (iatRecognizer.isListening()) {

           iatRecognizer.stopListening();

        } else {

        }

    }

}

所借的接口是科大讯飞开放平台提供的接口,实现实时的口音传输,通过云端的服务器利用科大讯飞的话音包用语音转为文字,传回客户端,这样即使实现了客户端的语音转文字,拿到用的字之后,客户端的处理方式是将收受的text文本传入unity3D之中,再经unity3d将文字text发送给服务器端,下同样步由服务器进行语音的智能识别,主谓短语的切分,调用相关的堆栈开展恢复。

以下是调用VoiceToText的接口的主意:

    @Override

public void onClick(View v) {

        switch (v.getId()) {

        case R.id.button1:

           VoiceToWord voice = new
VoiceToWord(MainActivity.this,”54ae8c54″);

           voice.GetWordFromVoice();

           break;

        }

}

动静监听:

private SpeechListener listener = new SpeechListener() {

    @Override

    public void onData(byte[] arg0) {

    }

    @Override

    public void onCompleted(SpeechError error) {

        if (error != null) {

           System.out.println(“user login success”);

        }

    }

文本转语音,使用的是科大讯飞的接口,因为这个作品里语音包不是第一,所以语音包的变我们联合调用的科大讯飞的语音包接口,依旧是在线的文字转语音,客户端将来自智能自然语音识别的服务器的text文本为言的款式发送给科大讯飞的云端服务器,科大讯飞的云端服务器就将亲笔转化为语音的步子,再以语音实时的传递回来,由客户端将语音读来,此处需要提请客户端(安卓)的喇叭的权,由扬声器将污染回的口音读来。

至于的安卓底权限的要求:

    <!– 讯飞语音权限开始 –>

<uses-permission android:name=”android.permission.INTERNET” />

<uses-permission
android:name=”android.permission.ACCESS_NETWORK_STATE” />

<uses-permission
android:name=”android.permission.ACCESS_WIFI_STATE” />

<uses-permission android:name=”android.permission.RECORD_AUDIO”
/>

<uses-permission
android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

<uses-permission
android:name=”android.permission.READ_EXTERNAL_STORAGE”/>

<!– 讯飞语音权限结束 –>

 

 

 

 

 

 

 

 

 

要你愿意花几块钱请自己喝杯茶的语句,可以就此手机扫描下方的第二维码,通过
支付宝 捐赠。我会竭尽全力写起还好之章。 
(捐赠不示捐赠者的个人信息,如用,请注明你的联系方式) 
Thank you for your kindly donation!!

 

 ACCESS 1

 

相关文章