11
SRTP浙浙浙浙浙 浙浙浙浙 浙浙 浙浙浙浙浙浙浙 浙浙浙 浙浙浙浙浙浙浙浙浙 浙浙浙 浙浙 浙浙浙 浙浙浙 (): 浙浙浙浙浙 13656718462

Jtb

Embed Size (px)

Citation preview

Page 1: Jtb

浙 江 大 学

大学生科研训练计划(SRTP)

项目结题表

项 目 名 称 : 手势控制的图书阅读方式

立 项 负 责 人 姓 名 : 张 文 婷

参 与 项 目 完 成 人 姓 名 : 程 炳 飞 余 柏 杨 源 清

立项人所在学院(系): 计算机学院

联系电话: 13656718462

电子邮件: [email protected]

Page 2: Jtb

填 表 日 期 : 2 0 1 0 - 5 - 2 4

本科生院教研处制表

填 表 须 知

1.SRTP 宗旨:大学生科研训练计划(Student Research Training Program 简称 SRTP)

是本科实践教育教学改革的重要举措之一,宗旨是充分发挥我校学科门类齐全、教学资源丰富、

师资力量雄厚的优势,通过教师或学生立项,给予一定科研经费的资助,为本科生提供科研训

练的机会,使学生尽早进入各专业科研领域,接触学科前沿,了解学科发展动态;增强学生创

新意识,培养学生创新和实践动手能力;加强合作交流,培养团队协作精神,提高学生综合素

质。

2. 结题目的:①进一步规范 SRTP 组织管理工作;②培养学生申请立项、结题、答辩和撰写研究

成果简介的科研训练全过程;③不断总结 SRTP 工作经验,进一步推进和提高 SRTP 质量;④

鼓励和促进 SRTP 研究成果的发表和转化;⑤完成 SRTP《研究成果简介》和优秀论文的汇编。

3. 凡编入浙江大学 SRTP 指南的项目都要按期、按时填写 SRTP 项目结题表。SRTP 立项研究时间

为 1 年期项目(每年 6 月---第二年 5 月),要求在第二年 4 月填写项目结题表,学院(系)

组织答辩。

4. 结题表中第一页 SRTP 项目《研究成果简介》将作为每期研究成果汇编和评估的主要材料,务

必请填表人认真按提纲要求(重点从项目研究结果、成效、特色、创新点和推广应用等依次加以

阐述)撰写。SRTP《研究成果简介》字数控制在 600---800 文字,不附图表,要求表述明确,

字迹清晰,建议用计算机打印一份上交学院(系)本科教学管理科。学生结题项目负责人务必

Page 3: Jtb

并将《浙江大学 SRTP 项目结题表》上传至《浙江大学本科生创新网》。

5. 项目结题表填写后及时上交学院(系)本科教学管理科,组织答辩和成绩评定,学院

(系)SRTP 指导小组审核签署意见,学院盖章后。

6. 为了掌握教师立项和学生立项的基本情况,对于教师立项的基本情况请填写在《研究成果简

介》表格中的第一栏目,对于学生立项的基本情况请填写在《研究成果简介》表格中的第二栏目。

7. 如填表有不明事宜,请与对外交流与科研训练办公室或学院(系)本科教学管理科联系和咨询。

一、SRTP 项目《研究成果简介》

教师立项名称:

教师立项负责人姓名: 职称: 所在院系: 电话:

参与项目完成人姓名:1. 院 系: 年级: 专业: 电话:

2. 院系: 年级: 专业: 电话:

3. 院系: 年级: 专业: 电话:

4. 院系: 年级: 专业: 电话:

学生立项名称: 手势控制的图书阅读方式

学 生 立 项 负 责 人姓名:张文婷 院 系 : 计 算 机 学 院 年级: 07 级 专 业 : 工 业设计 电话:

13656718462

参与项目完成人姓名:1. 程炳飞 院系:计算机学院 年级: 07 级 专业: 计算机系 电话:

13656718414

2. 余柏 院系:计算机学院 年级: 07 级 专业: 计算机系 电话: 13656718414

3. 杨源清 院系:光电系 年级: 07 级 专业; 光电系 电话; 13656679081

指导教师姓名:吴江琴 职称: 副教授 所在院系: 计算机学院 电话: 15906611621

Page 4: Jtb

成果形式:(论文、设计、产品研制、软件开发、专利申请和转让、研究报告、调研报告、课件等) 软件开发

成果发表: 杂志名称 级别 时间 第几期(卷)

产品(专利) 鉴定单位 时间

1 、研究成果简介: (要求撰写 600---800 文字,不附图表)

经过一年的研究学习和开发,我们最终完成了对图书阅读进行手势控制的程序的开发。程序开发可以分为三个子部分,

第一部分是图像的提取——从摄像头拍摄的连续帧之中按一定的时序和间隔抓出若干图片形成序列,供后期的图像处理和模式识别。

第二部分是对图像序列单个图像分别进行处理。处理分为三个步骤:1. 确定背景,在识别动作开始之前,将摄录到的静止图像存入到一个变量 img 中,作为背景使用,目

的是便于将前景与背景分离,识别出前景2. 当程序进入运行状态后,有目标物体——手进入摄像头拍摄视野,将正在处理的图像与 img 进行比较分离,粗略分离出前景,将背景部分颜色值存为 0,识别出的目标或前景轮廓内的像素颜色值存为 255,实现图像识别的二值化步骤。

3. 将二值化后的图像进行初步的降噪处理4. 通过按顺序便利每个点周围的八个像素点的方式,跟踪二值化图像连通区的边缘像素,并按照顺序

将这些边缘像素点的坐标一次记录在一个二维数组之中。5. 计算每个连通区的周长,也即是边缘像素点的个数,将小于一定阈值的连通区内的像素点颜色值也设为 0,即降噪是为背景。

经过第二部分处理的图像,模式识别的目标物体被识别为前景,颜色值被标识为 255,背景被标识为 0。并且进过几次的降噪处理,方便后面对其进行图像运算和识别。

第三部分是对图像进行特征识别。我们的识别对象是手势,一共定义了两种含义的手势,向上翻页和向下翻页,提取的特征为该手势的面积和周长之比的范围。取面积和周长之比的原因是因为这样可以避免手势远近不同造成面积和周长大小不同的问题。通过特征识别和对应,控制相应的指令,最终实现了用手势开控制阅读时控制上翻页,下翻页,打开文件,关闭的问题。

2 、创新(特色)与应用成果:

模式识别虽然并不是一个全新的领域,但将手势识别技术具体运用于图书阅读上是独创的一种应用。电子阅读如今越来越成为一种趋势和流行时尚。人们慢慢建立起了电子书籍的消费概念。与之相伴的是,需要建立起更舒适、更人机的阅读交互方式。手势控制的阅读方式软件就是这方面的一点挖掘和探索。

说明:1、SRTP《研究成果简介》作为每期研究成果汇编和评估材料,务必请填表人按上述要点认真撰写;

2、表述明确,字迹清晰,建议用计算机打印;3、教师和学生立项的基本情况请分别填写在相应栏目。

二、SRTP 项目结题综述

Page 5: Jtb

1 、撰写该项目研究已达到的目标、成效和成果的发表等: (附研究论文(报告)、所登刊物的复印件等放入 SRTP 档案袋中)

这次项目经过一年的时间终于完成,我们最终实现了一款软件的开发,实现了通过手势来控制电子书籍阅读的上下翻页、打开、关闭等动作,完成了对人机交互领域的一次探索和实践。

在编写过程中,我们对图像处理识别的算法进行了学习和研究。下面介绍我们编写程序用到的几个核心程序。首先我们的程序用到了微软推出的 DirectShow开发包。DirectShow 是微软公司在 ActiveMovie 和 Video for Windows 的基础上推出的新一代基于 COM(Component

Object Model)的流媒体处理的开发包,与 DirectX开发包一起发布。目前,DirectX最新版本为 9.0。DirectShow 为多媒体流的捕捉和回放提供了强有力的支持。运用 DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。

通过调用 DirectShow开发包的库函数,我们实现了对摄像头捕捉到的连续画面的时序抓取,以备后续的处理和识别。其次,我们的核心函数代码包括几个部分:第一部分,haikei函数,用于去除画像中的背景。算法是开始前先确定出背景,而后将待处理的图片与背景进行

相见,重叠的像素点被出去,像素点颜色值设为 0,表示为背景部分。/******************************************************************************

* 去除画像中的背景******************************************************************************/

void haikei(BYTE *pRGB, BYTE *pRGB0, BYTE *pRGB1)

{

int x, y, k, hani_H=30, hani_S=30, i, hani_R=30;

int hani_G=30, hani_B=30, hani_H1=60, hani_S1=60;

unsigned char R, G, B, R1, G1, B1;

long count=0;

double H, S, V, H2, S2, V2;

for (y = 0; y < y_size; y++)

{

for (x = 0; x < x_size; x++)

{

B = pRGB[(x + y*x_size)*3];

G = pRGB[(x + y*x_size)*3+1];

R = pRGB[(x + y*x_size)*3+2];

B1 = pRGB0[(x + y*x_size)*3];

G1 = pRGB0[(x + y*x_size)*3+1];

R1 = pRGB0[(x + y*x_size)*3+2];

HSV(&H, &S, &V, B, G, R);

HSV(&H2, &S2, &V2, B1, G1, R1);

if ((abs(H-H2) > hani_H) && (abs(S-S2) > hani_S)

&& (abs(R-R1) > hani_R) && (abs(G-G1) > hani_G)

&& (abs(B-B1) > hani_B))

{

image3[y][x] = 255;

}

else

Page 6: Jtb

{

image3[y][x] = 0;

}

if ((abs(H-H2) < hani_H1) && (abs(S-S2) < hani_S1))

{

for (k = 0; k < 3; k++)

{

pRGB1[count++] = 0;

}

}

else

{

for (k = 0; k < 3; k++)

{

pRGB1[count++] = pRGB0[(x + y*x_size)*3 + k];

}

}

}

}

remove_areas2();

}

第二部分,边缘跟踪函数,算法原理:首先通过二个循环遍历每个点,在每个点进行这样的处理:如果这一点的像素值为 255 对这个点相邻的 8个点按照逆时针顺序遍历,寻找像素点为 255 的点,如果存在,则将这一点的坐标值存入数组,并继续跟踪刚才寻找的下一个点,进行反复操作,直到完成一个闭合的路径,即追踪出完整的边缘。

/******************************************************************************

* 边缘跟踪******************************************************************************/

int obtain_contour(int x_start, int y_start, unsigned char image[y_size][x_size])

{

int x, y;

int xs, ys;

int code, num;

int i, counter, detect;

counter = 0;

for (i = 0; i < 8; i++)

{

xs = x_start + Freeman[i][0];

ys = y_start + Freeman[i][1];

if ((xs >= 0) && (xs < x_size) && (ys >= 0) && (ys < y_size)

&& (image[ys][xs] == 255))

{

counter++;

}

}

Page 7: Jtb

if (counter == 0)

{

num = 1;

}

else

{

num = -1;

x = x_start;

y = y_start;

code = 0;

ch_x[0] = x_size;

ch_x[1] = 0;

ch_y[0] = 0;

ch_y[1] = y_size;

do

{

detect = 0;

code = code - 3;

if (code < 0)

{

code = code + 8;

}

do

{

xs = x + Freeman[code][0];

ys = y + Freeman[code][1];

if ((xs >= 0) && (xs < x_size) && (ys >= 0)

&& (ys < y_size) && (image[ys][xs] == 255))

{

detect = 1;

num++;

if (num > MAX_CNTR)

{

return(-1);

}

chain_code[num] = code;

x = xs;

y = ys;

if (ch_x[0] > x)

Page 8: Jtb

{

ch_x[0] = x;

}

else if (ch_x[1] < x)

{

ch_x[1] = x;

}

if (ch_y[0] < y)

{

ch_y[0] = y;

}

else if (ch_y[1] > y)

{

ch_y[1] = y;

}

}

code++;

if (code > 7)

{

code = 0;

}

}while (detect == 0);

}while ((x != x_start) || (y != y_start));

num = num + 2;

}

return (num);

}

第三部分,控制阅读部分,通过对图像的处理识别,得到了手势特征之后,将其与对应控制的的用意义的指令连接起来,完成手势识别控制的全过程。主要通过调用 Robot 类中的 keyPress函数,参数为按键的数值,来实现对键盘和鼠标按键的控制,实现对阅读软件的操控。

Page 9: Jtb
Page 10: Jtb

2 、参加学生完成 SRTP 项目的总结、体会、存在问题和建议:

经过一年的 SRTP 项目的历练,我们在科研方面,自我学习方面和知识积累方面都有了很大的提高。并且对图像处理和模式识别领域,有了很多的了解和探索。

在项目起初的时候,我们对图像处理、模式识别领域还非常陌生,对人机交互领域的探索也是浅尝辄止,仅仅限于概念上的理解认识,而这个项目给我我们亲手去做的机会。经过一段时间阅读相关书籍文献,在网上查找资料,我们了解到手势识别在很大程度上技术已经趋于成熟。之前的很多认识存在偏差。比如对我们所研究的手势识别其实并非什么新鲜事物。手势识别甚至已经有了很多实际应用的产品,比如手语翻译仪器等等。它可以识别聋哑人士的手语语义,翻译成语音的普通语言来实现聋哑人士与非聋哑人士之间的交流沟通。这个项目的意义和创新点,主要是在于让我们能够借机了解、熟悉、学习、研究、实践这个领域,并且把这些算法实际应用到一项日常生活中去,比如,我们所做的电子图书阅读。

手势识别的算法有很多种类,分为静态手势识别和动态手势识别,而两类下面又分别有若干类不同复杂度、不同精度的识别算法。他们各自需要提取不同数量维度的数据,使用的提取设备也不同。有的需要精细复杂的数据手套,提取手的若干点的位置进行分析。有的需要 2个以上摄像头对手势动作进行 3维德解析识别,也有只只需要一个摄像头,来提取二维图像上的手势特征。手势识别并不是说算法精度越高就越好,而是由不同的应用领域。比如我们选择的电子图书阅读,就适合采用低精度的二维图像识别。因为大多数情况下,人们的计算机设备上只配备一个摄像头,并且动作并不复杂,二维图像特征就可以良好的识别。

我们最后得到的程序,实现了对电子图书阅读的手势控制,但也有些不足,比如背景环境光源的一些限制,如果环境过于复杂,会影响到识别的效果和精确度。另外是背景确定之后,不希望有改变,则如果是出于动态的背景之下,如背景是川流不息的马路上,识别就相对困难,但这种情景在图书阅读的特定设定下,也很少出现。

另外我觉得在手势识别技术开发出来的基础上,其实可以有更多领域的一些应用,我们可以不仅仅是应用在图书阅读方式控制上,可以寻求一些有创意的新应用。

Page 11: Jtb

三、SRTP 项目成绩评定

指导教师评语:(要求对学生完成的项目撰写具体评价的文字材料)

指导教师签名:

日 期:

学院(系) SRTP 指导小组或答辩小组意见: (要求对学生参加项目结题答辩作客观分析与评价)

SRTP 总评成绩: (按优、良、中、合格和不合格五级评定)

Page 12: Jtb

学院(系)SRTP 指导小组或答辩小组签名:

日 期:

学院(系)本科教学管理科签名:

日 期:

说明:1.指导教师要认真撰写对项目结题的评语。

2.学生没有填写结题表和指导教师撰写评语的项目,不能参加结题答辩,不给予成绩。

3.所有参加项目研究的学生必须在完成结题答辩后,成绩由学院(系)SRTP 指导小组或答

辩小组与本科教学管理科评定。