2395浏览
查看: 2395|回复: 1

[教程] 【智控万物】codelab对接图灵机器人(实现语音聊天)

[复制链接]
【演示视频】

视频结尾处出问题在于,图灵对话机器人调用量没了(免费版适用于个人或测试使用,图灵机器人平台每天会赠送免费版用户100次调用量),每个账号可创建5个机器人。
1、下载CodeLab
https://www.codelab.club/blog/codelab-download/下载页,下载后解压,运行程序codelab-adapter-win-3_1_0.exe,会在默认浏览器中打开运行页面“CodeLab Adapter v3 Web UI”
2、下载extensio_python_exec。
【智控万物】codelab对接图灵机器人(实现语音聊天)图2

【智控万物】codelab对接图灵机器人(实现语音聊天)图1

【智控万物】codelab对接图灵机器人(实现语音聊天)图5


【智控万物】codelab对接图灵机器人(实现语音聊天)图3



【智控万物】codelab对接图灵机器人(实现语音聊天)图7


看见此项,安装完成,下面修改程序代码。

【智控万物】codelab对接图灵机器人(实现语音聊天)图4


【智控万物】codelab对接图灵机器人(实现语音聊天)图8

用记事本或其它Python文本编辑工具
将以下代码覆盖原有代码。
[mw_shl_code=python,false]from io import StringIO
import contextlib
import sys
import time
# import subprocess
# import webbrowser
from codelab_adapter.core_extension import Extension
from codelab_adapter.utils import verify_token
import json
import urllib.request

class PythonKernelExtension(Extension):
    def __init__(self):
        super().__init__()
        self.NODE_ID = self.generate_node_id(__file__)

    @contextlib.contextmanager
    def stdoutIO(self, stdout=None):
        old = sys.stdout
        if stdout is None:
            stdout = StringIO()
        sys.stdout = stdout
        yield stdout
        sys.stdout = old
    def tuling(self, code):
        api_url = "http://openapi.tuling123.com/openapi/api/v2"
        text_input = code
        req = {
            "perception":
            {
                "inputText":
                {
                    "text": text_input
                },
        
                "selfInfo":
                {
                    "location":
                    {
                        "city": "张家口",
                        "province": "河北",
                        "street": "涿鹿"
                    }
                }
            },

            "userInfo":
            {
                "apiKey": "06c515993ed74e8e9ae1aa63a80ab9ac",
                "userId": "OnlyUseAlphabet"
            }
        }
        # print(req)
        # 将字典格式的req编码为utf8
        req = json.dumps(req).encode('utf8')
        # print(req)

        http_post = urllib.request.Request(api_url, data=req, headers={'content-type': 'application/json'})
        response = urllib.request.urlopen(http_post)
        response_str = response.read().decode('utf8')
        # print(response_str)
        response_dic = json.loads(response_str)
        # print(response_dic)

        intent_code = response_dic['intent']['code']
        results_text = response_dic['results'][0]['values']['text']
        return('图灵的回答:' + results_text)
    def run_python_code(self, code):
        try:
            with self.stdoutIO() as s:
                # 'hello world'[::-1]
                # import re; print(re.search('just4fun', 'blog.just4fun.site').span())
                # exec(object[, globals[, locals]])
                exec(code)
            output = s.getvalue()
        except Exception as e:
            output = e
        return output

    @verify_token
    def extension_message_handle(self, topic, payload):
        '''
        所有可能运行代码的地方,都加上验证,确认payload中代码风险和token

        test: import webbrowser;webbrowser.open("https://www.codelab.club")
        
        '''
        self.logger.info(f'python code: {payload["content"]}')
        message_id = payload.get("message_id")
        python_code = payload["content"]
        #output = self.run_python_code(python_code)
        output =self.tuling(python_code)
        payload["content"] = str(output)
        message = {"payload": payload}
        self.publish(message)

    def run(self):
        "避免插件结束退出"
        while self._running:
            time.sleep(0.5)


export = PythonKernelExtension
[/mw_shl_code]
【智控万物】codelab对接图灵机器人(实现语音聊天)图12

这"apiKey"要改成自己的。不想要“图灵的回答”,可把return('图灵的回答:' + results_text),改成return( results_text)。修改后记得重新启动extension_python_exec


【智控万物】codelab对接图灵机器人(实现语音聊天)图6

点击运行。
3、打开https://scratch3v3.codelab.club/

【智控万物】codelab对接图灵机器人(实现语音聊天)图9

这段程序要一直跟图灵说话,5秒一次,中间有一次不说,谈话就中止。
【智控万物】codelab对接图灵机器人(实现语音聊天)图10

修正1:使用标识判断,解决语音为空时(不说话的时候)。因使用默认的5秒(一句话在5秒说完,差不多),可以自己修改。
还存在两个问题,一是:不能实现静音识别——不说了作为中止,然后开始识别;二是:没有唤醒词功能,像“小度小度”那种。这两个问题都可以用App Inventor2在手机上解决。
下载附件Scratch作品 (8).rar
修正2:
【智控万物】codelab对接图灵机器人(实现语音聊天)图13

此段程序实现,语音对话开始后,如果连续有超三次不说话(静音),将进入休眠状态,直到响度大于50后,再重新启动语音对话。
下载附件Scratch作品 (9).rar

【修正后演示视频】




DFrJ5KYVQaH  中级技匠

发表于 2020-5-3 08:44:49

很深奥,要好好学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail