一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种便携式的基于手部动作的虚拟输入字符系统及识别方法与流程

2022-03-01 18:06:44 来源:中国专利 TAG:


1.本发明属于人工智能领域,涉及一种便携式的基于手部动作的虚拟输入字符系统及识别方法。


背景技术:

2.当前当前在2d场景下我们通常使用鼠标键盘以及触屏操作,但是随着智能设备的逐渐小型化以及智能眼镜的发展,用户更加需要一种基于手部动作的虚拟输入字符系统,即不需要键盘既可以配合智能眼镜完成字符的输入。


技术实现要素:

3.为克服之前的各个已有手势识别系统识别准确率低、设备价格昂贵、缺乏完整软件系统支持的缺点,本系统采用了一种性价比高的,技术成熟的手势识别可穿戴设备,可以并行采集精度良好的加速度、三轴陀螺仪、八通道肌电信号(emg)数据,能够有效抓取人类手臂在进行不同手势动作时,手臂以及手指运动、姿态数据,通过bluetooth连接传回后端用于手势识别。
4.为解决上述技术问题,实现上述技术效果,本发明通过以下技术方案实现:对于识别的算法进行了独立设计,有单手、双手、离线、在线等识别模式。我们根据数据的特性,先对数据进行了特征工程处理,将数据分成一个个window进行特征提取。对于采集数据特征工程,根据采集数据特性,分别进行(小波变换,阈值滤波)降噪处理和特征提取(均方根,平均方差,曲线拟合度)。识别算法采用ltsm rnn(长期短时记忆循环神经网络)和svm(支持向量机),整个算法的核心任务是进行多元分类。对于三种数据输入,将加速度信号、陀螺仪信号与肌电信号交由神经网络处理,输出一个特征向量,进行分类,最终得到结果。
5.我们也为整个识别过程编写构建了完整的软件系统:手环与请求终端的连接匹配,采集请求的发起,前后端通讯基于raw socket http的双向通讯,支持多个终端多个手环同时进行手势识别,对请求响应、数据采集、处理、识别、数据连接等工作线程间的通信和管理、多线程任务的分发,识别结果传回后终端可根据正误进行反馈,对所有识别的过程的数据以及反馈可持久化管理,搭建了云端服务器,能够及时获取产品使用的反馈数据,统一每个产品终端推送最新的算法模型。
6.对于系统的前端,采用了android系统作为平台,编程语言为java。应用最低可支持的android api 版本号为15,(java uml图)该应用具有较高的兼容性,前端采用了google android官方推荐的android.support.v7前端组件库进行编写,使用了fragment、recyclerview等组件,保证应用前端界面的高可用性。对于实现前后端通信:客户端采用了原生的java.net包中socket,httprequest和java.io包中的stringbuffer、bytebuffer、scanner等类,并根据需求对原生包中的各个进行了组织、接口制定和封装工作。为了避免io阻塞,保持前端运行的流畅,使用了android的handlerthread类,在工作线程来进行所有
的io工作,通过消息队列的方式与主线程进行通讯。
7.前后端在通讯的连接方式上,(图)匹配请求、数据同步、识别结果的正误反馈等具有突发性、短暂性的任务采用http方式进行,而匹配成功后将手势识别结果实时传回、在识别过程中的控制等需要长时间监听的工作采用了raw socket方式;当在手环与终端匹配后,会进行一个socket的建立,在两端各启动一个循环监听线程,时刻扫描是否有数据传来;在前后端之间制定了数据包格式,传输数据包为utf-8编码的json格式字符串,数据包分为控制字段和数据字段。
8.系统后端采用python语言,整个后端在开源的django web server框架下开发。整个后端的部署架构为win10 nginx django sqlite。(图)与后端的交互启动以http request的方式,在参数的传递上通过post的请求方式,将数据以键值对的方式上传,访问最终由django响应,并调用具体的业务逻辑代码,执行响应的工作。后端的逻辑有几个python包来完成主要的业务;python的包是天然的单例模式,所有手环匹配请求启动时统一由单例代码响应,实例、初始化进行网络连接、手势识别的线程类,分配、释放网络连接、手环数据源资源。
9.手环的管理由一个python包进行管理,他从底层api中获取手环的数据,用面对对象方式对手环进行简单装饰,并根据手环的hash value为每个手环对象分配手环id,从而便于后端与其他模块进行交互,包内有多个映射关系的python数据结构dict来管理手环对象,手环id,以及每个识别实例线程的对应关系。整个系统的手环管理工作都由这个包完成。
10.对于每一个手势识别实例由三个线程构成:请求响应线程、socket监听线程、手环数据采集识别线程,三个线程由消息队列和thread.event类来进行线程间通讯。(图)每个识别线程相互独立,可并行执行,需要共享的数据内容均进行多线程加锁控制。下面介绍实例中三个线程的具体情况请求响应线程:这个线程是整个手势识别工作线程组中的主线程,这个线程负责socket连接数据的发送以及响应其他线程加入消息队列中消息(响应请求),它启动的同时启动一个socket连接的监听线程,用于监听从客户端发来的消息。同时自己维护一个消息队列,以获取其他线程向放入响应请求。线程内部有一个循环,在没有线程没有响应工作时再该循环中不断扫描消息队列,检查是否有新的消息;若有,则从中获得响应请求的消息,根据消息具体内容的执行相关的响应操作,执行完毕后返回主循环继续扫描消息队列。这个工作线程在响应时执行工作有socket数据的发送、实时手势识别结果的追加、通过event来控制其他两个线程的工作。
11.socket监听线程:这个线程的工作相对简单,他的工作就是不断扫描socket数据接受端,接受来自终端的数据包,解析数据包,将其转化为后端的message对象返回给工作线程进行响应,除此之外,它还需要管理socket接受数据时可能出现的各种异常情况,如超时、空数据等错误,避免传入错误的消息其影响后端的运行。
12.手环数据采集识别线程:这个线程是在主线程启动时一并启动,启动后处在等待循环中,当主线程接收到手势识别请求时,其开始工作线程会被置位。在该线程初始化的过程中,会将识别算法所需的训练好的模型和标量数据读入,该模型可由服务器从学习数据中实时训练得到。开始工作后该线程的工作分为两个环节,一是手环数据的采集,程序内部
的参数是0.1秒采集一次传感器的数据并缓存,当且仅当三种数据长度达到识别需要的数据长度时开始执行算法代码,进行识别工作。识别结束后,该线程将识别结果发回主线程持久化处理以及返回给终端进行显示。
13.特征工程我们根据三种采集数据的物理特性,使用了不同的特征工程;对于加速度和陀螺仪等经典牛顿力学信号采用arc弧度拟合系数,zc过零点数,rms均方根进行数据提取,肌电信号这样的生物电信号采用先使用阈值过滤和dbn(daubechies),morlet小波变换降噪后再使用rms,vav平均方差等方法提取特征。首先我们将数据序列进行分段,以每个窗口进行特征提取,保证特征的被充分提取,同时能将输入数据量进行压缩,降低算法模型的复杂度,避免模型出现过拟合的情况。图信号变换算法方面,手势识别的问题是一个典型的序列识别问题。原生的数据经过数据处理,特征提取后,每个手势识别实际进入算法模块的数据输入是一个84*10的矩阵,含义如下(数据图):2 x 3 x (1 1 4) (加速度和陀螺仪信号中x,y,z三个维度进行三种数据特征提取后的数据 ) 8 x (2 4) (八通道肌电信号进行三种特征提取后的信号) ,纵向10个维度则是时序信号数据按照时间维度被分为10个window,依次输入网络。
14.对于这个序列识别问题,rnn循环神经网络非常适合完成这个任务。为了保证模型的健壮性,我们采用了rnn的一种优化版lstm rnn,这种神经网络能够保存在识别序列整个过程保持一个贯穿全程的信息,从而保持在能够更加精确的识别序列的特征。对于神经网络的设计,如图,使用两个独立的子神经网络分别处理加速度陀螺仪信号和肌电信号。神经网络的设计:输入层采用84个神经元将前文介绍数据输入神经网络。神经网络首先由一个autoencoder自编码器对数据进行降维处理,从而降低实际识别的神经网络的复杂度,提高模型分类准确率,随后将数据输入rnn进行分类,rnn的设计为三层20个节点的隐藏层,在输出层使用了一个softmax层对神经网络的输出进行最后的分类,softmax输出每个分类类别的概率,从中取最大概率的类别,作为最终手势识别的结果。
15.本发明的有益效果为:1、采用了的最新的可穿戴设备作为手势数据的采集元件,可通过加速度传感器,三轴陀螺仪,八通道肌电传感器对人类手势动作数据进行捕获。高频率、高精度的数据极大的保证了手势识别的准确性。同时该手环性价比高,单价仅三百到四百人民币左右。
16.2、兼容性高部署方便,整个系统采用的编程语言、框架均为开源、支持多平台,可以适应各种各样的部署场景。部署时十分方便,服务器支持一键启动、数据模型更新,客户端服务端的通讯消息系统完备且高度解耦,所有设备即插即用。
17.3、系统软件平台完备,充分支持整个手势识别的流程及应用生态;整个系统各个环节所需功能均进行了模块化,便于日后功能的更新迭代及单元测试。后端使用orm(模型对象映射)连接数据库,手势识别的过程及结果数据均进行可持久化保存,便于之后的对算法进行后继的训练以及性能调优等工作。产品后端部署总的云服务器,能够统一的获得每个终端产品的反馈数据和进行最新算法模型的推送。
18.4、算法方面采用技术成熟,非常适合进行序列识别任务的循环神经网络作为算法的核心组件,极好的满足了手势识别所需要完成的任务。相对于之前的手势识别产品,该算法模型可靠性好,灵活度高,能够识别更多的手势类别。
19.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,
并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。
附图说明
20.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1为本发明的系统模块结构图。
21.图2为本发明的系统模块交互关系图。
22.图3为本发明的算法模块流程。
23.图4为本发明的基本业务流程图。
24.图5为本发明的信号提取示意图。
25.图6为本发明的输入数据示意图图7为本发明的神经网络示意图。
具体实施方式
26.下面将参考附图并结合实施例,来详细说明本发明。此处所作说明用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
27.参见图1-7所示,启动客户端及服务端以及若干个手环连接至服务器,此时可以开始进行手环匹配。客户端手环管理模块根据从底层组件获取已连接的手环的信息,构造内部的手环对象列表。客户端准备进行手环匹配时,首先通过http get请求,从后端获取手环列表。后端获取请求后调用手环管理包中的代码获取手环的列表,将其转换为json格式的字符串以http response的方式返回;前端根据单手双手模式的设置,以交互式方式引导用户选择要用于手势识别的手环。
28.用户执行确认操作后开始进行匹配,前端通过http post请求的方式上传决定进行匹配的手环id。后端接收到请求后通过手环id,从手环管理模块获取手环对象,并将其标记为已占用。同时在响应请求的代码获取空闲的端口号作为接下来socket连接的端口号,启动工作线程,并在线程中开启socket连接,等待客户端的连接,并将已开启的socket监听端口号通过response的方式返回客户端,socket建立后,服务端http响应结束;客户端根据返回的端口号向服务端socket请求连接。服务端收到连接请求后,建立监听线程和识别线程,等待客户端发起手势识别请求。
29.客户端通过socket连接的形式,向服务端发送带有手势识别请求信息的数据包。服务端监听线程收到数据包后进行解析,转换为消息类对象,加入主线程的消息队列中,主线程获取消息进行解析,分发到具体的响应代码,即启动手势识别的代码,将手势识别启动标志置位。手势识别线程扫描到手势识别开始标志位被置位后,开始进行手势采集、识别的过程。首先是手势信号的采集过程,程序以一定频率不断从手环对象中获取三种数据,并将获得的数据进行拼接,每次拼接结束后测量数据的长度,当且仅当数据长度符合一个手势数据的长度时,结束数据采集过程,进入手势识别过程。(算法流程)首先将整个手势数据分成一个个的window进行特征提取,随后返回提取出的特征向量,调用pytorch库中预先 已
经加载好模型的识别算法,该算法返回这个手势数据最匹配的手势编码,根据这个编码转换成其所对应的手势文字。手势识别线程将以上识别的结果以及中间数据打包成一个消息加入主线程的消息队列中,然后开始下一个手势的识别。手势识别线程将会持续这个循环,直至扫描到开始手势识别标志位被置为false或者是内部计时器超时(程序设定最长手势采集时间是60s)。
30.主线程收到识别结果的消息时,将会将这个手势识别结果在本地追加到一个识别结果对象中,然后通过socket连接,向客户端返回识别的结果,这个识别结果的消息包括手势的id、手势识别请求的id、以及识别的文本结果,客户端根据id将文本更新于相关的ui上,展示给用户。至此,一次手势中识别每个手势并更新的过程到此为止。
31.在进行手势识别的过程中,用户可随时与客户端交互,向服务端发送消息,停止手势识别的工作。
32.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献