基于MATLAB的战术手势识别功能的设计

基于MATLAB的战术手势识别功能的设计与实现

1  选题背景与研究意义

武警部队作为国家重要武装力量,履行着国家赋予的神圣使命,在执行解救人质、捕歼暴恐分子等任务时,确保良好的通信联络是分队行动中通信保障的重点。低劣的通信质量在实战中将导致分队无法及时得到上级行动命令、失去对战场情况的把控,指挥部无法及时了解作战情况,造成整个行动指挥的失控,最终导致丢失战场控制权,进而完全丧失战斗力。

随着现代技术的发展,各种无线、有线通信联络方式飞速发展,有效保障了分队行动中的良好通信联络。但是,战场环境的多变导致依靠无线电波等技术的通信联络具有较高的不确定性,其受地形、天气等要素的影响较多,同时也易遭到敌方势力的电子对抗打击从而降低甚至破坏我方通信联络效能。故此,作为分队行动中的战术手势通信不可或缺。

战术手势识别主要是以战术手势几何特征检验为前提,是通过探究对应的手势图像几何形状轮廓,结合相关特性来判断战术手势所蕴含的意义。就好比人在对另外一个战术手势进行识别的时候,往往需要访问自己大脑里面的记忆库,对相应的特征进行比对之后,如果与相关记忆库识别比对成功,就能够识别出战术手势的含义,如果该对象的特征无法被匹配,那么说明无法识别。

在民用领域中,识别人手部动作并给予相应反馈的手势识别研究,应用前景及潜藏的经济价值不可估量。如果能将该技术运用在军事方面,可以有效的提升部队现代化水平,提高部队对于信息的反应和处理能力,进而进一步提升单兵作战能力,减少物资和人员的消耗,全面提升战斗力。对于武警部队而言,分队战术手势识别技术可以广泛的被应用在反恐作战、防卫作战、处突维稳、日常执勤、看押看守等各个方面,分队战术手势识别的研究处于模式识别、图像处理、机器学习和计算机语言等多学科领域交叉地带,综合性很强。战术手势研究典型的应用领域有:智能控制、运动分析、虚拟现实等。通过战术手势识别技术的发展,可以实现人机通过手势变换进行交互,通过手势直接无线控制PC等电子产品;在文体活动中,手势识别也大放异彩,通过运动分析及手势分析可以极大地提高运动与舞蹈训练水平;手势分析同样可以帮助视频会议达到更好的效果,降低人物动画制作成本,或者帮助世界上不同区域的人利用互联网组成一个线上工作团队。

围绕武警部队在各类战斗、任务中的战术手势的重要性,每一名战斗在一线官兵都应该对战斗中所使用的战术手语非常熟悉,以真正达到传递信息、通信联络的作用。而常用的、熟悉的战术手语已经不具备较好的保密性和安全性,所以每一场战斗或者任务都应该将新编战术手语作为一项重要的准备工作来完成。那么设计规定好战术手语后,提高官兵的记忆效率,确保战斗或者执行任务过程中战术手语的有效正确运用便至关重要。选题即围绕战术手势的识别功能,以MATLAB为基础展开研究和设计。为便于官兵在训练中加强对手语的记忆掌握,根据不同的战术背景不同的手语需要,针对特战小队在实际任务中可以运用到的手语联络方式进行设计研究,通过自拟暗语进行训练测试,完成了基于MATLAB的战术手语的识别功能的设计与实现。

2  国内外研究现状

手势识别的研究起步于20世纪末,由于计算机技术的发展,特别是近年来虚拟现实技术的发展,手势识别的研究也到达一个新的高度。熵分析法是韩国的李金石、李振恩等人通过从背景复杂的视频数据中分割出人的手势形状,然后计算手型的质心到轮廓边界的距离从而识别手势的方法,该方法具有较好的识别率,在对6个实验样本的测试中,结果显示其正确识别率近乎百分百。印度人米娜克氏在基于视觉手势识别的基础上进一步研究,提出一种基于结构特征的手势识别算法。该算法包括去除背景、方向检测。手指检测以及手指的数量进行检测,最终确定手势。于成龙等采用基于视觉的组合特征进行手势识别,通过手掌的大小长度、质心、长宽比等人手的属性值结合使用,使得识别率得到极大提升。

对于手势识别的研究不仅仅限于大学或者是研究院等机构,众多的大型公司机构也纷纷加入到手势识别研究以及应用的行列。在多伦多2014年举行的“计算机人机互动大会”上,微软向世界展示了一款运动传感键盘,该键盘实现了对用户悬空手势进行的识别。该款键盘被命名为Type-Hover-Swipe键盘,它集成了64个传感器,每个传感器位于键盘的格子中间。当用户将手指悬停在键盘上方时,键盘会根据用户手指的运动进行识别,这样就可以实现用户以一种舒服的姿势进行手势操作。而Xbox则是微软比较成熟的商业化手势甚至是身体的识别。作为芯片生产巨头,Intel公司也积极参与到手势识别的大军中来。其中开源的图像处理OpenCV类库以及Realsense设备都是他们在此领域的研究成果。

国内高校及研究院对于手势识别也有着许多成就,哈尔滨工业大学的吴江琴、高文等人通过ANN与HMM的混合方法的手语训练识别方法,增加了识别方法的分类特征,同时使得模型的估计参数大幅减少,提高了效率。在实际运用中,使用ANN-HMM混合方法的中国手语识别系统中,孤立词语的识别率为90%,简单语句的识别率为92%。另外,天津大学的研究人员通过对操作者的体态动作图像信息进行处理使其能够控制机器人的运动、答复等状态。清华大学的研究人员将识别率较高的手势类型(例如数字手语)作为人机交互的信号,并将其应用于电脑游戏中,取得了成功。

3  手势识别基本概念

手势识别(Gesture Recognition)指通过跟踪人类手势、识别并其转换为语义上有意义的命令的过程。手势图像识别的总体目标是通过计算机对获取的手的位置、姿势或形态等信息进行处理识别,并得出语义的解释或执行相应的操作。手势图像识别技术性并不是很强,其难点和重点主要是对大量数据信息的训练和处理。

手势的完成是一个动态的过程,这个过程包括了手指弯曲引起的手的形状和手在空间中的位置和方位的变化两个方面,在实际识别过程中,根据手势的时间特征,可以将手势分为静态手势和动态手势两种。相对而言,对于静态手势的识别,可以将其视为静态图像,将时间特征设定为统一值,对手势的空间特征进行研究,而动态手势则需要将时间和空间两个要素同时参考,以随时间变化的空间特征为属性对手势进行描述。静态手势的研究,可以利用手的关节、指间等特征值进行表示,而动态手势的研究则需要取一段时间内手的各种空间特征的测量序列值进行表示。同时,由于人手具有的自由度较多,运动较为复杂,导致相同的手势动作在不同的人操作时会呈现不同的运动,从而导致特征值的差别。

为了检测手的姿势或形态,可以使用通用分类器或模板匹配器进行识别。当对视频进行手势识别时,由于视频中手势含有轨迹,使其被赋予时间特征,那么就需要相应的技术诸如隐藏马尔可夫模型(HMM)等进行该特征的处理,从而使得动态的手势识别最终转化为静态的手势识别。

目前,作为比较流行的手势识别技术有模板匹配法、特征提取和BP神经网络算法。模板匹配法:作为最接近人本身对事物的识别的方法,模型匹配法是将传感器输入的原始数据与预先存储的模板进行匹配,通过测量两者之间的相似度来完成识别,相应的,模型匹配法需要大量的基础数据作为匹配对象来确保识别率,所以受到噪声、光照等复杂环境影响较大,并且识别速度慢。但是,模板匹配法具有简单、易掌握,普及程度高的优点。特征提取:指通过对输入数据的特征进行提取,并分析转化形成具有实际含义的特征属性,从而形成训练数据库,在对手势图像进行识别时,以训练数据库的特征为基础进行识别。特征提取方法缩小了基础数据的需求量,但依旧容易受到噪声、光照等复杂环境的影响,识别速度较慢。BP神经网络是一种前向传播的多层网络,BP神经网络算法是一种按误差逆传播算法训练的多层前馈网络。它的学习规则是使用最速下降法,通过反向传播来调整网络的权值和阈值,使得网络的误差平方和最小。

本文中结合运用了特征提取法和BP神经网络算法进行战术手势图像的识别,基本实现了较高的识别率同时识别速度较快。

4  需求分析

基于MATLAB的战术手势识别功能的设计实现能很好的提高基层官兵在训练中对手语学习的记忆和掌握。根据不同的战术背景不同的手语需要,结合特战小队在实际任务中可以运用到的手语联络方式进行设计研究,从而建立的手语库能够更好的涵盖实战的各个方面,提高训练的全面性。同时,为训练成果的检验提供了一种更为智能化的方式。

根据基层现状可知,官兵日常训练任务较重,时间安排较满,官兵日常需要背记的条令条例等固化知识较多,思维活跃受到了较大限制,使得官兵在对多变、复杂的手语进行训练记忆时,往往没有较好的效果。故此如何提高训练的质量和效益成为一个关键性问题。而在记忆学中,图像放映式记忆效果显著,通过类似播放电影的方式对手语记忆进行训练,能极大的提高训练的效果,同时,其富有的生动性、形象性能够激发官兵学习热情,促使学习过程中精力更为集中,进一步的提高训练的质量。

基于这些问题,建立一个战术手势识别功能平台是相当有必要的。通过利用MATLAB的各种功能组合设计出一个具备手势识别功能和具有用户使用界面的一个平台,应用于官兵在训练中对手语的记忆,能很好的提高训练的效果和质量,大大降低训练的时间,从而减轻基层官兵的压力。同时也为管理者对所属人员训练情况进行考核提高了平台和条件。

5  战术手势识别框架设计

在对MATLAB的基本操作、原理进行深入学习后,立足于MATLAB高效便捷的特点,使用MATLAB神经网络库以及GUI用户界面做支撑,研究设计了基于MATLAB的图像处理和手势识别功能,该设计总体可以分为手势视频分解、手势图像处理与识别、GUI用户使用界面三个部分,其总体框架如图5-1所示。

图5-1 战术手势识别总体框架

在图5-1中,将基于MATLAB的战术手势识别功能的实现的完整流程进行展示,通过框图的设计,将整个设计划分为手势视频分解、手势图像处理与识别、GUI用户使用界面三个部分的内容,在本小节将针对手势视频分解、手势图像处理与识别进行详细介绍。

6、GUI界面

    

图6-1 读取手势视频后结果

通过读取手势视频并对视频进行的分割呈现,顺利获得了按照本文设定的战术手语所规定的三组手势图像。在获取手势图像后,对获得的手势图像进行图像处理并代入神经网络库进行识别,从而得出了对应的文字识别结果并弹出识别成功对话框。

图6-2 录入视频识别成功

7、核心代码

附录一  功能完整设计与实现代码

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton4 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

load('net.mat');%数据初始化

load('class_name.mat');

sound_dir = 'E:\基于MATLAB的战术手势识别功能的设计与实现\任务\匹配结果数据';

sound_list = dir([sound_dir,'\*.mp3']);

strvalue = {'前方发现敌人,所有人散开','前方敌人弱火力点,进行两侧攻击','发现敌人重火力点,迅速趴下','所有人散开,至前方集合','报告!搜索发现强火力点','敌人已消灭,前方展开搜索'};

re_mat= [123,176,285,914,428,3110];

regc = 0;

Image{1}=getimage(handles.axes1);%图像存入数组

Image{2}=getimage(handles.axes2);

Image{3}=getimage(handles.axes3);

 for index=1:3      

        im =Image{index};%索引数组

        fetuer_arr  = Shape(im,0);

        fetuer_arr = fetuer_arr';

        fetuer_arr(1,:) =(fetuer_arr(1,:)-1)/(4-1);%%特征归一化

        fetuer_arr(2,:) =(fetuer_arr(2,:)-10)/(100-10);%%特征归一化

        fetuer_arr(3,:) =(fetuer_arr(3,:)-1)/(4-1);%%特征归一化

        [result] = net(fetuer_arr);

        [va,ind] = max(result);

        ind = str2double(class_name{ind});

        if(ind~=20)

            regc = ind+regc*10;

        else

            regc = regc*100+ind;

        end

end

   [flag,memindex]  = ismember(regc,re_mat);

   

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton5 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

axes(handles.axes1);%清空图像

cla

axes(handles.axes2);

cla

axes(handles.axes3);

cla

axes(handles.axes4);

cla

set(handles.edit1,'string','');%清空结果

% --- Executes on button press in pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton6 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

[filename,pathname]=uigetfile({'*.*'},'选择视频');

video = [pathname,filename];

obj = VideoReader(video);     %读取视频文件

numFrames = obj.NumberOfFrames;   %视频总的帧数

for y = 1: numFrames

    frame = read(obj,y);

    set(handles.axes4,'HandleVisibility','ON');%打开坐标,方便操作

    axes(handles.axes4);%%使用图像,操作在坐标1

    imshow(frame);                %显示每一帧图片

end

for t = 1: numFrames

    if 5*t<numFrames

        frame = read(obj,5*t);%隔5张保存一张图象

        I=frame;

        %保存每一帧图片

        imwrite(I,strcat('E:\基于MATLAB的战术手势识别功能的设计与实现\任务\匹配结果数据\分解图像\',num2str(t),'.jpg'),'jpg');

    end

end

% msgbox('分解完成','结果');

tic;

load('net.mat');%数据初始化

load('class_name.mat');

sound_dir = 'E:\基于MATLAB的战术手势识别功能的设计与实现\任务\匹配结果数据';

sound_list = dir([sound_dir,'\*.mp3']);

strvalue = {'前方发现敌人,所有人散开','前方敌人弱火力点,进行两侧攻击','发现敌人重火力点,迅速趴下','所有人散开,至前方集合','报告!搜索发现强火力点','敌人已消灭,前方展开搜索'};

re_mat= [123,176,285,914,428,3110];

regc = 0;

sumnum = fix(numFrames/5);%计算保存图像数量

sumnum1 = fix(sumnum/3);

for i = 1

    imageindex1 = (2*i-1)*sumnum1/2;%定位标签

    imageindex2 = (2*(i+1)-1)*sumnum1/2;

    imageindex3 = (2*(i+2)-1)*sumnum1/2;

end

8、参考文献

  1. 王彦超. 图像处理与识别技术的发展及应用分析[J]. 无线互联科技, 2018(13):5-3.
  2. 余胜成编著. 《MATLAB优化算法案例分析与应用》,清华大学出版社,2019.
  3. 江立,阮秋琦. 基于神经网络的手势识别技术研究[J],北京交通大学计算机与信息技术学院,北京100044.2022
  4. 曾芬芳. 基于模糊神经网络的手势识别[J].小型微型计算机系统,2020(7):706—709.
  5. 张珩. 人体手部的建模与分析[J].计算机仿真,2021,15(2):10—13.
  6. 许金鹏,张亚,吕铁钢,马焱. 基于MATLAB的静态手势分割与识别研究[J].  中北大学机电工程学院
  7. 季秀怡. 浅析人工智能中的图像识别技术[J]. 电脑知识与技术, 2016(5X):2-2.
  8. 张新景 王勇 史颖刚. 基于MATLAB GUI的图像处理演示系统[J]. 信息技术与信息化, 2019(05):90-92.
  9. 盛杰诚. 人工智能技术在智慧交通中的应用[J]. 电子制作, 2019(10):36-36.
  10. 王彦超. 图像处理与识别技术的发展及应用分析[J]. 无线互联科技, 2022(13):5-3.
好的,这里是一个基于Matlab手势识别GUI设计代码,可以实现手势的识别和可视化展示。注意,这里只提供代码框架,具体的手势识别算法需要根据实际情况进行编写。 ```matlab function GestureRecognitionGUI() % 创建GUI窗口和控件 fig = figure('Name', 'Gesture Recognition', 'NumberTitle', 'off', 'MenuBar', 'none', 'ToolBar', 'none', 'Position', [200, 200, 600, 400]); axesHandle = axes('Parent', fig, 'Units', 'normalized', 'Position', [0.1, 0.3, 0.8, 0.6]); textHandle = uicontrol('Style', 'text', 'Parent', fig, 'Units', 'normalized', 'Position', [0.1, 0.2, 0.8, 0.1], 'FontSize', 16, 'HorizontalAlignment', 'center'); buttonHandle = uicontrol('Style', 'pushbutton', 'Parent', fig, 'Units', 'normalized', 'Position', [0.4, 0.1, 0.2, 0.1], 'String', 'Start', 'FontSize', 16, 'Callback', @StartGestureRecognition); % 初始化手势识别算法 % TODO % 开始手势识别 function StartGestureRecognition(~, ~) % 设置摄像头或者相机参数 % TODO % 打开摄像头或者相机 % TODO % 循环读取图像并进行处理 while(1) % 读取一帧图像 % TODO % 对图像进行预处理 % TODO % 提取手部特征 % TODO % 进行手势识别 % TODO % 更新GUI界面 % TODO end end end ``` 这个代码中,首先创建了一个GUI窗口和控件,包括一个用于显示图像的axes控件、一个用于显示识别结果的text控件和一个用于启动手势识别的button控件。在StartGestureRecognition回调函数中,可以设置摄像头或相机参数,打开摄像头或相机,循环读取图像并进行处理,最后更新GUI界面。具体的图像处理手势识别算法需要根据实际情况进行编写。在更新GUI界面时,可以使用set函数来更新axes和text控件的内容,如: ```matlab set(axesHandle, 'HandleVisibility', 'on'); imshow(image, 'Parent', axesHandle); set(axesHandle, 'HandleVisibility', 'off'); set(textHandle, 'String', gestureName); ``` 这里的image是处理后的图像,gestureName是识别出的手势名称。通过这个代码框架,可以实现基于Matlab手势识别GUI设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值