From 02e1098ba2cd62b1e780280b5a01c9740f17d070 Mon Sep 17 00:00:00 2001 From: Haujet Zhao <1292756898@qq.com> Date: Fri, 10 Jul 2020 23:54:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=8D=E5=BE=AE=E6=94=B9=E8=BF=9B=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=B8=8B=EF=BC=8C=E5=B0=86=20appkey=20=E7=AD=89?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=A7=BB=E5=8A=A8=E5=88=B0=20token.ini=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD=E5=A1=AB=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 +++++++++++++------- run.py | 45 ++++++++++++++++++++++++++++++--------------- token.ini | 7 +++++++ 3 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 token.ini diff --git a/README.md b/README.md index 7d1a61c..70ea5a7 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,24 @@ (有兴趣的可以改成百度、腾讯、讯飞的 api 试试)。 -使用方法很简单:用 python 运行 `run.py` 后,按下 `Caps Lock`(也就是大写锁定键)超过 0.3 秒后,就会开始用阿里云的 api 进行语音识别,松开按键后,会将识别结果自动输入。 +使用方法很简单:运行程序后,按下 `Caps Lock`(也就是大写锁定键)超过 0.3 秒后,就会开始用阿里云的 api 进行语音识别,松开按键后,会将识别结果自动输入。 + +因为使用了阿里云的 api,所以需要用户自己到阿里云申请,再填到 `token.ini` 中才能正常使用。 对于聊天时候进行快捷输入、写代码时快速加入中文注释非常的方便。 ### 视频演示 -请到 HacPai 帖子中进行查看:[Caps Wirter 发布:按住大写锁定键,进行语音识别输入](https://hacpai.com/article/1594371212477) +请到 HacPai 帖子中进行查看:[Caps Wirter 发布:按住大写锁定键,进行语音识别输入](https://hacpai.com/article/1594371212477) -### 安装使用 +### 开箱即用 -本工具是一个python脚本,依赖于以下模块: +小白用户,只需要在 Release 界面下载打包好的 exe 文件,运行,会在同级目录生成一个 `token.ini` 文件,在 `token.ini` 中填入你阿里云拥有 **管理智能语音交互(NLS)** 权限的 **RAM访问控制** 用户的 **Accesskey Id**、**Accesskey Secret** 和智能语音交互语音识别项目的 **appkey** ,就可以正常使用了。详细步骤之后我录一个视频 + +### 开发使用 + +本工具是一个python脚本,上面小白下载的 Release 其实是用 pyinstaller 导出的 exe 文件,如果你想在源码基础上使用,就需要安装以下模块: - keyboard - pyaudio @@ -53,12 +59,12 @@ - pyaudio 在 windows 上不是太好安装,可以先到 [这个链接](https://www.lfd.uci.edu/~gohlke/pythonlibs) 下载 pyaudio 对应版本的 whl 文件,再用 pip 安装 - alibabacloud-nls-python-sdk 不是通过 python 安装,而是通过 [阿里云官方文档的方法](https://help.aliyun.com/document_detail/120693.html) 进行安装。 -另外,需要在 `run.py` 中填入阿里云拥有 **管理智能语音交互(NLS)** 权限的 **RAM访问控制** 用户的 **accessID**、**accessKey** 和智能语音交互语音识别项目的 **appkey** 。 - -做完以上步骤后,只要运行 `run.py` 就可以用了! +另外,需要在 `token.ini` 中填入阿里云拥有 **管理智能语音交互(NLS)** 权限的 **RAM访问控制** 用户的 **accessID**、**accessKey** 和智能语音交互语音识别项目的 **appkey** 。 本文件夹内有一个 `安装指南` 文件夹,在里面可以找到详细的安装指南,还包括了提前下载的 alibabacloud-nls-python-sdk 和 pyaudio 的 whl 文件。 +用 python 运行 `run.py` 后,按下 `Caps Lock`(也就是大写锁定键)超过 0.3 秒后,就会开始用阿里云的 api 进行语音识别,松开按键后,会将识别结果自动输入。 + ### 后话 因为作者就是本着凑合能用就可以了的心态做这个工具的,所以图形界面什么的也没做,整个工具单纯就一个脚本,功能也就一个,按住大写锁定键开始语音识别,松开后输入结果。目前作者本人已经很满意。 diff --git a/run.py b/run.py index 3db8878..e130296 100644 --- a/run.py +++ b/run.py @@ -14,10 +14,6 @@ from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import configparser -""" 在这里填写你的 API 设置 """ -accessID = "xxxxxxxxxxxxxxxxxxxxxxxx" -accessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -appkey = 'xxxxxxxxxxxxxxxx' """pyaudio参数""" @@ -48,8 +44,11 @@ class MyCallback(SpeechRecognizerCallback): print('结果: %s' % ( message['payload']['result'])) result = message['payload']['result'] - if result[-1] == '。': # 如果最后一个符号是句号,就去掉。 - result = result[0:-1] + try: + if result[-1] == '。': # 如果最后一个符号是句号,就去掉。 + result = result[0:-1] + except Exception as e: + pass keyboard.write(result) # 输入识别结果 keyboard.press_and_release('caps lock') # 再按下大写锁定键,还原大写锁定 def on_task_failed(self, message): @@ -59,22 +58,16 @@ class MyCallback(SpeechRecognizerCallback): pass def get_token(): - if not os.path.exists('token.ini'): - init_id = """[Token] -id = 0000000000000000000 -expiretime = 0000000000""" - fp = open("token.ini",'w') - fp.write(init_id) - fp.close() config = configparser.ConfigParser() config.read_file(open('token.ini')) token = config.get("Token","Id") expireTime = config.get("Token","ExpireTime") + accessID = config.get("Token","accessKeyId") + accessKey = config.get("Token","accessKeySecret") # 要是 token 还有 5 秒过期,那就重新获得一个。 if (int(expireTime) - time.time()) < 5 : # 创建AcsClient实例 - global accessID, accessKey client = AcsClient( accessID, # 填写 AccessID accessKey, # 填写 AccessKey @@ -173,7 +166,27 @@ def recoder(recognizer, p): if __name__ == '__main__': - print('开始程序') + print('\r\n开始程序\r\n') + + if not os.path.exists('token.ini'): + init_id = """[Token] +id = 0000000000000000000 +expiretime = 0000000000 +accessKeyId = 000000 +accessKeySecret = 000000 +appkey = 00000""" + fp = open("token.ini",'w') + fp.write(init_id) + fp.close() + input("""\r\n 检测到没有配置文件,所以刚刚已在同级目录生成了 token.ini 配置文件,\r\n + 请打开 token.ini 配置文件,\r\n + 然后填入阿里云的 accesskeyid 和 accesskeysecret, 以及你的语音识别项目的 appkey,\r\n + 再回到本界面,按任意键后,回车继续\r\n + + 如果下面出错了,那么就很有可能是 accesskeyid 、accesskeysecret 或 appkey 填错了\r\n""") + config = configparser.ConfigParser() + config.read_file(open('token.ini')) + appkey = config.get("Token","appkey") client = ali_speech.NlsClient() client.set_log_level('WARNING') # 设置 client 输出日志信息的级别:DEBUG、INFO、WARNING、ERROR @@ -181,6 +194,8 @@ if __name__ == '__main__': recognizer = get_recognizer(client, appkey) p = pyaudio.PyAudio() + print("""\r\n初始化完成,现在可以将本工具最小化,在需要输入的界面,按住 CapsLock 键 0.3 秒后开始说话,松开 CapsLock 键后识别结果会自动输入\r\n""") + keyboard.hook_key('caps lock', on_hotkey) print('{}//:按住 CapsLock 键 0.3 秒后开始说话...'.format(count), end=' ') keyboard.wait() diff --git a/token.ini b/token.ini new file mode 100644 index 0000000..bbaa9d5 --- /dev/null +++ b/token.ini @@ -0,0 +1,7 @@ +[Token] +id = 00000000000000000000 +expiretime = 0000000000 +accesskeyid = 00000000000000 +accesskeysecret = 000000000000000000000000000 +appkey = 000000000000000000000 +