准备工作

  • 硬件部分:旭日X3派,USB免驱摄像头,电源适配器,烧录Ubuntu系统的SD卡,USB扬声器,显示屏(或者VNC/SSH远程连接)

1.jfif

  • 软件部分:Thonny IDE集成开发环境

2.jfif

注意:购买麦克风时要购买二合一的USB麦克风,切勿购买3.5mm耳机接口传输的麦克风。

首先更新软件源和所有软件,只需要使用快捷键ctrl+alt+T打开命令行,输入以下命令,耐心等待即可。

# 更新软件源
apt-get update

# 更新升级所有软件
apt-get upgrade

开发工具依然是沿用Thonny,作为一款轻量化的python集成开发环境,对新手十分友好,简单易上手,后续安装各种python依赖库也相当方便。安装完成后同样是使用快捷键ctrl+alt+T打开命令行,输入Thonny启动,然后开始项目的重头戏——安装项目依赖库,需要用到的第三方库和版本如下,大家可以根据这个顺序进行安装,以免遗漏(也可以复制到一个新的txt文件利用pip一次性安装)。

cffi==1.12.3

gevent==1.4.0

greenlet==0.4.15

pycparser==2.19

six==1.12.0

websocket==0.2.1

websocket-client==0.56.0

注意:有些库安装失败的话代码可能不会有高亮提示,但运行时会报错,所以,出现报错第一时间检查第三方库是否成功安装。

本文着重介绍需要用到的Python标准GUI库——Tkinter。

在Python程序中,Tkinter是Python的一个模块,它可以像其他模块一样在Python交互式shell中(或者“.py”程序中)导入,导入Tkinter模块后,就可使用Tkinter模块中的函数、方法等进行GUI编程。同时,开发者也可以使用Tkinter库中的文本框、按钮、标签等组件实现GUI开发。

首先,需检查Tkinter是否成功导入,如运行无误则说明导入成功,否之,则需要重新安装Tkinter库。

import tkinter

接着创建一个窗口,先使用http://tkinter.Tk生成一个主窗口对象,然后才能使用Tkinter模块中其他的函数和方法等元素。生成主窗口以后才可以向里面添加组件,或者直接调用其mainloop()方法进行消息循环。示例如下:

import tkinter #导入Tkinter模块
top = tkinter.Tk()#生成一个主窗口对象
top.mainloop()#进入消息循环

我们要有交互,就需要有组件。组件与窗口一样,也是通过Tkinter模块中相应的组件函数生成的。在生成组件以后,就可以使用pack、grid或place等方法将它添加到窗口中,以下示例给窗口增添两个按钮:

import tkinter #导入Tkinter模块
root = tkinter.Tk()#生成一个主窗口对象
label= tkinter.Label(root, text="Python, tkinter!")
label.pack()#将标签添加到窗口中
button1 = tkinter.Button(root, text="按钮1")#创建按钮1
button1.pack(side=tkinter.LEFT)#将按钮1添加到窗口中
button2 = tkinter.Button(root, text="按钮2")#创建按钮2
button2.pack(side=tkinter.RIGHT)#将按钮2添加到窗口中
root.mainloop()#进入消息循环

3.jfif

至此,用Tkinter库创建一个带交互功能的窗口已经完成,大家感兴趣可以继续学习其他组件,这里就不再赘述。

接下来进行云服务器部署,本项目选用云端语音平台,登录平台后,通过右上角「控制台」,或右上角下拉菜单的「我的应用」进入控制台。如果账户未曾创建过应用,平台会引导创建,创建完成后,便可通过左侧的服务列表,选择要使用的服务。

在服务管理面板中,将看到这个服务对应的可用量、历史用量、服务接口的验证信息,还有可以调用的API和SDK。值得注意的是,要将应用创建后生成的APPID,APISecret和APIKey去替换代码中的APPID,APISecret和APIKey一定要一一对应,否则会影响代码的正常运行!

def run():
    global wsParam
    wsParam = Ws_Param(APPID='你的APPID', APIKey='你的APIKey',APISecret='你的APISecret')
    websocket.enableTrace(False)
    wsUrl = wsParam.create_url()
    ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close)
    ws.on_open = on_open
    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE}, ping_timeout=2)

随后选择需要的语种和服务即可,支持除中文和英语外的51种外语,24种方言和1种民族语言。

4.png

实现原理

本项目主要就是利用python程序录制本地mp3格式的用户音频,并将音频上传到云端语音平台进行实时转写,最后利用GUI库在屏幕上展示转写结果(云端语音平台翻译文本的方法和窗口的实现,点击文末阅读原文即可获取)。

效果展示

结果显示,本项目对本地资源占用较小,得益于旭日X3派的高算力和高性能,温度的控制让人十分满意(和上一个项目手语翻译终端同时运行也没有问题)。

5.jfif
6.jfif

性能测试

系统测试方案:将程序导入旭日X3派中,接入电源后等待初始化完成,在安静的室内环境下,在麦克风前分别测试普通话,英语,方言(东北话/四川话),将转写终端实时转写的准确率记录,同时将识别的总时长记录收集。

测试数据如下:

7.jfif
8.jfif

结果分析:接收到语音信息后到完成转写结果的显示总时长在0.5秒之内,可基本实现实时转译,对普通话和英文以及51种外语,24种方言和1种民族语言的识别率在95%以上。

结论:实现语音转写除了支持普通话和英语外,支持51个外国语种(包括日语、俄语、泰语、捷克语等常用语种)、24种方言(包括四川话、广东话、河南话、上海话,闽南语等常用方言),另外,还支持一种民族语言(彝语),真正做到无障碍沟通交流。

本文转自地平线开发者社区
原作者:鑫辰大海王
原链接:完整文档及代码点击此处一键直达