dsp考试三种手势识别报告

合集下载

手势识别综述

手势识别综述

彩色图像分割
灰度图像大多通过算子寻找边缘和 区域生长融合来分割图像;彩色图 像增加了色彩信息,可以通过不同 的色彩值来分割图像
三维OTSU算法
计算复杂度较高,但是可以在三维 空间对图像进行分割。现在衍生出 较多改进算法(分解算法、基于最 佳熵算法等)
聚类算法
直接对RGB图像进行聚类运算,但 是计算开销较大
3、对于ResNet的改进网络(DenseNet、ResNeXt)均相对于ResNet表现出较好的性能和较低的 开销,下一步对其进行学习。
谢谢观看
通过分析手势,获得手势形状特征及运动 轨迹信息
01
02
03
基于 单目 立体 视觉 视觉 视觉
手势分割
使用图像采集设备获得手势图像,转换为 手势平面模型/立体模型
手势识别
手势识别
将模型参数空间轨迹分类 到该空间某个子集的过程
02
静态手势识别
动态手势识别可以通过帧 形式转换为静态手势识别
任务
04
隐马尔科夫模型
立体视觉分割算法比较
03 手 势 分 类 算 法 手势识别的最终目标就是实现对手势的正确分类来自分类算法HMM
双重随机过程,底层是马尔可夫概率状态过 程;从底层状态到表层观察值的随机过程。 通过已知分类样本,挖掘分类样本中隐藏的 信息。
KNN
计算待分类样本与已知类别的训练样本之间 的距离,找到距离与待分类样本数据最近的k 个邻居;再根据这些邻居所属的类别来判断 待分类样本数据的类别。






多点触控
触控式交互推动了移动 互联网发展
新型人机交互模式
实现更为自然化的人机交互,人可以 在虚拟环境中体验真实物理世界般的 交互体验

手势识别技术

手势识别技术

手势识别技术手势识别技术,由简单粗略的到复杂精细的,大致可以分为三个等级:二维手型识别、二维手势识别、三维手势识别。

在具体讨论手势识别之前,我们有必要先知道二维和三维的差别:二维只是一个平面空间,我们可以用(X坐标,Y坐标)组成的坐标信息来表示一个物体在二维空间中的坐标位置,就像是一幅画出现在一面墙上的位置。

三维则在此基础上增加了“深度”(Z坐标)的信息,这是二维所不包含的。

这里的“深度”并不是咱们现实生活中所说的那个深度,这个“深度”表达的是“纵深”,理解为相对于眼睛的“远度”也许更加贴切。

就像是鱼缸中的金鱼,它可以在你面前上下左右的游动,也可能离你更远或者更近。

前两种手势识别技术,完全是基于二维层面的,它们只需要不含深度信息的二维信息作为输入即可。

就像平时拍照所得的相片就包含了二维信息一样,我们只需要使用单个摄像头捕捉到的二维图像作为输入,然后通过计算机视觉技术对输入的二维图像进行分析,获取信息,从而实现手势识别。

而第三种手势识别技术,是基于三维层面的。

三维手势识别与二维手势识别的最根本区别就在于,三维手势识别需要的输入是包含有深度的信息,这就使得三维手势识别在硬件和软件两方面都比二维手势识别要复杂得多。

对于一般的简单操作,比如只是想在播放视频的时候暂停或者继续放映,二维手势也就足够了。

但是对于一些复杂的人机交互,比如玩游戏或者应用在VR(虚拟现实)上,三维手势实在是居家旅行必备、舍我其谁的不二之选。

手势识别分类二维手型识别二维手型识别,也可称为静态二维手势识别,识别的是手势中最简单的一类。

这种技术在获取二维信息输入之后,可以识别几个静态的手势,比如握拳或者五指张开。

“静态”是这种二维手势识别技术的重要特征,这种技术只能识别手势的“状态”,而不能感知手势的“持续变化”。

举个例子来说,如果将这种技术用在猜拳上的话,它可以识别出石头、剪刀和布的手势状态。

但是对除此之外的手势,它就一无所知了。

所以这种技术说到底是一种模式匹配技术,通过计算机视觉算法分析图像,和预设的图像模式进行比对,从而理解这种手势的含义。

基于计算机视觉的手势识别的开题报告

基于计算机视觉的手势识别的开题报告

基于计算机视觉的手势识别的开题报告一、研究背景和意义:随着计算机图像技术的发展和应用领域的扩大,手势识别技术作为计算机视觉领域中的一个重要分支愈发受到人们的重视。

手势识别的目的是通过计算机识别人体手势的动作,从而实现人机交互的过程。

手势识别技术广泛应用于多媒体交互、智能家居、虚拟现实等领域。

基于计算机视觉的手势识别系统包括数据采集、手势识别及应用三个步骤。

手势数据的采集方式主要有两种,一种是使用摄像头采集静态图像数据,另一种是使用传感器采集动态数据。

手势识别技术针对性强,属于一种高度复杂的计算机视觉问题,因此需要结合深度学习算法优化手势识别模型,提高识别精度。

二、研究目的:本研究旨在分析基于计算机视觉的手势识别技术,构建基于深度学习的手势识别系统,并对其进行优化,提高识别准确率。

同时,研究如何将该技术应用于多媒体交互、智能家居等领域。

三、研究内容:1. 手势识别技术的原理以及常用的手势识别算法的分析及比较。

2. 基于深度学习的手势识别系统构建,包括数据集的构建、神经网络的建立、训练和测试等。

3. 优化手势识别系统,包括调整神经网络结构、优化训练过程和使用传感器等手段对系统进行优化。

4. 将手势识别技术应用于多媒体交互、智能家居等领域,提高交互方式的多样性和智能性。

四、预期成果:本研究主要预期获得以下成果:1. 对手势识别技术的原理及其常用算法进行详细的分析和比较,为后续深度学习算法模型的构建提供必要的理论支撑。

2. 构建基于深度学习的手势识别系统,并对该系统进行优化,提高识别准确率。

3. 实现将手势识别技术应用于多媒体交互、智能家居等领域,并取得一定的应用效果。

五、研究方法:本研究将采用以下方法:1. 文献综述法:通过查阅相关文献资料,了解手势识别技术的发展历程、理论基础和常用算法,并进行分析和比较。

2. 数据采集法:使用摄像头进行红外线数据采集,构建手势识别数据集。

3. 深度学习算法构建法:基于Python语言使用TensorFlow深度学习库构建手势识别模型。

手势识别综述

手势识别综述

手势识别综述摘要: 手势是一种自然而直观的人际交流模式,手势识别是实现新一代人机交互所不可缺少的一项关键技术。

然而,由于手势本身具有的多样性、多义性、以及时间和空间上的差异性等特点,加之人手是复杂变形体及视觉本身的不适定性,因此手势识别是一个极富挑战性的多学科交叉研究课题。

这里主要针对手势识别中涉及的几个关键问题进行总结。

关键词: 手势识别; 人机交互; 计算机视觉1、引言一般来说,键盘和鼠标是人机交互的主要媒介,然而在人机交互频繁的应用领域中,这种接口却成了一种瓶颈,因为这种交互不是一种自然的模式。

长时间以来,人们一直尝试着寻找一种人机交互的自然方法。

其中人体姿势是一种好的表达方法,它有很多形式,比如手势、身体姿势、面部表情等。

这里我们主要讨论通过手势进行的人机交互。

手势对人们来说是一种非语言的交流方法。

手势主要分为两种:操控手势和交际手势[1]。

在人机交互系统中,操控手势的一种典型应用就是在二维和三维的虚拟环境中来操控物体。

交流手势主要是指在自然环境中伴随人们自然对话的自由形式手势。

手势相对于语言来说是一种表达人们想法的单独的补充模式。

在对话中与手势相关联的信息是一种语句的时间和空间结构,可以用机器来提取它们[2]。

最早期的解决手势识别的途径是利用机械手套装置来直接测量手的姿态和关节的角度[3]。

然而这种基于手套的方法没有进一步的发展,因为与这些手套设备相连的电缆只能把使用者限制在一个小的工作区域内。

另一方面,这种手套设备的价格比较昂贵,这也限制了它的广泛应用。

近些年来,基于计算机视觉的的方法提供了一种成本较低的可以获取和理解手势的方法,而且可以最大限度地减少对使用者的限制,这种方法也是本文讨论的重点。

在基于计算机视觉的方法中,通常的做法就是把手势识别问题看成模式识别问题来对待。

通过相机来获取图像或视频,再把它们分解成特征集,然后用这些特征集与预先定义好的模式进行匹配。

其中模式就是一种手势的特征表达,匹配就是对特征集进行分类。

手势识别行业报告

手势识别行业报告

手势识别行业报告随着科技的不断发展,手势识别技术已经成为了人机交互界面的重要组成部分。

手势识别技术是一种通过识别人体动作来控制设备的技术,它可以让人们通过简单的手势来完成各种操作,如控制电视、手机、电脑等。

手势识别技术已经在各个领域得到了广泛的应用,包括智能家居、医疗健康、教育培训、娱乐游戏等。

本报告将对手势识别行业的发展现状、市场规模、技术趋势等进行分析,为相关行业提供参考和借鉴。

一、手势识别技术的发展现状。

手势识别技术最早可以追溯到20世纪80年代,当时主要用于计算机图形学和虚拟现实领域。

随着计算机视觉、模式识别、机器学习等技术的不断进步,手势识别技术也得到了快速发展。

目前,手势识别技术已经可以实现对人体各种复杂动作的识别,如手势、面部表情、身体姿势等。

同时,手势识别技术还可以结合语音识别、眼动追踪等技术,实现更加智能化的人机交互。

二、手势识别行业的市场规模。

根据市场调研机构的数据显示,手势识别行业的市场规模在过去几年呈现出快速增长的趋势。

据统计,2019年全球手势识别市场规模达到了100亿美元,预计到2025年将达到200亿美元。

其中,智能手机、智能电视、智能家居等消费电子产品是手势识别技术的主要应用领域,占据了市场份额的大部分。

此外,医疗健康、教育培训、娱乐游戏等领域也是手势识别技术的重要应用市场。

三、手势识别技术的技术趋势。

随着人工智能、深度学习等技术的不断发展,手势识别技术也在不断升级和完善。

未来,手势识别技术将更加智能化和个性化,可以实现对个体的特定手势的识别和理解。

同时,手势识别技术还将结合虚拟现实、增强现实等技术,实现更加沉浸式的交互体验。

此外,随着5G、物联网等技术的普及,手势识别技术还将更加便捷和高效,为人们的生活带来更多的便利。

四、手势识别行业的发展趋势。

手势识别技术的发展离不开产业链的不断完善和创新。

未来,手势识别行业将在硬件设备、算法软件、应用场景等方面持续发力,推动技术的进步和应用的拓展。

三种简单手势识别

三种简单手势识别
手势主要分为静态手势和动态手势两种,动态手势能够看作是连续旳 静态手势序列。动态手势具有丰富和直观旳体现能力,与静态手势结合 在一起,能发明出更丰富旳语义。利用动态手势辨认构建新型旳交互界 面,是新一代旳人机交互界面对输入方式自然性旳要求,能够弥补老式 交互方式旳不足。基于视觉和手势辨认研究正处于蓬勃发展旳阶段,仍 存着旳许多值得研究旳问题。研究基于视觉旳动态手势辨认对于构建愈 加挚友旳人机交互界面很有意义。
三、手势辨认
3.1、设计思绪
常用旳静态手势特征有轮廓、位置、面积、分 布等。
本文主要利用对手势面积大小旳辨认来到达手 势辨认旳目旳,这里直接比较手型面积有交大困难。 在手势旳定位与分割时,产生了手势区域旳方框, 我们利用这个面积来替代手势旳面积,具有很好旳 效果。当用摄像头采集到手势时,先将采集到旳手 势与采集到旳手势库进行比较,比较得出与摄像头 所得手势较吻合旳旳手势,在屏幕上显示有关手势 旳名称。
简朴手势辨认
一、背景
伴随计算机旳发展,人机交互技术由老式旳鼠标键盘 时代发展到了以语音输入、动作辨认等技术为代表旳自然交 互时代n1。尤其是视觉计算技术旳发展,使计算机取得了初 步视觉感知旳能力,能“看懂”顾客旳动作。手势辨认作为 一种直观自然旳输入方式,把人们从老式接触性旳输入装置 中解放出来,能够以一种更自然旳方式与计算机交互,使计 算机界面变得愈加易‘引。
2.3、手势建模
在手势辨认框架中,手势模型是一种最 基本旳部分。根据不同旳应用背景,手势辨 认采用旳模型会有不同,而对于不同旳手势 模型,采用旳手势检测与跟踪算法、特征提 取、辨认技术也会有差别。手势建模主要分 为基于表观旳手势模型与基于三维旳手势模 型。
2.4、手势特征提取
手势特征旳提取是与手势模型亲密有关旳,不 同旳手势模型会有不同有手势特征。例如基于模型 旳手势模型有手旳每个关节旳状态特征,基于表观 模型旳手势特征是轮廓特征、位置特征等。静态手 势辨认和动态于势辨认旳特征也不同,静态手势旳 特征只是描述旳手旳静态信息,例如轮廓、面积等。 动态手势特征是连续旳静态特征序列。

手势识别 调研报告

手势识别调研报告手势识别是一种基于图像处理和机器学习技术的人机交互技术,它通过识别和理解人体姿态、动作来实现人机交互。

手势识别技术已经在各个领域得到广泛应用,包括游戏、虚拟现实、智能家居、智能手机等。

本调研报告旨在介绍手势识别技术的原理、应用领域以及未来发展趋势。

手势识别技术的原理主要包括图像采集、特征提取和分类识别三个步骤。

首先,通过摄像头等设备采集人体的图像或视频。

然后,从采集到的图像中提取出与手势相关的特征,如手指的位置、运动轨迹等。

最后,利用机器学习算法对这些特征进行分类和识别,从而实现对手势的识别和理解。

手势识别技术在游戏领域得到了广泛应用。

传统的游戏操作需要使用游戏手柄或键盘鼠标等设备,但手势识别技术可以通过识别玩家的手势动作来实现游戏操作,使得游戏更加直观、自然。

例如,通过手势识别技术,玩家可以通过手势打击、投掷物品等来控制游戏角色的行动,增加了游戏的乐趣和挑战性。

手势识别技术还可以应用于虚拟现实领域。

虚拟现实是一种通过计算机技术模拟出的全息感觉的环境,而传统的虚拟现实设备需要使用手柄或头盔来实现交互操作。

但是,手势识别技术可以通过识别用户的手势动作来实现虚拟现实设备的交互操作,使得用户更加方便、自由地操作虚拟现实环境。

此外,手势识别技术还可以应用于智能家居领域。

智能家居通过将家庭设备和网络连接起来,实现智能化的控制和管理,提高生活的便捷性和舒适性。

而手势识别技术可以通过识别用户的手势动作来实现对家庭设备的控制。

例如,通过手势识别技术,用户可以通过手势控制灯光的开关、调节家庭影音设备的音量等,使得家庭设备的控制更加方便和智能化。

未来,手势识别技术还有许多发展的机会和挑战。

一方面,随着计算机硬件性能的不断提升和计算机视觉技术的不断发展,手势识别技术的准确性和实时性将会进一步提高。

另一方面,随着人工智能和深度学习技术的不断发展,手势识别技术的算法和模型将会变得更加复杂和智能化,从而提升手势识别技术的性能和应用范围。

基于DSP的手势识别电视遥控器设计

判断使 用 者手 部动 作 的 方法 遥控 电视 机 , 使 用 者 在 摄 像 头拍摄 范 围 内按 照 规 定 的摆 放 方 式 移 动 手 部 , 就能够 遥 控 电视 机 进 行 音 量 增 减 或 频 道 变 换 等 操 作 。设 计 使人们 对 电视 机 的 遥控 操 作 更 加 便 捷 、 人 性化 , 丰 富大众 的 日常生 活 。

要 由于传统 电视机遥控器 的按键操作 比较机械 且缺 乏娱乐 性 , 设 计 了一种 以 D S P 2 8 1 2为核心 的手势 识别 算法。通过
将用户手势运动的信息 转换成相应 的红 外信 号, 从而 实现手势 遥控 电视机更换 频道 和调节 音量 的 目的。该 系统主 要 由双端 口R A M 通信 的双 D S P并行处理器、 C MO S数 字摄像 头、 红外遥控模块、 上位机调试 软件和 以太 网通信模块 组成 。实验测试表
2 0 1 3年 7月 2 9日收到 , 1 O月 2 1日修改
后进行相关的图像处理 。在设计 工作状态时 , 使用 双端 口中断判优方式 , 数据传递采用握手的通信模 式 。当 D S P 1向双端 口 R A M 中写 完 数 据 之后 , 通过 中断握手 的方式 , 通知 D S P 2读取数据 。D S P 2要求 数据 时 , 也会 以 同样 的方 式 通 知 D S P 1 , 从 而 实 现 双 D S P高速有规律地 数据传递。双端 口 R A M与两个
第1 4卷
第 6期

2 0 1 4年 2月







V0 1 . 1 4 No . 6 F e b .2 0l 4
1 6 7 1 —1 8 1 5 ( 2 0 1 4 1 0 6 — 0 1 8 4 — 0 6

调研报告 手势识别

调研报告手势识别手势识别是一种通过识别人类手部动作和姿势的技术,将其转化为特定的命令或操作的方式。

随着智能手机、智能电视以及虚拟现实等智能设备的兴起,手势识别技术越来越受到关注。

本调研报告旨在探讨手势识别技术的应用现状和发展趋势。

为了达到这个目的,我们对手势识别技术的定义、原理、应用领域以及未来发展进行了深入研究。

首先,我们定义了手势识别技术。

手势识别技术主要通过摄像头或其他传感器捕捉和分析手势动作。

这些动作可以是简单的手势,如挥手,也可以是复杂的手势,如比划图形。

接下来,我们研究了手势识别技术的原理。

手势识别技术依赖于计算机视觉、机器学习和模式识别等相关领域的理论和算法。

通过使用这些算法,可以让系统学习和解析手势动作,进而识别特定的手势。

然后,我们分析了手势识别技术的应用领域。

手势识别技术已经在许多领域得到广泛应用。

其中,最常见的领域包括智能手机、智能电视和虚拟现实。

在智能手机上,手势识别技术可以帮助用户进行手势操作,例如拍照和滑动屏幕。

在智能电视上,通过手势识别技术,用户可以使用手势来控制电视的开关、音量和频道等功能。

在虚拟现实领域,手势识别技术可以用于交互式游戏和虚拟场景控制。

最后,我们探讨了手势识别技术的未来发展趋势。

随着人工智能和深度学习技术的快速发展,手势识别技术将变得更加智能化和精确化。

未来,手势识别技术有望应用于更多领域,如医疗保健、教育和交通等。

此外,随着硬件设备的不断升级和改进,手势识别技术的性能和稳定性也将得到显著提高。

综上所述,手势识别技术在智能设备的应用领域具有巨大的潜力。

通过进一步研究和发展,手势识别技术将为人们带来更加智能化和便捷的交互体验。

dsp实验报告 2

DSP图像处理实验报告组员:张海星通信1107班陈淑菁通信1103班手势识别1.题目分析不同的手势出现在屏幕上会显示手势的名字,找出不同手势在屏幕上显示的特点,用这个特点来区分出手势的名称,同时将名称显示在屏幕的左下角。

2.步骤:(1)找特征:用运肤色检测的程序调试出来的显示屏幕上图像的特征我们发现肤色的面积大小会随着不同手势透出的皮肤面积的大小而变化,因此我们利用面积的大小来判断不同的手势,并将其名称显示在屏幕的左下角。

(2)采集图像:我们组用石头和剪刀两个手势。

首先用loop2的显示采集两个手势的图像。

在save data 中保存图像的数据,从程序中找到图像的首地址,保存数据的首地址为:OX80000000,图像的大小设置为720*288/4。

然后利用matlab程序读图像并计算框的面积大小的值。

读图程序:% dat文件是由CCS保存的数据文件% dat文件中每个像素用8bit表示,% 0x245A3654表示第一个像素的值为0x54;第二个像素的值为0x36% 第三个像素的值为0x5A;第四个像素的值为0x24% 本例以图像大小为640*240,请根据你的实际做修改% 在使用本程序前请手动删除dat文件的第一行clc;clear all;close all;imagedata=zeros(720,288);% ------------------------------- 低温---------------------------------------I = importdata('C:\Documents and Settings\Administrator\桌面\s1.dat');[M,N] = size(I);for i=1:720*288/4a=cell2mat(I(i));imagedata(i*4) = hex2dec(a(3:4));imagedata(i*4-1) = hex2dec(a(5:6));imagedata(i*4-2) = hex2dec(a(7:8));imagedata(i*4-3) = hex2dec(a(9:10));endimagedata = uint8(imagedata');imshow(imagedata,[0,720])用matlab计算面积值的程序:将图像中手势出现的范围截框,在算出像素点的值就是面积大小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单手势识别技术课程名称:DSP数字图像处理日期:2013年12月20号组员:任目录一、背景 (3)二、手势识别概述 (3)2.1 手势识别的概念 (3)2.2 手势识别流程 (3)2.3、手势建模 (3)2.4、手势特征提取.................................................................................. 错误!未定义书签。

三、手势识别 (4)3.1、设计思路 (4)3.2、手势采集 (4)3.2、相关程序 (5)3.4、识别结果.......................................................................................... 错误!未定义书签。

四、实验总结 (20)、简单手势识别一、背景随着计算机的发展,人机交互技术由传统的鼠标键盘时代发展到了以语音输入、动作识别等技术为代表的自然交互时代n1。

特别是视觉计算技术的发展,使计算机获得了初步视觉感知的能力,能“看懂”用户的动作。

手势识别作为一种直观自然的输入方式,把人们从传统接触性的输入装置中解放出来,可以以一种更自然的方式与计算机交互,使计算机界面变得更加易‘引。

手势主要分为静态手势和动态手势两种,动态手势可以看作是连续的静态手势序列。

动态手势具有丰富和直观的表达能力,与静态手势结合在一起,能创造出更丰富的语义。

利用动态手势识别构建新型的交互界面,是新一代的人机交互界面对输入方式自然性的要求,可以弥补传统交互方式的不足。

基于视觉和手势识别研究正处于蓬勃发展的阶段,仍存着的许多值得研究的问题。

研究基于视觉的动态手势识别对于构建更加好友的人机交互界面很有意义。

二、手势识别概述2.1、手势识别的概念手势是姿势的一个子集,姿势这个概念没有精确的定义。

一般认为,手势概念经过人的手转化为的手势动作,观察者看到的是手势动作的图像。

手势的产生过程如图2-1所示。

图2-1 手势的产生过程手势识别的过程则找一个从图像V到概念动作G的变换而,如图2-2所示。

-图2-2 手势识别的过程2.2、手势识别流程手势识别流程包手势图像获取、手势分割、手势特征提取、手势识别四大部分嘲,如图2-3所示。

图2-3 手势识别流程2.3、手势建模在手势识别框架中,手势模型是一个最基本的部分。

根据不同的应用背景,手势识别采用的模型会有不同,而对于不同的手势模型,采用的手势检测与跟踪算法、特征提取、识别技术也会有差别。

手势建模主要分为基于表观的手势模型与基于三维的手势模型。

基于表观的手势建模是一种二维建模,从二维平面观察得到的平面图像信息描述于的特征。

基于表观的手势模型主要包括基于颜色的模型与基于轮廓的模型两种。

基于颜色的手势模型是把手势图像看作像素颜色的集合,通过提取手部的颜色的特征来描述手势。

基于颜色的手势模型的常用特征是颜色直方图。

基于轮廓的手势模型是把手看作一个轮廓,通过提取手部图像中手的轮廓的几何特征来描述手势。

2.4、手势特征提取手势特征的提取是与手势模型密切相关的,不同的手势模型会有不同有手势特征。

例如基于模型的手势模型有手的每个关节的状态特征,基于表观模型的手势特征是轮廓特征、位置特征等。

静态手势识别和动态于势识别的特征也不同,静态手势的特征只是描述的手的静态信息,例如轮廓、面积等。

动态手势特征是连续的静态特征序列。

三、手势识别3.1、设计思路常用的静态手势特征有轮廓、位置、面积、分布等。

本文主要利用对手势面积大小的识别来达到手势识别的目的,这里直接比较手型面积有交大困难。

在手势的定位与分割时,产生了手势区域的方框,我们运用这个面积来代替手势的面积,具有较好的效果。

当用摄像头采集到手势时,先将采集到的手势与采集到的手势库进行比较,比较得出与摄像头所得手势较吻合的的手势,在屏幕上显示相关手势的名称。

3.2、手势采集对于手势识别,首先得要求有用来对比识别的手势,我们采集的简单的手势有以下几种:拳头、布、剪刀。

如下图所示:通过对采集手势的比较,我们发现,各手势之间有着一个明显的区别:各手势之间面积存在较大差别。

3.3、相关程序本文的识别程序是在“肤色识别”的基础上进行一定修改形成的。

通过读程序,我们发现原程序较慢,我们删除了一部分无关程序,提高了识别的速度。

程序改变如下:/********************************************************************//* Copyright 2004 by SEED Incorporated. *//* All rights reserved. Property of SEED Incorporated. *//* Restricted rights to use, duplicate or disclose this code are *//* granted through contract. *//* *//********************************************************************/#include <csl.h>#include <csl_emifa.h>#include <csl_i2c.h>#include <csl_gpio.h>#include <csl_irq.h>#include <csl_chip.h>#include <csl_dat.h>#include "iic.h"#include "vportcap.h"#include "vportdis.h"#include "sa7121h.h"#include "TVP51xx.h"#include "seeddm642.h"EMIFA_Config Seeddm642ConfigA ={0x00052078,/*gblctl EMIFA(B)global control register value *//*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/ 0xffffffd3,/*cectl0 CE0 space control register value*//*将CE0空间设为SDRAM*/0x73a28e01,/*cectl1 CE1 space control register value*//*Read hold: 1 clock;MTYPE : 0000,选择8位的异步接口Read strobe :001110;14个clock宽度TA:2 clock; Read setup 2 clock;Write hold :2 clock; Write strobe: 14 clockWrite setup :7 clock-- ---------------\ 14c /1c\----------------/ */0x22a28a22, /*cectl2 CE2 space control register value*/0x22a28a42, /*cectl3 CE3 space control register value*/0x57115000, /*sdctl SDRAM control register value*/0x0000081b, /*sdtim SDRAM timing register value*/0x001faf4d, /*sdext SDRAM extension register value*/0x00000002, /*cesec0 CE0 space secondary control register value*/0x00000002, /*cesec1 CE1 space secondary control register value*/0x00000002, /*cesec2 CE2 space secondary control register value*/0x00000073 /*cesec3 CE3 space secondary control register value*/ };I2C_Config SEEDDM642IIC_Config = {0, /* master mode, i2coar;采用主模式*/0, /* no interrupt, i2cimr;只写,不读,采用无中断方式*/(20-5), /* scl low time, i2cclkl; */(20-5), /* scl high time,i2cclkh; */1, /* configure later, i2ccnt;*/0, /* configure later, i2csar;*/0x4ea0, /* master tx mode, *//* i2c runs free, *//* 8-bit data + NACK *//* no repeat mode */(75-1), /* 4MHz clock, i2cpsc */};CHIP_Config SEEDDM642percfg = {CHIP_VP2+\CHIP_VP1+\CHIP_VP0+\CHIP_I2C};I2C_Handle hSeeddm642i2c;int portNumber;/////////////////////int gao;int kuang;int mianji;/////////////////////extern SA7121H_ConfParams sa7121hPAL[45];extern SA7121H_ConfParams sa7121hNTSC[45];Uint8 vFromat = 0;Uint8 misc_ctrl = 0x6D;Uint8 output_format = 0x47;/*显示部分*/const unsigned char an[]={/*-------------------------------*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*布*/const unsigned char ran[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00, 0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00, 0x0F,0x80,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00, 0x00,0x00,0x1E,0x00,0x00,0x40,0x00,0x00,0x1C,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00, 0x01,0xF0,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00, 0x70,0x00,0x00,0x00,0x00,0x00,0xF0,0x70,0x00,0x00,0x00,0x00,0xE0,0x7C,0x00,0x00, 0x00,0x01,0xC0,0x78,0x00,0x00,0x00,0x01,0xC0,0x30,0x00,0x00,0x00,0x03,0x80,0x30, 0x00,0x00,0x00,0x07,0x80,0x30,0x03,0x00,0x00,0x07,0xFF,0xFF,0xFF,0x80,0x00,0x0F, 0xFF,0xFF,0xFF,0xC0,0x00,0x1F,0x80,0x30,0x07,0x00,0x00,0x1B,0x80,0x30,0x07,0x00,0x07,0x00,0x01,0xC3,0x80,0x30,0x07,0x00,0x03,0x83,0x80,0x30,0x07,0x00,0x07,0x03, 0x80,0x30,0x07,0x00,0x0C,0x03,0x80,0x30,0x07,0x00,0x18,0x03,0x80,0x30,0x07,0x00, 0x30,0x03,0x80,0x30,0x07,0x00,0x00,0x03,0x80,0x30,0x07,0x00,0x00,0x03,0x80,0x30, 0x07,0x00,0x00,0x03,0x80,0x30,0x07,0x00,0x00,0x03,0x80,0x30,0x07,0x00,0x00,0x03, 0x80,0x31,0xFF,0x00,0x00,0x03,0x80,0x30,0x7F,0x00,0x00,0x03,0x80,0x30,0x1E,0x00, 0x00,0x03,0x80,0x70,0x0C,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x78, 0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00, 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*刀*/const unsigned char kong[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,0xFF,0xE0, 0x01,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x0F,0x00,0x01,0xC0,0x00,0x00,0x0F,0x00, 0x01,0xC0,0x00,0x00,0x0F,0x00,0x01,0xC0,0x00,0x00,0x0F,0x00,0x01,0xC0,0x00,0x00, 0x0E,0x00,0x01,0xC0,0x00,0x00,0x0E,0x00,0x01,0xC0,0x00,0x00,0x0E,0x00,0x01,0xC0, 0x00,0x00,0x0E,0x00,0x03,0xC0,0x00,0x00,0x0E,0x00,0x03,0xC0,0x00,0x00,0x0E,0x00, 0x03,0xC0,0x00,0x00,0x0E,0x00,0x03,0xC0,0x00,0x00,0x1E,0x00,0x03,0xC0,0x00,0x00, 0x1C,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x03,0x80, 0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x03,0x80,0x00,0x00,0x38,0x00, 0x03,0x80,0x00,0x00,0x38,0x00,0x03,0x80,0x00,0x00,0x78,0x00,0x03,0x80,0x00,0x00, 0x70,0x00,0x03,0x80,0x00,0x00,0xF0,0x00,0x03,0x80,0x00,0x00,0xE0,0x00,0x03,0x80, 0x00,0x01,0xE0,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x07,0x80,0x00,0x03,0x80,0x00, 0x07,0x80,0x00,0x07,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E, 0x00,0x00,0x0F,0x00,0x00,0x1C,0x00,0x3C,0x0F,0x00,0x00,0x78,0x00,0x1F,0xFE,0x00, 0x00,0xF0,0x00,0x03,0xFE,0x00,0x01,0xC0,0x00,0x01,0xFC,0x00,0x07,0x80,0x00,0x00, 0xF8,0x00,0x0E,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*无*/const unsigned char hu[]={/*---------------无----------------*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x03,0xFF, 0xFF,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x03,0x80,0x00,0x00, 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80, 0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00, 0x07,0x80,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, 0x00,0x00,0x07,0x00,0x00,0x80,0x00,0x00,0x07,0x00,0x01,0xC0,0x00,0x00,0x07,0x00, 0x03,0xE0,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00, 0x07,0x70,0x00,0x00,0x00,0x00,0x0F,0x70,0x00,0x00,0x00,0x00,0x0E,0x70,0x00,0x00, 0x00,0x00,0x0E,0x70,0x00,0x00,0x00,0x00,0x0E,0x70,0x00,0x00,0x00,0x00,0x1E,0x70, 0x00,0x00,0x00,0x00,0x1C,0x70,0x00,0x00,0x00,0x00,0x1C,0x70,0x00,0x00,0x00,0x00, 0x3C,0x70,0x00,0x00,0x00,0x00,0x38,0x70,0x00,0x00,0x00,0x00,0x78,0x70,0x00,0x00,0x00,0x20,0x00,0x01,0xC0,0x70,0x00,0x20,0x00,0x03,0xC0,0x70,0x00,0x30,0x00,0x07, 0x80,0x70,0x00,0x30,0x00,0x0F,0x00,0x70,0x00,0x30,0x00,0x1C,0x00,0x70,0x00,0x78, 0x00,0x38,0x00,0x78,0x00,0x7C,0x00,0xF0,0x00,0x7F,0xFF,0xFC,0x03,0xC0,0x00,0x3F, 0xFF,0xF8,0x07,0x00,0x00,0x1F,0xFF,0xE0,0x1C,0x00,0x00,0x00,0x00,0x00,0x30,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*拳*/const unsigned char meng[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x00,0x18,0x03,0xC0,0xC0,0x00,0x00,0x1E,0x07,0xC1,0xE0,0x00,0x00,0x0F, 0x07,0x81,0xF0,0x00,0x00,0x07,0x87,0x83,0xC0,0x00,0x00,0x03,0x87,0x03,0x80,0x00, 0x00,0x03,0x8F,0x06,0x00,0x00,0x00,0x03,0x8F,0x0C,0x0C,0x00,0x00,0x00,0x0E,0x08, 0x1E,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xC0,0x1E,0x00,0x00,0x00,0x00,0x00, 0x1C,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0xE0,0x00,0x00,0x78,0x00,0x01,0xF0, 0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x0C,0x00,0xF0,0x07,0x00,0x00,0x00,0x01,0xE0,0x03, 0x00,0x00,0x00,0x03,0xC0,0x01,0xC0,0x00,0x00,0x07,0x00,0x06,0xE0,0x00,0x00,0x0E, 0x00,0x3F,0x78,0x00,0x00,0x3C,0x03,0xFF,0xBE,0x00,0x00,0x70,0xFF,0xFF,0x9F,0xE0, 0x01,0xE7,0xFF,0x80,0x07,0xFC,0x07,0x80,0x03,0x80,0x03,0xF0,0x1E,0x00,0x03,0x80, 0x00,0xE0,0x30,0x00,0x03,0x80,0x20,0x00,0x00,0x00,0x03,0x80,0x70,0x00,0x00,0x3F, 0xFF,0xFF,0xF8,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x03,0x80,0x00,0x00, 0x00,0x00,0x03,0x80,0x00,0xC0,0x00,0x00,0x03,0x80,0x01,0xE0,0x1F,0xFF,0xFF,0xFF, 0xFF,0xF0,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00, 0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00, 0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x00,0x3F,0x80, 0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*B*/const unsigned char chun[]={/*-------------------------------*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };// 地址为0 for cvbs port1,选择复合信号做为输入Uint8 input_sel = 0x00;/*地址为0xf,将Pin27设置成为CAPEN功能*/Uint8 pin_cfg = 0x02;/*地址为1B*/Uint8 chro_ctrl_2 = 0x14;/*图像句柄的声明*/VP_Handle vpHchannel0;VP_Handle vpHchannel1;VP_Handle vpHchannel2;/*确定图像的参数*/int numPixels = 720;//每行720个像素int numLines = 576;//每帧576行(PAL)/*采集与显示缓冲区的首址*/Uint32 capYbuffer = 0x80000000;Uint32 capCbbuffer = 0x800675c0;Uint32 capCrbuffer = 0x8009b0a0;//Uint32 capCbbuffer = 0x6190;//Uint32 capCrbuffer = 0x6190;Uint32 disYbuffer = 0x80100000;Uint32 disCbbuffer = 0x801675c0;Uint32 disCrbuffer = 0x8019b0a0;Uint32 tmpYbuffer = 0x80200000;Uint32 tmpCbbuffer = 0x802675c0;Uint32 tmpCrbuffer = 0x8029b0a0;Uint32 dstYbuffer = 0x80300000;/*图像格式标志*/Uint8 NTSCorPAL = 0;extern far void vectors();extern volatile Uint32 capNewFrame;extern volatile Uint32 disNewFrame;void pis_name(int init_lie, int init_hang,int wenzi);/*此程序可将四个采集口的数据经过Video Port0送出*/void main(){Uint8 addrI2C;int i,j,n;// int maxrow;int pixelnum,curnum;int begX,endX,begY,endY;/*-------------------------------------------------------*//* perform all initializations *//*-------------------------------------------------------*//*Initialise CSL,初始化CSL库*/CSL_init();CHIP_config(&SEEDDM642percfg);/*----------------------------------------------------------*//*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间注,DM642支持的是EMIFA,而非EMIF*/EMIFA_config(&Seeddm642ConfigA);/*----------------------------------------------------------*//*中断向量表的初始化*///Point to the IRQ vector tableIRQ_setVecs(vectors);IRQ_nmiEnable();IRQ_globalEnable();IRQ_map(IRQ_EVT_VINT1, 11);IRQ_map(IRQ_EVT_VINT0, 12);IRQ_reset(IRQ_EVT_VINT1);IRQ_reset(IRQ_EVT_VINT1);/*打开一个数据拷贝的数据通路*/DA T_open(DA T_CHAANY, DAT_PRI_LOW, DA T_OPEN_2D);/*----------------------------------------------------------*//*进行IIC的初始化*/hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);/*----------------------------------------------------------*//*进行TVP5150pbs的初始化*//*选择TVP5150,设置第三通路*/GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/GPIO_RSET(GPDIR,0x1);/*将GPIO0做为输出*/GPIO_RSET(GPV AL,0x0);/*GPIO0输出为高,选择IIC1总线,配置第二路,即为U21*/addrI2C = 0xBA >>1;_IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);_IIC_write(hSeeddm642i2c, addrI2C,0x03, misc_ctrl);_IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format);_IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg);_IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2);/*回读当前摄像设备的格式*/_IIC_read(hSeeddm642i2c, addrI2C,0x8c, &vFromat);vFromat = vFromat & 0xff;switch (vFromat){case TVP51XX_NTSCM:case TVP51XX_NTSC443:NTSCorPAL = 1;/*系统为NTSC的模式*/break;case TVP51XX_PALBGHIN:case TVP51XX_PALM:NTSCorPAL = 0;/*系统为PAL的模式*/break;default:NTSCorPAL = 2;/*系统为不支持的模式*/break;}if(NTSCorPAL ==2){/*系统不支持的模式,重新配置*/for(;;){}}/*----------------------------------------------------------*//*进行SAA7121H的初始化*/GPIO_RSET(GPV AL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/addrI2C = 0xB8 >>1; /*选择第0路的I2C的地址*//*将第0路的视频输入口的数据口设为高阻状态,使能SCLK,将第27脚设为输入*/_IIC_write(hSeeddm642i2c, addrI2C,0x03, 0x1);/*配置SAA7121H*/GPIO_RSET(GPV AL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*//*初始化Video Port0*//*将Vedio Port1设为encoder输出*/portNumber = 0;vpHchannel0 = bt656_8bit_ncfd(portNumber);for(i = 0; i < 100000; i ++);SEEDDM642_rset(SEEDDM642_WDOGEN,2);addrI2C = 0x88 >>1;for(i =0; i<43; i++){if(NTSCorPAL == 1){_IIC_write(hSeeddm642i2c,addrI2C,(sa7121hNTSC[i].regsubaddr),(sa7121hNTSC[i].regvule));}else{_IIC_write(hSeeddm642i2c,addrI2C,(sa7121hPAL[i].regsubaddr),(sa7121hPAL[i].regvule));}}/*----------------------------------------------------------*//*初始化Video Port1*//*将Vedio Port1设为采集输入*/portNumber = 1;vpHchannel1 = bt656_8bit_ncfc(portNumber);bt656_capture_start(vpHchannel1);/*等待第一帧数据采集完成*/while(capNewFrame == 0){}/*将数据存入显示缓冲区,并清采集完成的标志*/capNewFrame =0;/* for(i=0;i<0x32a00;i++){(*(Uint8 *)(disYbuffer+i))=0x00;(*(Uint8 *)(disYbuffer+i+0x32a00))=0x00;}*/for(i=0;i<numLines;i++){/*传送Y缓冲区*/DAT_copy((void *)(capYbuffer + i * numPixels),(void *)(disYbuffer + i * numPixels),numPixels);/* 传送Cb缓冲区*/DAT_copy((void *)(capCbbuffer + i * (numPixels >> 1)),(void *)(disCbbuffer + i * (numPixels >> 1)),numPixels>>1);/* 传送Cr缓冲区*/DAT_copy((void *)(capCrbuffer + i * (numPixels >> 1)),(void *)(disCrbuffer + i * (numPixels >> 1)),numPixels>>1);}/*启动显示模块*/bt656_display_start(vpHchannel0);j=0;/*建立显示的实时循环*/for(;;){/*当采集区的数据已经采集好,而显示缓冲区的数据已空*/if((capNewFrame == 1)&&(disNewFrame == 1)){/*将数据装入显示缓冲区,并清采集完成的标志*/capNewFrame =0;disNewFrame =0;for(i=0;i<numLines;i++){/*传送Y缓冲区*/DA T_copy((void *)(capYbuffer + i * numPixels),(void *)(tmpYbuffer + i * numPixels),numPixels);/*传送Cb缓冲区*/DA T_copy((void *)(capCbbuffer + i * (numPixels >> 1)),(void *)(tmpCbbuffer + i * (numPixels >> 1)),numPixels>>1);/*传送Cr缓冲区*/DA T_copy((void *)(capCrbuffer + i * (numPixels >> 1)),(void *)(tmpCrbuffer + i * (numPixels >> 1)),numPixels>>1);}/*肤色过滤试试108≤Cb≤123和135≤Cr≤156*///根据Cb、Cr 值,将tmpYbuffer的Y值分为两部分for(i=0;i<0x19500;i++)//0x32a00/2{if((*(Uint8 *)(tmpCbbuffer+i)>77) && (*(Uint8 *)(tmpCbbuffer+i)<177) &&(*(Uint8 *)(tmpCrbuffer+i)>133)&&(*(Uint8 *)(tmpCrbuffer+i)<156)){(*(Uint8 *)(tmpYbuffer+i*2))=0xff;(*(Uint8 *)(tmpYbuffer+i*2+1))=0xff;(*(Uint8 *)(tmpYbuffer+i*2+0x32a00))=0xff;(*(Uint8 *)(tmpYbuffer+i*2+1+0x32a00))=0xff;}else{(*(Uint8 *)(tmpYbuffer+i*2))=0x00;(*(Uint8 *)(tmpYbuffer+i*2+1))=0x00;(*(Uint8 *)(tmpYbuffer+i*2+0x32a00))=0x00;(*(Uint8 *)(tmpYbuffer+i*2+1+0x32a00))=0x00;}}pixelnum=0; curnum=0;begX=0; endY=0; endX=0; begY=0;//计算X起点与终点for (i=15;i<200;i++){for (j=0;j<numPixels-7;j++){if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)==0xff){curnum++;if (curnum>pixelnum){pixelnum=curnum;// maxrow=i;begX=j-pixelnum;endX=j;continue;}}}curnum=0;}pixelnum=0; curnum=0;//计算Y起点与终点for (j=5;j<numPixels-7;j++){for (i=5;i<200;i++){if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)==0xff){curnum++;if (curnum>pixelnum){pixelnum=curnum;begY=i-pixelnum;endY=i;continue;}}}curnum=0;}///////////////////////*画框*///画横线for (i=begX;i<endX;i++){//上边沿*(Uint8 *)(tmpYbuffer+begY*720+i)=0xff;*(Uint8 *)(tmpYbuffer+begY*720+0x32a00+i)=0xff;//下边沿*(Uint8 *)(tmpYbuffer+endY*720+i)=0xff;*(Uint8 *)(tmpYbuffer+endY*720+0x32a00+i)=0xff;}//画竖线for(j=begY;j<endY;j++){//左边沿*(Uint8 *)(tmpYbuffer+j*720+begX)=0xff;//右边沿*(Uint8 *)(tmpYbuffer+j*720+endX)=0xff;}gao=endY-begY;kuang=endX-begX;mianji=gao*kuang;if(mianji<10000){pis_name(192,200,4); //无}else if(mianji<25000 & mianji >10000){pis_name(240,200,5); //拳}else if(mianji<40000 & mianji >25000){pis_name(144,200,3); //刀}else if(mianji>40000){pis_name(96,200,2); //布}/*图像显示*/for(i=0;i<numLines;i++){ /*传送Y缓冲区*/DA T_copy((void *)(tmpYbuffer + i * numPixels),(void *)(disYbuffer + i * numPixels),numPixels);}}}for(;;){}/*----------------------------------------------------------*//*采集与回放*/}void pis_name(int init_lie, int init_hang,int wenzi){unsigned int i=0,j=0, num=0,n=0;unsigned char test_word=0x80,tre_coast=0x00;for(i=init_hang;i<init_hang+48;i++){for(j=init_lie;j<init_lie+48;j++){n=j-init_lie;if(j==init_lie||(n%8==0)){if(wenzi==1)tre_coast=an[num];else if(wenzi==2)tre_coast=ran[num];else if(wenzi==3)tre_coast=kong[num];else if(wenzi==4)tre_coast=hu[num];else if(wenzi==5)tre_coast=meng[num];else if(wenzi==6)tre_coast=chun[num];num++;}if(test_word&tre_coast){*(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0x00;}else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;tre_coast=tre_coast<<1;}}num=0;for(i=numLines/2+init_hang;i<numLines/2+init_hang+48;i++){for(j=init_lie;j<init_lie+48;j++){n=j-init_lie;if(j==init_lie||(n%8==0)){if(wenzi==1)tre_coast=an[num];else if(wenzi==2)tre_coast=ran[num];else if(wenzi==3)tre_coast=kong[num];else if(wenzi==4)tre_coast=hu[num];else if(wenzi==5)tre_coast=meng[num];else if(wenzi==6)tre_coast=chun[num];num++;}tre_coast=tre_coast<<1;if(test_word&tre_coast){*(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0x00;}else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;}}}3.4、识别结果对于不同的手势所得识别结果如下:由识别结果可以看出:在合适位置随着手势的变换,在屏幕上显示的文字作相应变化。

相关文档
最新文档