代码拉取完成,页面将自动刷新
同步操作将从 haok2/yiwa 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# coding: utf8
from asr.stt import listening, wakeup
from asr.awake import read_keywords
from nlp.comparison import match
from importlib import import_module
from web import HOST, PORT
import time
from utils.db import select
from utils.browser import create as create_browser
from utils.log import Log
logger = Log().logger
ROOT = f"http://{HOST}:{PORT}"
def get_commands():
sql = "SELECT commands, action FROM commands"
return select(sql)
if __name__ == "__main__":
WAKEUP = True # False
FAILURE = 0
keywords = read_keywords()
browser = create_browser()
def _todo(browser, action: str):
"""做action对应的动作"""
mothed_path = action.split(".")
package_path = ".".join(mothed_path[:-1])
mothed_name = mothed_path[-1]
if package_path and mothed_name:
try:
package = import_module(package_path)
todo = package.__getattribute__(mothed_name)
todo(browser)
except Exception as e:
logger.error(f"动态执行页面动作失败:{e}")
def _exec():
"""执行指令"""
access = False # 成功执行指令
voice2text = listening()
logger.info(f"指令>>> {voice2text}")
print(f"指令>>> {voice2text}")
if voice2text is None:
logger.info("空指令")
return access
for commands, action in get_commands():
found = False # 指令是否已找到
for command in commands.split(","):
if match(voice2text, command):
if action.startswith("/"):
# 页面访问
browser.get(ROOT + action)
else:
# 页面动作
_todo(browser, action)
found = True
break
if found:
access = True
break
else:
logger.info("指令不匹配")
return access
while True:
if WAKEUP:
if _exec():
FAILURE = 0
else:
FAILURE += 1
else:
if wakeup(keywords):
logger.info("唤醒成功")
if _exec():
FAILURE = 0
else:
FAILURE += 1
WAKEUP = True
# 10次超时, 睡眠
if FAILURE >= 10:
WAKEUP = False
FAILURE = 0
logger.info("睡眠待命")
time.sleep(1)
browser.close()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。