基于LeapMotion手语翻译器的设计与实现

时间:2022-08-27 11:34:54

基于LeapMotion手语翻译器的设计与实现

摘 要: 手语翻译器作为不懂手语的正常人与使用手语的残障人士之间的沟通桥梁,近来成为研究热点,但是目前市场上成熟的手语翻译器并不多见。在此设计利用Leap Motion对手部识别精度高以及体积小巧等特性,实现了一种识别精度高、便于携带的手语翻译器。该翻译器不仅支持静态手语的识别,同时也能识别动态手语,实现了手语识别、文本翻译、语音播报,多语言翻译等功能。实验结果表明该手语翻译器具有识别准确率高的特点,能基本实现残障人士与正常人之间简单的交流,具有良好的应用前景。

关键词: Leap Motion; 手势识别; 手语翻译器; 语音播报; 多语言翻译

中图分类号: TN919.8?34 文献标识码: A 文章编号: 1004?373X(2015)24?0114?04

Design and implementation of sign language interpreter system based on Leap Motion

WENG Shenghui, CHEN Weihao, CHEN Kuanglin

(School of Computing Science, Beijing Institute of Technology (Zhuhai), Zhuhai 519085, China)

Abstract: As a communication bridge between normal people ignorant of the sign language and handicapped persons using the sign language, the sign?language translator has recently become a hot research. However, sign?language interpreters on the market are rare. A high recognition accuracy and portable sign?language translator was achieved by utilizing Leap Motion’s characteristics of high recognition accuracy and small size. The interpreter implemented the sign?language recognition, text translation, voice broadcast, multi?language translation and other functions, as well as can support static sign?language recognition and recognize dynamic sign?language. The experimental result shows that the sign?language interpreter has high recognition accuracy, and can basically realize simple communication between people with disabilities and normal people. Therefore, it has a nice prospect.

Keywords: Leap Motion; gesture recognition; sign language interpreter; voice broadcast; multi?language translation

0 引 言

目前全球大概有1亿聋哑人,而我国就有超过2 000万聋哑人,而且每年还在以2万~3万名的速度递增。听力正常人之间主要采用口语和书面语进行交流,并辅之以一定的体势和表情。在聋人之间的交流中,手语如同正常人的口语一样,起着非常重要的作用。由于正常人懂手语的较少,所以正常人与聋哑人之间的沟通存在较大的障碍。随着社会的发展,聋哑人的地位不断提高,手语翻译工作应用的范围也越来越广泛,也将越来越引起社会各界的关注和重视。我国目前手语翻译职业化道路刚刚起步,各方面还很不完善,缺少专业的手语翻译,尤其分科明确专业程度很高的手语翻译人员。目前手语翻译工作大多是由聋校教师和残疾人工厂的手语翻译人员,这些人不仅缺乏手语翻译技能技巧等方面的专业培训,而且更缺乏某一专业领域的知识储备和训练,如法律、医疗、心理咨询等专业知识,手语翻译的水平极大地限制了聋人群体的发展和生存质量的提高。但是近年来互联网和计算机不断的发展,机器翻译变得随处可见。机器能有丰富的专业知识储备,能在不带任何私人感情和主观意识的情况下准确无漏地进行翻译,解决了手语翻译人员存在的一些翻译缺陷,而且其便携性也是一大优点[1]。

目前手语识别系统主要分为基于数据手套的识别和基于视觉(图像)的手语识别系统[2]。基于数据手套的手语识别系统,是利用数据手套和位置跟踪器测量手势在空间运动轨迹和时序信息[3?4]。这种方法的优点是系统的识别率高,缺点是打手语的人必须穿戴复杂的数据手套和位置跟踪器,并且输入设备比较昂贵。

本文提出的手语翻译器属于基于视觉(图像)的手语识别系统[5]。采用的识别设备是Leap Motion体感控制器Leap Motion是一款μm级3D手动交互设备,只有三寸长,一寸宽,看起来像一个U盘大小[6]。可以追踪到小到0.01 mm的动作,拥有150°的视角,可跟踪一个人10个手指的动作,最大频率为290帧/s,延迟比显示器的刷新率还要低,特别适合用作手语翻译器。

1 系统概述

手语翻译器主要由3大模块组成,分别是手势识别模块,文本显示模块和语音播报模块。总体框架图如图1所示。

图1 系统总体框架图

该手语翻译器主要利用手势识别模块中的Leap Motion体感设备自身的两个红外摄像头进行手势的捕捉,通过识别人手的姿势和动作,将其转换成数据通过数据线发送到主机进行处理,主机将对这些数据进行提取,把提取出来的有用的数据通过算法处理识别出手势动作,翻译成文本信息显示在显示器上,语音模块可以根据需要转换成语音信息,最后还可以通过接入互联网的方式连接云翻译服务平台实现多语言翻译功能。

2 各模块的设计与实现

2.1 手势识别

该模块功能主要由Leap Motion控制器实现,该设备中内置两个红外线摄像头,内部结构如图2所示[6]。

它可捕捉到设备面前的一块半球型区域中的人手和一切棍棒状的工具,虚构出xyz三个轴,生成一个监听者将检测到的物体计算生成相关的数据,如手中各个手指的骨骼点之间的距离、手指的长度、数量、方向等;还可以识别出各种基础手势特征基元,如转圈,平移等,这些数据都将按照时间片的单位封装成1帧使用。由于手语不只有静态的,还有动态手势,所以一个动态手势可以细化成很多帧,每一帧都有其特定的ID与之区别开来,而Leap Motion设备一次捕获一帧,之后可以通过对控制器物体的轮询获得帧,然后将其通过数据线发送到处理机。

图2 Leap Motion内部结构示意图

为了更方便,需要将控制器检测到的数据进行提取,放进一个onframe()函数中。onframe()是核心函数,它实时返回控制器所监听到的一些基本信息并显示,能以数据的形式更直观的对当前手势进行分析。通过controller对象调用onframe()函数,函数将获取最新的运动跟踪帧数据,并把检测目标的信息作为标准输出。

下面的代码是手势识别代码中的一部分,实现的功能有:获取最新的Frame对象,并根据Frame对象检索人手的list列表,然后输出Frame的ID、时间戳、以及帧数据中人手的数量、手指数、工具的数量:

const Frame frame = controller.frame();

std::cout

接下来,函数将检测list列表中的第一只手,并判断左右手:

const Hand hand = *hl;

LRhand = hand.isLeft() ? "Left hand" : "Right hand";

if(LRhand=="Left hand")

ui?>lineEdit?>setText("左手");

else

ui?>lineEdit?>setText("右手");

Hand类的一个对象包含ID、反映人手物理特征的属性、手指对象的list列表,而每个Finger对象又包含ID、反映手指物理特征的属性。

这是基本的信息提取,Leap还提供了基础手势特征基元的识别,首先调用enableGesture()函数,启用了所有的手势识别类型:

controller.enableGesture(Gesture::TYPE_CIRCLE); controller.enableGesture(Gesture::TYPE_KEY_TAP);

controller.enableGesture(Gesture::TYPE_SCREEN_TAP);

controller.enableGesture(Gesture::TYPE_SWIPE);

Leap设备把代表识别动作模型的Gesture对象放到Frame对象中gestures的list列表中。通过对控制器的轮询循环读取gestures的list列表,并把每个手势的信息输出。

在动态手势的识别中,需要将当前帧的手势信息与前面的帧里对应的手势进行比较,可以随时调用一个时间范围内的帧数据,设置一个x值,通过比较并计算当前帧frame()与x帧之前frame(x)中数据变化来识别手势。例如,画圈的手势动作中有个进度属性,此属性用来表示手指已经画圈的次数。这是一个完整的过程,如果想在帧与帧之间获取这个进度,需要减去前一帧中手势进度值。在实际操作中,可以通过手势gesture的ID找到对应的帧。下面的代码就是用了这个方法由前帧导出相应的角(单位:rad):

float sweptAngle = 0;

if (circle.state() != Gesture::STATE_START) {

CircleGesture previousUpdate = CircleGesture(controller.frame(1).gesture(circle.id()));

sweptAngle = (circle.progress()-previousUpdate.progr

ess()) * 2 * PI;

}

2.2 文本显示

文本显示模块主要是将手势手语翻译成文本并显示出来,能更方便聋哑人和正常人之间交流,实现实时交谈。为了使该软件更具实用性,该系统还加入了多语翻译的功能,可连接上云翻译服务平台,将文本显示的容易翻译成多种语言。

多语言翻译功能是利用网上百度公司提供的百度翻译API实现的[7]。百度翻译提供中文、英语、日语、韩语、法语、泰语、德语、俄语、西班牙语、葡萄牙语、阿拉伯语、意大利语、粤语等16个语种,136个语言方向的翻译服务,支持文本翻译和网页翻译两种类型。目前市面上百度翻译API目前有近万个开发者接入,日均访问量近亿次。手机百度App、金山词霸全线产品、灵格斯词霸、华为手机、OPPO手机、敦煌网、百度文库、腾讯SOSO、特快翻译IOS和Android版、百度PC浏览器和手机浏览器、百度输入法等均与百度翻译建立了良好的合作关系。要使用百度翻译API需要先向百度申请开发所需的ApiKey。默认翻译API使用频率为每个IP 1 000次/h,如有需要可向百度开发者中心申请更高频次权限。然后通过HTTP协议发送get翻译请求。

发送的请求中需包含字符编码必须为UTF?8的待翻译内容和作为开发者已授权用户的身份证明的ApiKey,指定要翻译的源语言和目标语言种类(可设置为自动识别)。之后便可以得到相应的响应。

返回的响应是ISO?8859?1编码格式的标准JSON字符串。为了能正常使用需要先将其转换成日常使用的字符编码格式UTF?8格式:

QTextCodec *codec = QTextCodec::codecForName("UTF?8");

然后使用QScriptEngine一层层解析返回的嵌套JSON字符串,除去多余的内容,将需要的翻译完成后的文字内容显示出来:

QString all = codec?>toUnicode(reply?>readAll());

QJsonDocument myjson = QJsonDocument::fromJson(all.toLatin1(),&jsonErr);

QByteArray byte_array = myjson.toJson(QJsonDocument::Compact);

QString json_str(byte_array);

QScriptEngine engine;

QScriptValue sc = engine.evaluate("s=" + json_str);

qDebug()

QScriptValue subsc = sc.property("trans_result");

QScriptValue subsc1 = subsc.property(0);

ui?>textEdit?>setText(subsc1.property("dst").toString());

2.3 语音播报

语音功能是该翻译器的拓展功能。翻译不应该只有翻译显示的功能。为了更加适应聋哑人和正常人之间的交流,引入了语音播报的功能,使其更符合正常人日常之间使用语言而非文字的交流习惯。对此,翻译器除了能发出声音,还加入了不少特色功能。同时支持简体中文和英语,根据使用者的性别,可在男声女声选项中选择对应的声音,而且加入了声音大小调节、语速快慢调整等功能功能,使该翻译器更具人性化和实用性。

语音播报模块使用微软免费提供的的TTS引擎和发音包,同样只需要使用官方提供的API即可。微软SDK提供的SAPI是基于COM封装的,无论是否熟悉COM,只要按部就班的初始化COM获取接口,调用接口完成某个功能,实现语音控制,程序结束时释放资源[8?9]。

模块的核心是ISpVoice接口,其主要功能是speak()函数,该函数的具体实现如下:

bool TextSpeech::speak(QString txt)

{

if(!_binit)

return false;

int result = this?>_voice.dynamicCall("Speak(QString, SpeechVoiceSpeakFlags)", txt ,1).toInt();

_bReading = true;

return result;

}

传入可识别的字符串为参数,执行播报功能,返回一个参数表示是否执行成功除了Speak()外IspVoice接口还有许多成员函数,如通过SetRate(int),SetVolume(int)等语句将具体参数传入,设置音量、音调,Pause(void)和Resume(void)来暂停和回复语音的朗读,几乎可以使输出达到自然语音效果。至于音色,则通过SetVoice(ISpObjectToken *pToken)函数选择预装的语音库,可实现男声女声的切换。不仅如此,这个TTS API功能最强大之处在于能够分析XML标签,输入文本并不需要严格遵守W3C的标准,只要含有XML标签就行。XML标签同样也能做到上述函数中的功能:设置音量、音调、延长、停顿等。再另外,根据XML标注的不同,数字、日期、时间之类的读法有自己的一套规则。例如数字1 024,"1024"念成“一千零二十四”,"1024"将念成“一零二四”。

实际上所有的语言发音都是由基本的音素组成,以中文发音为例,拼音是组成发音的最基本的元素,只要知道汉字的拼音,即使不知道怎么写,也不知道怎么读,都没有关系。对于TTS引擎来说,它不一定认识所有字,但是只要把拼音对应的符号(SYM)给它,它就一定能够读出来,而英语发音则可以用音标表示,例如“h eh ? l ow 1”就是hello这个单词对应的语素。所以与一些用预先录制的声音文件实现发声的应用程序相比,TTS的发声引擎不需要大量的声音文件支持,只有几兆大小,因此可以节省很大的储存空间,缩小了程序的体积。

3 应用前景预测

目前市面上的手语翻译器很少,但是对于这种应用的需求可以从助听器市场中窥知一二。2012年我国助听器国内销量为406.5万个,同比增长21.2%,增幅较2011年增加6.5个百分点。2008―2012年我国助听器销量统计如表1所示[10]。

表1 2008―2012年我国助听器销量统计统计表

以上的数据都显示出我国助听器市场强劲的需求,从而可推断出算出手语翻译器潜在的市场容量,丝毫不必过多地担心市场容量问题。目前市场上助听器价格昂贵,品牌助听器最便宜2 000元起,贵则几万元,据残疾人的就业调查相关数据显示我国聋哑人群体的就业状况不容乐观,虽然市场上有针对听力障碍者推出的各类品牌助听器,但是也相对比较昂贵。这对于有就业困难的特殊人群来说,无疑是难以负担的。而且据调查,大部分助听器的使用者均表示佩戴不适,伴有噪音,轻微头晕等症状。而本文提出的手语翻译器,不仅不会给使用者带来不适,其小巧的机身与低廉的价格更具竞争力。2009―2014年我国助听器销量如图3所示[11]。

图3 2009―2014年我国助听器销量图

4 结 语

本文叙述了基于Leap Motion的手语翻译器的设计与实现。这种翻译器利用了Leap Motion对手部识别的高精度,手势时间片段的细化和其体积小巧的特性,做出了识别度高,便携性好的手语翻译器。日常手语中有很多动态手势,该翻译器不仅支持静态手语的识别,同时也能识别出动态的手语。而且该设备还内置有光感调节,红外线打的摄像头对环境的兼容性很高,即使在强光弱光的情况下均能使用,基本实现了聋哑人与正常人之间简单的交流。相对其他手语翻译设备来说,Leap Motion除了具有精度高、体积小等优点外,价格也比较低廉,具有较好的应用前景。

参考文献

[1] 倪训博,赵德斌,高文,等.非特定人手语数据生成及其有效性检测[J].软件学报,2010,21(5):1153?1168.

[2] 姜华强,潘红.基于关键帧的多级分类手语识别研究[J].计算机应用研究,2010,27(2):491?493.

[3] 顾伟宏,闵昆龙,张晓娜.新型数据手套及其手势识别研究[J].自动化仪表,2011(2):56?58.

[4] 刘明涛,雷勇.基于数据手套的汉语手指字母流识别系统[J].计算机工程,2011,37(22):168?170.

[5] 杨全,彭进业.基于深度图像信息的手语识别算法[J].计算机应用,2013,33(10):2882?2885.

[6] Leap Motion, Inc. Leap Motion controller [EB/OL]. [2015?04?11]. https://.

[7] Microsoft Corporation. Speech [EB/OL]. [2015?03?12]. http:///dev/speech.

[8] 章森,刘磊,刁麓弘.大规模语音语料库及其在TTS中应用的几个问题[J].计算机学报,2010,33(4):687?696.

上一篇:黄土地区路基施工技术试验 下一篇:基于音圈电机驱动的新型柔顺光学振动台设计分...