【旭日X3派试用】实时语音转写系统,实现双向无障碍沟通——践行科技向善,让AI有温度!#旭日X3派首百板尝鲜#

写在前面的

首先,非常感谢地平线官方给予这次旭日X3派开发板的测评机会,旭日X3派不同于其他派,全黑的外观倍感神秘,像一个深邃的黑洞,让人忍不住去探索!板载资源上不仅诚意满满,更是细节满满,处处为用户体验考虑,例如标准的HDMI接口,不需要使用转接头可以直接连接显示器等等。

零、项目研发意义与摘要

上一期的项目开发(点击可跳转)中,我们已经实现了聋哑人士与健听人士的单向无障碍沟通,即手语的实时翻译并播报,那么,接下来我们要做的就是实现双向无障碍的沟通,即需要一个实时的语音转写系统,将健听人士的语音实时转写展示给聋哑人士。基于Web API和Tinker的聋哑人士语音转写系统,其优点是词库广泛,识别快速准确。项目由转写终端和云服务器组成,由终端采集用户语音后处理并上传到云服务器进行实时语音转写,支持除中文和英语外的51种外语,24种方言和1种民族语言,实现健听人士与聋哑人士的无障碍沟通交流,真正意义上双向无障碍沟通,这不仅仅是有温度的AI,更是科技的向善!

一、准备工作

我们将准备工作分为硬件部分和软件部分

硬件部分:旭日X3派,USB麦克风,电源适配器,烧录Ubuntu系统的SD卡,显示屏(或者VNC/SSH远程连接)

注意:购买麦克风时要购买二合一的USB麦克风,切勿购买3.5mm耳机接口传输的麦克风,因为开发板上面没有这种比较落后的3.5mm耳机孔

我这里使用的是上个项目的摄像头,因为这个摄像头内置了麦克风,妥妥的资源的充分利用了哈哈哈!!!

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

首先就是我们老生常谈的更新一下软件源和所有软件,只需要使用快捷键ctrl+alt+T打开命令行,输入以下命令,耐心等待即可

//更新软件源
apt-get update

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

开发工具依然是沿用我们上期的老搭档——Thonny,这里就不再赘述,直接上安装命令!

flatpak install org.thonny.Thonny //Flatpak

sudo apt install thonny  //Debian,Raspbian,Ubuntu,Mintand others

sudo dnf install thonny  //FedoraFedora

安装完成后同样是使用快捷键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开发。而GUI编程,又有点像我们小时候玩的积木,每个积木应该放在什么位置,每个积木要显示多大,即对每个元素的位置和大小进行管理,这便是布局管理器的任务。

然后第一件事能是检查Tkinter是否成功导入,代码如下

import tkinter

如果运行无误则说明导入成功,否之,则需要重新安装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()#进入消息循环

好的,至此,我们已经学会了用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种民族语言

二、实现原理

本项目主要就是利用python程序录制本地mp3格式的用户音频,并将音频上传到科大讯飞云平台进行实时转写,最后利用GUI库在屏幕上展示我们的转写结果。

关于云服务器的原理介绍,科大讯飞官方有详细文档 (点击可跳转),大家可以自行阅读,这里不做赘述

主要演示一下关于接收科大讯飞翻译文本的方法和窗口的实现

#定义接收科大讯飞翻译文本的方法

def thread_it(func, *args):     
    t = threading.Thread(target=func, args=args)
    t.setDaemon(True)
    t.start()

#窗口的实现

from tkinter import *
import threading
import tkinter

root = Tk() #初始化窗口
t = Text(root)  #设置文本框
t.pack()
root.title("无障碍沟通交流系统")  #设置标签
root.configure(bg='pink')     #设置背景颜色

tkinter.Button(root, text='开始聆听', command=lambda :thread_it(run,)).pack()   #设置按钮

三、效果展示

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

四、系统性能测试

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

测试数据如下:

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

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

那么本次的分享就到这里啦,喜欢的小伙伴不妨点个赞再走呀!!!

项目源码已经上传至附件,感兴趣的小伙伴可以下载哦

[地平线旭日X3派,开启你的嵌入式开发之旅],欢迎正在阅读的你申请试用,一起交流开发心得。

旭日X3派语音实时转写系统_20221005164807.7z

老哥,求个演示视频

老哥,求个演示视频呗。

期待下次连载?