基于手指动作的汉语拼音编码方法及发声手套的实现
2019-01-23韩思清徐乾
韩思清,徐乾
(中国人民大学附属中学,北京100080)
0 引言
手语是一种依靠动作和视觉交流的特殊语言,是聋哑人交流的工具。手语由双手的手型、位置、方向、面部表情、唇动、体势信息的组合构成,聋哑人学习手语可以提高的生活学习和工作质量,正常人学习手语可以为聋哑人提供更好的服务。然而,中国手语包含3000多个常用的词汇,使得学习手语需要投入非常多的时间和巨大的努力,阻碍了正常人与聋哑人之间的正常交流[1]。
随着计算机的普及使用,以及人工智能技术的发展,研究人员一直在努力实现手语与人类自然语言之间自动互译,手语识别是其中的重要研究方向。手语识别的目的就是通过计算机提供一种有效的、准确的机制,将手语翻译成文本或语音,使得聋哑人和听力正常人之间的交流变得更加方便、快捷。
手语识别开始于90年代,从手语数据的采集设备来划分,主要包括基于数据手套的和基于视觉的两种系统。基于视觉的手语识别系统受限于计算机视觉的技术能力,前端手形的检测非常困难,并且,识别受背景和光照影响非常大,因此,目前基于视觉的手语识别系统只能实现有限的手语识别。数据手套结合运动传感器,可以容易地获得较精确的手语数据,已经可以实现大词汇量的手语识别,但数据手套成本非常高,严重限制了技术的推广应用。
针对上述问题,本文提出与汉语拼音具有映射关系的手指动作方法,利用这种编码和映射方法,可以将手指的动作,简单、精确地映射到对应的汉字语音,这样可以省去手语识别过程,利用手指的动作即可发声。在本文提出的编码方法的基础上,可以构建低成本的聋哑人发声手套,本文提出了利用工控机和STM32 ARM芯片两种方案实现这种发声手套。
1 实现与汉语拼音映射的手指动作
1.1 手指动作及其与汉语拼音的映射的基本方法
手指动作及其与汉语拼音的映射方法具体如下:
(1)手指动作
大拇指的指尖或指节的一侧,与同一只手的其他四指的指尖、或指节的一侧接触,构成一个手指动作;或利用手指的指尖或指节的一侧,与同一只手的手掌接触,构成一个手指动作。
(2)手指动作与汉语拼音之间的映射方法
将一只手的一个手指动作与汉语拼音的声母对应,形成该手指动作与汉语拼音的一个声母之间的映射关系,然后选择这只手其他不同的手指动作,分别于其他汉语拼音声母对应,最终形成这只手不同的手指动作与汉语拼音不同声母之间的一一映射。将另一只手一个手指动作与汉语拼音的韵母对应,形成该手指动作与汉语拼音的一个韵母之间的映射关系,然后选择这只手其他不同的手指动作,分别于其他汉语拼音韵母对应,最终形成这只手不同的手指动作与汉语拼音不同韵母之间的一一映射。当双手各自、同时做出一个手指动作,分别对应汉语拼音的一个声母和一个韵母,对应的声母和韵母组合,构成一个汉字的汉语拼音的声母和韵母。
采用手的动作,可以代表汉语拼音的声调:一只手的手掌方向,分别代表汉语拼音声调的阴平、阳平、上声、去声和轻声五个声调。或采用两只手的手掌方向的组合,分别代表汉语拼音声调的阴平、阳平、上声、去声和轻声五个声调。
1.2 手指动作及其与汉语拼音的映射方法示例
下面举例说明手指动作及其与汉语拼音的映射方法的具体实现。图1(a)是与手指动作编码相关的指节和指节侧部的示意图。
图1 与手指动作编码指节定义的示意图及手指动作示意图
图1(a)中,当手掌面向本人、向上竖起,自上而下的指节,分别为第一指节、第二指节、第三指节,其中,大拇指没有第三指节;对于每个指节,以大拇指一侧的方向为外侧,以小拇指一侧的方向为内侧,以手掌一侧的方向为前侧,以手背一侧的方向为后侧,分别为一个指节4个侧部,包括指节内侧、指节外侧、指节前侧和指节后侧。
可以通过以下方法,形成手指动作与汉语拼音之间的映射:双手各自同时做出一个手指动作,分别对应汉语拼音的一个声母和一个韵母,对应的声母和韵母组合,构成一个汉字的汉语拼音。再利用左手的手掌方向和右手手掌方向的组合,分别代表汉语拼音声调的阴平、阳平、上声、去声和轻声五个声调。
以图1(b)为例,左手的手指动作编码代表了汉语拼音声母h,右手的手指动作编码代表了汉语拼音韵母ao,声母和韵母组合,构成汉语拼音hao,两只手的手掌方向,左手手掌方向向下,右手手掌方向向上,代表汉语拼音声调的上声,可以代表好、郝等汉字的发音。
2 工控机为控制核心的发声手套实现方案
2.1 方案组成及工作原理
为了开展编码方法的研究,本文首先利用系统集成搭建了利用工控机为控制核心的发声手套。发声手套主要包括:工控机、DIO采集卡、数据手套、陀螺传感器和音箱,系统框图如图2所示:
图2 以工控机为控制核心的发声手套系统框图
工控机采用ADLINK工控计算机,DIO采集卡采用PCIe7396 DIO采集卡,陀螺传感器选用WT901C陀螺。数据手套上的开关量,通过DIO采集卡采集到工控机中,工控机依据采集的双手数据手套的开关量,确定汉语拼音对应的声母和韵母,然后,工控机采集安装于数据手套上的陀螺传感器输出的倾角值,根据倾角值确定汉语拼音的音调,确定具体的发音,再利用发音调用内部的TTS动态库,驱动音箱发声。
2.2 手套、数据采集和发声的实现
在本方案中,数据手套主要是由开关阵列、手套和开关阵列电缆组成,另外,陀螺传感器安装在手套的手背上。两只数据手套的开关阵列,分别对应汉语拼音的声母阵列和韵母阵列,声母阵列包含23个独立开关,韵母阵列包括33个独立开关,每个开关的一端与DIO采集卡的一个采集端口连接,并通过上拉电阻接到工控机的5V供电,每个开关的另一端接工控机的地,当开关开时,DIO采集卡对应端口采集为高电平“1”,当开关按下时,DIO采集卡对应端口采集为低电平“0”。端口采集为低电平“0”时,该端口为有效状态,对应某一声母或韵母。
在本方案中,陀螺传感器的倾角值通过串口输出到工控机。发声通过直接调用Windows的SAPI库实现。
2.3 软件编码
在编码研究过程中,采用了MATLAB软件作为编程工具,受限于PCIe7396 DIO采集卡对MATLAB的支持,工控机安装了32位Windows 7操作系统,MATLAB程序的基础调用主要包括SAPI库、串口和PCIe7396 DIO采集卡的开发库。
MATLAB编程围绕一个声母、韵母和音调的三维表开展,声母、韵母在表中的序号由PCIe7396 DIO采集卡的采集值提供,音调的序号由串口采集的陀螺传感器值确定,利用声母、韵母和声调确定的序号,在三维表中查到由声母、韵母和声调确定发音的汉字。MATLAB程序循环调用PCIe7396 DIO采集卡,直到采集到有效的声母和韵母编码,然后读取两个串口,解析得到双手手套上的两个陀螺传感器的角度值,转换为声调,再利用声母、韵母和声调的编码值查表,提取表中对应的汉字,再将汉字作为参数调用SAPI的actxserver函数和Speak函数,进行TTS转换,输出语音信号,驱动音箱发声。
3 STM32 ARM芯片为控制核心的发声手套实现方案
3.1 方案组成及工作原理
工控机为控制核心的发声手套可以进行编码方法的研究,但这种系统无法便携使用,因此,本文开发了可穿戴的以STM32 ARM芯片为控制器的发声手套。系统框图如图3所示。
图3(a)中,上部是主数据手套,主要包括控制器、开关阵列、角度传感器、通信模块、电池、手套、语音合成模块和扬声器,下部是从数据手套,主要包括开关阵列、角度传感器、控制器、通信模块、电池和手套。控制器采用STM32 ARM芯片,角度传感器选用JY901角度传感器,语音合成模块采用XFS5152CE语音合成模块,通信模块采用HC-08蓝牙模块,电池采用4节镍氢充电电池。
数据手套上的开关阵列,直接接入STM32控制器的GPIO管脚,采集的双手数据手套的开关量,确定汉语拼音对应的声母和韵母,然后,STM32控制器采集安装于数据手套上的角度传感器输出的倾角值,根据倾角值确定汉语拼音的音调,确定具体的发音,再将发音编码输出到语音合成模块,驱动扬声器发声。
图3 以STM32 ARM芯片为控制核心的发声手套系统框图及照片
3.2 手套、数据采集和发声的实现
在本方案中,将全部模块集成到数据手套上,两只数据手套具有独立的控制器、角度传感器、供电和开关阵列,通过蓝牙模块进行数据通信,主数据手套还包括语音合成模块和扬声器。
两只数据手套的开关阵列,分别对应汉语拼音的声母阵列和韵母阵列,声母阵列包含23个独立开关,韵母阵列包括33个独立开关,每个开关的一端与STM32控制器的GPIO管脚连接,每个开关的另一端接工控机的地,当开关开时,STM32控制器的GPIO对应管脚采集为高电平“1”,当开关按下时,STM32控制器的GPIO对应管脚采集为低电平“0”。端口采集为低电平“0”时,该端口为有效状态,对应某一声母或韵母。在本方案中,倾角器的倾角值通过串口输出到STM32控制器。STM32控制器将发音编码及其发声控制指令通过串口输出到语音模块,驱动扬声器发声。
3.3 软件编码
发声手套软件的开发采用Keil软件作为编程工具,基于ST公司提供的固件库函数,利用于C语言进行编程,程序的硬件编程主要包括串口通信和GPIO采集。
编程围绕一个声母、韵母和音调的三维表开展,声母、韵母在表中的序号由GPIO采集的采集值提供,音调的序号由串口采集的角度传感器值确定,利用声母、韵母和声调确定的序号,在三维表中查到由声母、韵母和声调确定发音的汉字。软件流程图如图4所示,图4(a)为主数据手套的软件流程图,图4(b)为从数据手套的软件流程图。
图4 软件流程图
程序循环读取GPIO端口,直到采集到有效的声母和韵母编码,然后读取两个串口,解析得到双手手套上的两个角度传感器的角度值,转换为声调编码,在上述采集构成中,主数据手套的程序通过串口接收从数据手套发声的编码值,再利用声母、韵母和声调的编码值查表,提取表中对应的汉字,再将汉字作为参数,构建语音合成模块的发声命令,通过串口发送到语音合成模块,语音合成模块接收命令驱动扬声器发声。
4 结语
本文提出了基于手指动作的汉语拼音编码方法,并给出了试验验证系统实现和发声手套原型系统实现,两种系统实现与实际产品仍存在差距,在手套的舒适性、开关阵列的可靠性、电路的集成度等方面需要进一步改进。