• 大学生汽车设计大赛 > 第四届"博创杯"全国大学生嵌入式设计大赛
  • 第四届"博创杯"全国大学生嵌入式设计大赛

    免费下载 下载该文档 文档格式:DOC   更新时间:2014-08-21   下载次数:0   点击次数:1
    第四届"博创杯"全国大学生嵌入式设计大赛 便携式盲人浏览器 Portable Browser for the Blind Person 吴文腾 董升东 唐勇 指导老师 沈勇张明2008年9月 摘要 随着网络的普及,越来越多的人已享受到网络带来的快捷与方便.但对于大多数盲人来说,由于没有合适的软硬件条件,所以还未享受到网络的便利.本项目利用嵌入式技术、GPRS技术和语音技术,专为盲人设计一款浏览器.该浏览器体积小,方便盲人随身携带,使用无线连接,让盲人能随时随地通过网络获取信息,同时还设计一种盲人输入法,方便盲人交互的浏览网页. 关键词:嵌入式;浏览器;输入法;盲人 Abstract With the prevalence of network, more and more people have enjoyed the speed and convenience by network. To many blind persons, they have not enjoyed the convenience by network, because of lack of hardware and software. This project will using embedded technology, GPRS and speech technology to design a browser for the blind person . The browser is portable, so it is easy to take it. It connects network by wireless, which may let the blind person get information easy from network. Also in order to browse websites interactively, an input method for blind person is designed. Key words:Embedded;Browser;Input method;The blind person 目录第一章 绪论 1 1.1 背景分析 1 1.2 课题意义 1 1.3 技术现状 1 第二章 相关技术 1 2.1 嵌入式系统 1 2.1.1 嵌入式微处理器 1 2.1.2 嵌入式操作系统 1 2.2 GPRS技术 2 2.3 盲文汉字处理技术 3 2.4 嵌入式数据库 3 2.5 语音处理技术 3 第三章 系统总体设计 4 3.1 系统功能及配置 4 3.1.1 系统功能描述 4 3.1.2 系统配置 4 3.2 系统结构 4 3.2.1 系统硬件结构 4 3.2.1 系统软件结构 6 3.3 系统总体流程 6 第四章 模块设计与实现 9 4.1 盲人浏览器设计 9 4.1.1 收藏夹模块的设计与实现 9 4.1.2 网页下载模块的设计与实现 10 4.1.3 网页层次结构显示模块的设计与实现 12 4.1.4 表单模块的设计与实现 12 4.1.5 语音合成模块的设计与实现 13 4.2 盲文输入法设计 14 4.2.1 触摸屏输入方式 14 4.2.2 键盘输入方式 16 第五章 系统测试与应用 18 5.1 系统功能及配置测试及性能分析 18 5.1.1 系统测试 18 5.2系统特点及优势 19 5.3系统应用 19 第六章 结束语 20 参考文献 20 第一章 绪论 1.1 背景分析 在中国十三亿人中有八千多万残疾人士,其中有五百多万是盲人.残疾,对于每个人每个家庭来说都是不幸的.残疾人在生活和学习中会遇到比平常人更多的困难,所以我们应该给予他们更多的关怀.在这个知识迅速膨胀的信息社会,他们最需要的莫过于能和外界进行有效的交流,获取更多的信息,让自己融入社会中. 随着信息技术和网络技术在我国的快速发展,网络资源日益丰富,网络已逐渐成为人们获取信息的一种重要渠道,但盲人在浏览和使用网络资源时存在诸多困难.首先,很多网页从内容到形式都很少为盲人考虑,不适合盲人浏览;在浏览一些交互式的网页时,由于没有适合的输入方式,盲人只能"看",不能真正的互动. 因此我们提出了一个解决此类问题的方案——便携式盲人浏览器系统. 1.2 课题意义 为了解决目前嵌入式浏览器不适合盲人使用的缺陷,我们融合嵌入式技术,语音技术及盲文汉字处理技术,提出并设计了一种便携式盲人浏览器系统. 该浏览器能将链接的普通网页下载并解析下来,将其中需要的内容,如新闻、音乐等文字或音频信息转变为特定的适合盲人使用的网页结构.本系统还通过语音合成朗读网页的内容,这给盲人浏览网页提供了极大的方便.同时,为了实现盲人与浏览器的互动,设计了现行盲文输入法,实现盲文输入到汉字输出.盲文输入法能将输入的现行盲文转变为汉字,这样盲人可以不用懂汉字即可得到需要的汉字,使得盲人浏览网页变得更丰富、有趣. 本系统解决了在嵌入式设备上盲人如何方便上网的问题,相信随着系统性能的不断优化和功能的不断扩展,定会有非常广泛的应用前景. 1.3 技术现状 本系统融合了嵌入式技术、语音技术和盲文汉字处理技术,其中,嵌入式系统地开发已经进入了32位时代,在当前数字信息技术和网络技术高速发展的后PC时代,嵌入式系统已经广泛地渗透到社会的方方面面.目前,语音技术日趋成熟并被广泛的运用.在盲文汉字处理技术中使用的现行盲文是一种易于掌握,在全国各地广泛使用的盲文方案,它定义简单,易学易用,但容易出现多音字. 第二章 相关技术 本章介绍系统采用的主要相关技术.首先介绍嵌入式系统,包括嵌入式系统的处理器、操作系统,接着介绍GPRS技术,盲文汉字处理技术、 2.1 嵌入式系统 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统.它包括硬件和软件两部分.硬件包括微处理器、存储器及外设器件和I/O端口、图形控制器等;软件部分包括操作系统和应用程序,操作系统控制着应用程序与硬件的交互,而应用程序控制着系统的运作和行为,有时设计人员把这两种软件组合在一起. 嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件[1],它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等. 嵌入式操作系统具有通用操作系统的基本特点,但与其相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点. 2.1.1 嵌入式微处理器 嵌入式系统的核心是嵌入式微处理器(Embedded Microprocessor Unit, EMPU),其在汽车、各种电子产品甚至是家用电器领域都获得了广泛的运用.本系统使用ARM9系列微处理器.ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等. 2.1.2 嵌入式操作系统 嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等. 嵌入式操作系统具有通用操作系统的基本特点,但与其相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点.本系统采用嵌入式Linux操作系统. Linux系统具备稳定、高效、易定制、易裁减、硬件支持广泛等特点,并具有免费、开放源代码等独特特征,Linux系统还具有层次结构且内核完全开放.Linux是由很多体积小且性能高的微内核系统组成的.在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统. Linux系统具有广泛的硬件支持特性.无论是RISC还是CISC、32位还是64位等各种处理器,Linux都能运行.Linux支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行.这意味着嵌入式Linux具有更广泛的应用前景. 2.2 GPRS技术 GPRS(General Packet Radio Service,通用无线分组业务)作为第二代移动通信技术GSM向第三代移动通信(3G)的过渡技术,是由英国BT Cellnet公司早在1993年提出的,是一种基于GSM 的移动分组数据业务,面向用户提供移动分组的IP或者X.25连接[3] .GPRS支持电话、短信以及上网的业务,它具有随时在线的优点,具有更大的带宽,更高的速度. GPRS分层协议模型如图2.2所示.Um接口是GSM的空中接口.Um接口上的通信协议有5层,自下面上依次为物理层、MAC(Mdium AcceSS Control)层、LLC(Logical Link Control)层、SNDC (Subnetwork Dependant Convergence)层和网络层. 图2.2 GPRS分层协议模型 Um接口的物理层为射频接口部分,而物理链路层则负责提供空中接口的各种逻辑信道. ?MAC为媒质接入控制层.MAC的主要作用是定义和分配空中接口的GPRS逻辑信道,使得这些信道能被不同的移动台共享. LLC层为逻辑链路控制层.它是一种基于高速数据链路规程HDLC的无线链路协议.LLC层负责在高层SNDC层的SNDC数据单元上形成LLC地址、帧字段,从而生成完整的LLC帧. SNDC被称为子网依赖结合层.它的主要作用是完成传送数据的分组、打包,确定TCP/IP地址和加密方式. 网络层的协议目前主要是Phase 1阶段提供的TCP/IP和X.25协议,这些协议对于传统的GSM网络设备(如BSS和NSS等设备)是透明的. GPRS是一组新的GSM承载业务,在有GPRS承载业务支持的标准化网络协议的基础上,GPRS可提供以下一系列交互式业务: 点对点无连接型网络业务(PTP-CLNS) 点对点面向连接的数据业务(PTP-CONS) 点对多点业务(PTM) 还能支持用户终端业务、补充业务、GSM短消息业务和各种GPRS电信业务.总之,GPRS可提供Internet、多媒体、电子商务等业务;可应用于运输业、金融、证券、商业和公共安全业;PTM业务支持股市动态、天气预报、交通信息等实时发布;另外,还能提供种类繁多、功能强大的以GPRS承载业务为基础的网络应用业务和基于WAP的各种应用. 2.3 盲文汉字处理技术 盲文又称点字,国际通用的点字由6个凸起的圆点为基本结构组成,是专供盲人摸读、书写的文字符号.现在我们国家使用的普通话的盲文有两种,双拼盲文和现行盲文,现行盲文使用的时间长,也被人们称作旧盲文.由于各种原因现在两种盲文同时存在,由于现行盲文规则少,结构简单,所以它使用较多. 盲文的组成是以"方"为单位的,类似英文的字母为单位一样,一个汉字由若干个方组成,书写的规则就是按照汉字的拼音来书写.每个方的组成是六个点,左上是第一点,左中是第二点,左下是第三点,右上是第四点,右中是第五点,右下是第六点.盲文通过音节与汉字对应,一个音节通常由声方和韵方两方组成,如同汉语拼音的声母和韵母. 本项目设计的盲文输入法可将现行盲文转变为汉字.该输入法先统计输入盲文的点阵数和排列情况,判断对应的音节;再通过音节查找汉字,语音输出汉字的词语,由盲人确定汉字或词语. 2.4 嵌入式数据库 嵌入式数据库可在嵌入式设备中独立运行,用以处理大量的、时效性强且有严格时序的数据,它以高可靠性、高实时性和高信息吞吐量为目标,其数据的正确性不仅依赖于逻辑结果,而且依赖于逻辑结果产生的时间[3]. 嵌入式数据库通常是与嵌入式操作系统及具体的应用集成在一起,无需独立运行数据库引擎,由程序直接调用相应的API就可实现对数据的存取操作.嵌入式数据库系统特点是微小内核,便于实现嵌入式功能;可靠性、可管理性和安全性;可移植性和平台无关性;资源利用率高;运行速度快;简化开发环境[3]. 本系统使用的是Berkeley DB嵌入式数据库.Berkeley DB是由Berkeley(美国加州大学伯克利分校)开发的,DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法.在1996年中期,Sleepycat软件公司成立,提供对DB的商业支持,在这以后,DB得到了广泛的应用. Berkeley DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等.DB的应用十分广泛,在很多知名的软件中都能看到其身影. 2.5 语音处理技术 语音处理技术有语音识别、语音合成、语音压缩、语音编码等.语音识别目的是研究出一种具有人类听觉功能的机器,能够听懂人的讲话,理解人的意图并做出相应的反应.语音识别系统本质是一种多维模式识别系统,包括特征提取、语音模式、模式匹配3个基本单元[2]. 语音合成研究的是制造一种会说话的机器,使一些以其他方式或存储的信息转换为语音,让人们能通过听觉而方便的获得.汉语语音合成的研究是从20世纪60年代开始的,最初比较缓慢,到了20世纪70年代后期,随着计算机技术的发展才有了较快的发展.20世纪90年代初,出现了能够合成国标一级和二级汉字的语音合成系统,如今语音合成技术已经相当普遍,合成效果较好[2]. 第三章 系统总体设计 3.1 系统功能及配置 3.1.1 系统功能描述 启动浏览器后,单击触摸屏中间区域可进入收藏夹,再单击收藏夹页面,语音依次读网址,双击页面则链接当前所读网址.一旦链接成功就向服务器请求下载网页,下载好后便要进行网页的解析,将网页分析成树形层次结构,并将层次结构显示在触摸屏左方.单击触摸屏,语音依次读树形结构的最高层.若语音当前所读内容的为链接,双击触摸屏则进入链接或下一层更多的链接;当遇到表单时(需要输入的),则需调用盲文输入法获得汉字,将汉字提交给表单;若为纯文本,则进入该文本对应的正文或进入下一层,阅读正文的内容. 3.1.2 系统配置 根据系统功能以及设计嵌入式系统的要求,开发此系统需要以下主要配置:(1)开发环境:REDHAT LINUX 9.0+ARM LINUX,Windows系统 (2)开发语言:C /C++语言 (3)硬件:北京博创公司UP-NETARM2410-S开发板上大部分硬件,包括三星S3C2410核心板,64M NAND FLASH,TFT液晶LCD,触摸屏,键盘等;还有语音识别板SPACE061A;语音合成模块XF-4240;GPRS模块. 3.2 系统结构 本系统的开发平台是北京博创公司的UP-NETARM2410-S实验开发板.由于北京博创公司的ARM9嵌入式开发平台功能强大、结构设计合理、系统稳定,所以本系统的设计与实现都是此开发板上进行. 3.2.1 系统硬件结构 (1)硬件结构 硬件组成主要包含两部分,一是开发平台的硬件系统,二是扩展硬件系统. 结构如图3.1所示,开发板平台上使用的是核心板、触摸屏、LCD、音频、电源和各种接口;扩展硬件系统包含了主要功能模块,有语音识别、语音合成、GPRS. (2)主要硬件介绍 ① 语音识别板,使用SPCE061A语音处理芯片,它能识别特定人语音,内置32K的FLASH.识别命令以组为单位,每组最多5条命令,识别命令总数由存贮空间而定,识别率较高,通过UART接口与ARM9通信. ② 语音合成模块,使用的是中文语音合成模块XF-4240,它支持GB2312、GBK、BIG5、UNICODE四种内码的文本,语音合成效果清晰、自然、准确.通过IIC与ARM9通信. ③ GPRS模块,使用SIM300自行开发完成,可以实现电话、短信、上网的功能,通过UART接口与ARM9通信. 图3.1 硬件结构图 (3)GPRS模块硬件设计 网页浏览功能使用GPRS模块,选用的是SIM300模块.SIM300可以工作于EGSM900/DCS1800/PCD1900三个频段,支持电话、短信、数据和其他通信功能,提供了丰富的外接接口,方便设计.本系统的设计的GPRS模块60PIN接口的原理图如图3.2所示.设计时使用了SIM卡端口、串口通信端口、音频端口、电源和地端口. 图3.2 SIM300插座原理图 音频部分包括耳机接口和喇叭接口,提供语音输入和语音输出的方式,如图3.3所示. 图3.3 音频接口原理图 SIM卡使用的是六个触点的SIM卡座,电路如图3.4所示. 图3.4 SIM卡座原理图 3.2.1 系统软件结构 便携式盲人浏览器主要包括盲人浏览器和盲文输入法两部分.盲人浏览器由网页下载模块,收藏夹模块,网页层次结构显示模块,表单模块,语音合成模块组成;盲文输入法则包括盲文输入、字库查找和汉字选择三部分. 浏览器通过网页下载模块下载网页,经过网页解析形成树形层次结构显示在触摸屏左方,语音合成模块读出层次结构正文.盲人选择所需内容浏览.盲人还可以通过表单模块与网络进行互动,语音模块提示盲人填写提交表单. 盲文输入法有触摸屏输入和键盘输入两种方式.触摸屏输入盲文点阵,得出对应的拼音,根据拼音再从数据库中查找汉字,最终以语音形式读出编号及同音字.盲人需要选择输入某一汉字则念出该汉字的编号.键盘输入的是盲文序列,以盲文序列为依据可从数据库中检索同音字,语音读出同音字.盲人听到需要的字可按下"ENTER"键,选择输入当前语音所读的汉字. 3.3 系统总体流程 盲人浏览器在结合嵌入式技术、语音技术和盲文汉字处理技术的基础上,为盲人提供了浏览网络资源所需的绝大部分功能.盲人浏览器采用结构化的设计思想,工作流程如图3.5所示[4]. 图3.5 盲人浏览器工作原理图 盲人浏览器按功能可分为网址获得,网页下载,网页显示,网页朗读,网页跳转5个部分. 网址获得:浏览器启动时,系统首先会弹出一个收藏夹对话框,盲人可以从中选择事先存放在其中的网址直接进行浏览,也可不选而通过控制按钮选择用盲文输入法在地址栏里输入网址后再进行浏览. 网页下载:先将上一步获得的网址转变为有效的万维网(特定)网址,再在相应的网站将网页下载并保存. 网页显示:网页下载后为了方便盲人阅读,首先提取网页的文本信息,去除图片、音乐等信息,再将文本信息以一定的布局映射到触摸屏上.在触摸屏的上方是地址输入栏和收藏夹栏,左方是网页控制栏,如后退,链接,存储,下载,退出等控制按钮,右方是网页中的所有链接.若盲人需要在页面上输入内容,可调用盲文输入法,将输入的盲文转变为汉字显示在页面上. 网页朗读:为了便于盲人详细和完整地了解整个网页,快速找到自己感兴趣的内容,系统提供了顺序朗读方式和快速朗读方式.其中快速朗读方式仅朗读标题、关键内容与主要链接,让盲人能快速了解网页内容. 网页跳转:网页朗读过程中遇到超链接时,系统会做出提示,盲人可以通过使用触摸屏上的快捷键跳转到该页.盲人浏览器启动后会记录访问过的网页历史,盲人可以利用前进、后退快捷键实现前后网页之间的跳转. 第四章 模块设计与实现 本章主要介绍了系统设计与实现的过程和方法,按照模块分别介绍.首先介绍盲人浏览器的收藏夹模块,下载分析模块,网页层次结构显示模块,表单模块,语音合成模块;再介绍盲文输入法的输入模块,汉字查询模块,选字及编辑模块. 4.1 盲人浏览器设计 4.1.1 收藏夹模块的设计与实现 启动浏览器后,单击触摸屏页面左上方区域,进入收藏夹,默认语音读出收藏的第一个网址,通过触摸屏上划或下划可以选择语音读上一个或下一个网址,双击触摸屏则链接当前所读网址. 对页面的单击和双击及上下划动的功能实现是通过线程void * favor_click(void *data)实现的.先由函数Favor_InWhichArea(&p1)取得在触摸屏上的点击位置,再根据返回值进行单击处理.上下划动功能是通过upd_or_downd(&p1,&p2)返回的值来调用do_favor_up((FAVOR_DATA *)data)函数实现上划,函数do_favor_down((FAVOR_DATA *)data)实现下划. 其代码如下: void * favor_click(void *data) {/*favor的单击处理线程*/ dc=1; switch(Favor_InWhichArea(&p1)) {/*添加功能处理代码*/ case CONFIRM: web_func=CONFIRM; #ifdef TTS T2S_t2s("确认"语音输出"确认选择" #endif DPRINTF("CONFIRM!!!\n"); break; case CANCEL: web_func=CANCEL; //语音输出"退出并进入默认网页" DPRINTF("CANCEL!!!\n"); break; default: switch(upd_or_downd(&p1,&p2)) {/*添加语音处理网页内容的代码*/ case UP: do_favor_up((FAVOR_DATA *)data); dc=0; break; case DOWN: do_favor_down((FAVOR_DATA *)data); dc=0; break; case STAY:/*双击选择网址*/ do_favor_stay((FAVOR_DATA *)data); break; } } } 在双击时,首先保存第一次单击的功能,再根据第二次的单击设置相应的参数,通过双击处理线程函数void * favor_click(void *data)进行处理. void do_favor_double_click() { switch(web_func) { case CONFIRM: OVER_FAVOR=0;/*退出TS操作*/ SELECTED_FAVOR=1;/*选择了收藏夹网址*/ DPRINTF("DO CONFIRM!!!\n"); break; case CANCEL: OVER_FAVOR=0;/*退出TS操作*/ SELECTED_FAVOR=0;/*取消选择收藏夹网址*/ DPRINTF("DO CANCEL!!!\n"); break; default: OVER_FAVOR=0;/*退出TS操作*/ SELECTED_FAVOR=1;/*选择了收藏夹网址*/ break; } } 进入收藏夹后选择网址 ,通过调用favor_data_to_wsd(wsd,&favor_data)函数可将所选的网址信息拷给wsd,浏览器根据wsd进行链接. 4.1.2 网页下载模块的设计与实现 网页下载模块需要由SIM300模块的支持,软件部分由PPP拨号和socket编程两部分组成. (1)PPP拨号的实现 本系统安装了ppp2.4.4工具包,安装步骤为: ① 从网络获取并解压ppp2.4.4.tar.gz工具包后交叉编译; ② 将生成的二进制文件及配置文件移植(烧写root文件)到目标板; ③ 利用移植好的ppp工具,通过GPRS模块拨号上网 PPP移植成功后,就可以编写自己的拨号脚本来实现GPRS无线上网了,其中PPP拨号脚本myppp(所在目录:/mnt/yaffs/ppp/)的实现代码是: #!/bin/sh LOCAL_IP=0.0.0.0 REMOTE_IP=0.0.0.0 NETMASK=255.255.255.0 DIALER_SCRIPT=/mnt/yaffs/ppp/ppp-on-dialer exec /bin/pppd debug papcrypt lock modem nocrtscts /dev/ttyS2 57600 \ asyncmap 200A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \ noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT 其中ppp-on-dialer(所在目录:/mnt/yaffs/ppp/)脚本的实现如下: exec chat -v \ TIMEOUT 30 \ '' \AT \ 'OK' \ AT+ccid \ 'OK' \ at+cgmr \ 'OK' \ at+csq \ 'OK' \ at+CGATT=1 \ 'OK' \ AT+CGDCONT=1,\"IP\",\"CMNET\" \ 'OK' \ at+CGACT=1,1 \ 'OK' \ at+cgdata=\"PPP\",1 \ TIMEOUT 60 \ CONNECT '\c' \ PAP认证配置文件(所在目录:/etc/ppp/)设置如下: # Secrets for authentication using PAP # client server secret IP addresses ####### redhat-config-network will overwrite this part!!! (begin) ####### redhat-config-network will overwrite this part!!! (end) arm * arm chat工具利用AT指令来实现GPRS拨号,成功后pppd工具将建立GPRS模块与嵌入式操作系统之间的点对点连接,接着利用socket编程可实现网页的获取和请求. (2)socket编程的实现 该模块为其他应用提供socket编程的接口函数为int GetHtmlFile(char * hostURL,char * htmlFileName),通过给定的hostURL地址可以获得网页的内容.GetHtmlFile()主要的函数有 ① init_Sock_instance()函数:利用用户提供的参数进行初始化操作; ② Connect()函数:创建TCP连接,连接成功函数返回非零值,否则返回零; ③ Send()函数:发送http请求,请求连接; ④ Receive()函数:接收服务器发送过来的数据并保存到缓冲区,函数返回接收到数据的字节数. 上述四个步骤完成后,GetHtmlFile()函数将调用系统函数fopen()在当前目录下创建一个名为htmlFileName的html文件,并利用系统函数fwrite()将保存在缓冲区的html数据写入该文件供其他程序使用.用户调用GetHtmlFile()函数成功后将返回非零值,函数调用失败则返回零. 4.1.3 网页层次结构显示模块的设计与实现 下载网页后通过网页解析,完成将网页内容以树形层次结构表示在触摸屏左方.HTML/XHTML文档主要内容有标签(tag)、注释(comment)和文本(text).先用fopen函数打开保存好的HTML文档,然后依次读取HTML文档中的字符,在读到需要的标签信息是,提取其中的中文和链接信息,保存到一个解析文档中.函数get_tag(char ch); 用于提取标签,函数deal_tag(char * str); 用于比较标签,函数deal_entity(void); 用于处理字符实体,函数 deal_input(void); 用于处理input即对表单的处理. / 4.1.4 表单模块的设计与实现 当网页中有表单时,需要盲人就要用盲文输入法输输出汉字内容,这样盲人就可以交互性的浏览网页了.表单是由一个或多个输入框、可单击的按钮,多选框组成的,有时甚至是由下拉菜单和图像映射组成的,所有这些都放在
    标签中. 表单数据结构定义如下: typedef struct//一个表单数据结构体 { char *action; //所要传送的目的地址 char method[4]; //传送方式 int input_num; //总的input项个数 int submit_num; //总的submit个数 char **type_h; //type项头指针 char **name_h; //name项头指针 char **value_h; //value项头指针 char **note_h; //note项头指针,中文注释 }BLANK; 表单的元素都放在标签和
    结束标签中.
    标签中的action属性说明了接收和处理表单数据的应用程序的URL.表单处理应用程序放在WEB服务器上特定的cgi-bin目录下. action属性标签如下所示: …
    通过URL,浏览器链接kumquat.com域中名为www的Web服务器,并把用户表单的内容传递给cgi-bin目录中的updata应用程序进行处理.Method属性可以设置POST方法和GET方法,本表单模块中使用了GET方法. 盲人填写号表单后在触摸屏"确认"区域单击一下,浏览器则会提交表单到服务器.服务器会将信息传递给一个能够处理这些信息的应用程序,并产生一个HTML形式的回应,这个回应提示盲人表单是否填写正确.函数void do_blank_fill(struct websitedata *wsd) 进行了表单操作. 4.1.5 语音合成模块的设计与实现 语音模块包括语音识别和语音合成,它们分别提供语音输入和语音输出的功能. (1)语音识别模块 本系统使用的是SPCE061A语音处理芯片.SPCE061A有配套的IDE集成开发环境,支持多种编程语言,通过专用的在线仿真器可将可执行文件下载到芯片上.SPCE061A提供特定人语音识别库和调用的API接口,在进行语音识别之前需要进行训练,让系统能记住操作人的语音特征. 语音识别模块主要提供语音菜单功能.由于识别库每次只能识别5条命令,所以需要按组来进行语音识别,每组有5条命令,每组命令存放在不同的内存空间中.使用时需要通过串口发送给SPCE061A一个组号,SPCE061A调用该组的5条命令供使用者识别,识别正确后SPCE061A再通过串口返回一个数据,通过speech函数实现.盲人通过语音命令可调用相应的功能. (2)语音合成模块 语音合成模块使用的是XF-S4240语音合成模块.XF-S4240 中文语音合成模块,基于嵌入式中文语音合成领域的最新研究成果――InterSound4.0 中文语音合成系统而设计的一款中文语音合成模块.它能够支持GB2312、GBK、BIG5、UNICODE 四种内码格式的文本,支持合成、停止、暂停合成、继续合成等控制命令.XF-S4240通过IIC与ARM9通信. IIC驱动的写函数是IIC_XF_S4240_write if(copy_from_user(my_dev.buffer,buf,count)) return -EFAULT; Set_IIC_mode(XF_S4240_IICCON, &oldiiccon); IIC_WriteSerial(XF_S4240_ADDR,X_ADDR,my_dev.buffer,count); Set_IIC_mode(oldiiccon, NULL); IIC驱动的读函数是IIC_XF_S4240_read Set_IIC_mode(XF_S4240_IICCON, &oldiiccon); IIC_ReadSerial(XF_S4240_ADDR,X_ADDR,my_dev.buffer,count); Set_IIC_mode(oldiiccon, NULL); if(copy_to_user(buf,my_dev.buffer,count)) return -EFAULT; 语音合成先将合成的内容转换为Unicode码(一种通用的国际编码方式),再将转换后的码封装为特定的帧结构,通过IIC总线传给语音合成模块,合成模块会自动识别帧结构,提取合成内容,语音输出. 4.2 盲文输入法设计 盲文输入法有两种输入方式,一为触摸屏输入方式,二为键盘输入方式.两种方式都是将现行盲文转变为汉字.盲文输入法主要由现行盲文输入、字库查找、汉字选择三个模块构成.下面分别对两种输入法方式的设计和实现进行说明. 4.2.1 触摸屏输入方式 (1)盲文输入 盲文点阵由声方和韵方组成,每方各六点.在触摸屏上打点,通过点与点的间距来区分声方点数和韵方点数,并保存所打点的X轴和Y轴坐标值进行分析.由于每个人打点的习惯不同,点与点的间距会因人而异,这会使系统对盲文点阵的识别带来误差.因此设计了特征值来增加系统识别的精准度.不同盲人打点时提取不同特征值,对点击的盲文点阵识别误差就会降低到最小.这里特征值提取的是盲文点阵的两行和两列的长度. 系统识别盲文需要从记录的坐标值中统计一组数据,作为判断盲文的依据,这一组数据为 int p1count=0;声母点数 int p2count=0;韵母点数 int linenum =0;行数 int rownum =0;列数 int longnum = 0;长\数int shortnum= 0;短\数int long_minus= 0;长/数int short_minus= 0;短/数 具体的实现算法如下: ① 预处理:在得到特征值后,先建立一个较正规的六点方阵,这个过程由matrix_set函数实现. ② 平移、查点:以声方点作为首点整体平移到六点正规方阵的首点上.然后,以六点方阵的基准点和声方各点进行延长或缩短,在延长或缩短过程中只要途中经过六点方阵中的任何一点,就说明声方所打点中包含此点的信息.若是没有查到其中一个的信息,声方以首点整体平移到六点正规方阵的第二点,然后再通过延长或缩短进行判断查点,如果还是没有查到其中一个点的信息,就会再平移至.最后到六规方阵的第三点,即平移的最后一个点,再进行查找.韵方和声方处理方法一样.处理声方和韵方点阵后分别得到声方点阵数据和韵方点阵统计数据.以下是平移的代码: x_move = poi[0].x - matrix.matrix_point[aim].x; y_move = poi[0].y - matrix.matrix_point[aim].y; for(i=0;ikeyboard_dbp->cursor(my_stock->keyboard_dbp,NULL,&cursor_keyboard, 0);通过游标检索函数cursor_keyboard->get( cursor_keyboard, &key, &data, DB_ SET)检索同音字起始序列号sequence,最后以该sequence 为关键字在字库表中检索所有的同音字,并将所有同音字按字频从大到小存放在一个单链表中. 表1 音节查询表 声方数 韵方数 行数 列数 长\数短\数长/数短/数 音节 3 0 3 1 1 0 a … … … … … … … 表2 字库快速索引表 音节 同音字起始序列号 最后输入的字 a a0 啊ai ai0 爱 表3 字库表 同音字起始序列号 汉字 字频 词组 a0 啊34 语气词啊 a1 阿6阿爸、阿妈 ai0 爱13 爱心 ai15 唉3唉声叹气 an0 安12 安心 (3)汉字选择 检索到同音字后,首先显示的是上一次输入时最后选择的同音字,及最后输入的汉字;再将其他同音字按字频顺序出现.通过语音模块依次读出各汉字及其词语,以便盲人区别各个同音字.在盲人确定了某个汉字后,可读出该汉字.在选择汉字后,需要对数据库中所选汉字对应的字频表项和最后输入的汉字表项进行修改,这同样需要对表项进行改变,并用Berkeley数据库中的游标添加函数把修改后的数据记录导入数据库. 4.2.2 键盘输入方式 (1)盲文输入 开启盲文输入法后需要盲人对输入法进行熟悉,了解各个按键的功能. 本模块的键盘按键共设置9个,功能设计如下: ①"1"―"6"数字键用于输入盲文序列; ②"ENTER"键用于选择汉字和盲文序列输入完毕后的确认; ③"-"(减)号键用于删除输入的汉字; ④ "0"数字键用于退出输入法. 以上各按键功能实现是通过键盘输入处理线程和"ENTER"键汉字选择线程实现的. 当输入的按键是"1"――"6"时,键盘输入处理线程void * get_keyin(void * data) 将输入的数字存放到一个数组中.按"ENTER"键输入结束后,将该数组的盲文序列赋值给一个全局变量,由这个全局变量将盲文序列传递给汉字查询函数,该功能也是通过键盘输入处理线程void * get_keyin(void * data) 实现的. 在得到拼音序列后,所有的同音字会存放在一个单链表中.系统自动读出同音字对应的词语,当盲人听到想要的汉字时,按"ENTER"键表示"确认",通过void * get_enter(void * data )函数将汉字存放入数组lon中.同时,语音会再次读出盲人所选择的汉字及词语供盲人校对,该段函数为 if( lon_last<500 ) { strcat( lon, character ); lon_last+=2;输入为汉字时加2 lon[lon_last+1]='\0'; printf( "\nlon:%s", lon ); T2S_option( FEMALE, 2, 1 语音读出当前选择的汉字 T2S_t2s( cur->character ); sleep(2); 若发现输入了错误的汉字时,通过按"-"(减)号键盘来调用void * get_keyin(void * data) 函数用于删除输入的汉字.在lon数组中,变量last_lon指向该数组保存的最后的汉字,删除一个字,则将last_lon-=2,并使 lon[last_lon+1]='\0'. 当输入汉字结束后,需退出输入法.则按下"0"数字键,键盘输入处理线程void * get_keyin(void * data) 语音提示退出文字输入,return 语句退出键盘输入处理线程. if ( j == 48 按下键 0 ,退出文字输入 { T2S_option( FEMALE, 6, 1 ); T2S_t2s(escs); return NULL; } (2)字库查找 键盘输入盲文序列后,函数char * get_keyboard_sequence(STOCK_DBS *my_stock , const char *program_name, FILE *error_file_pointer) 根据该盲文序列,在键盘音节索引表中通过嵌入式数据库Berkeley游标检索函数 cursor_keyboard->get( cursor_keyboard, &key, &data, DB_SET) 检索出输入的盲文序列所对应的同音字起始序列号sequence.接着函数int get_words_record(STOCK_DBS *my_stock , const char *program_name, FILE *error_file_pointer,char * sequence) 根据同音字起始序列号sequence在表2字库表中通过嵌入式数据库Berkeley中的游标检索函数检索到所有的同音字,并将所有同音字按字频从大到小存放在一个单链表中. 表1 键盘音节索引表 盲文序列 同音字起始序列号 最后输入的字 35 a0 啊246 ai0 爱 表2 字库表 同音字起始序列号 汉字 字频 词组 a0 啊34 语气词啊 a1 阿6阿爸、阿妈 ai0 爱13 爱心 ai15 唉3唉声叹气 an0 安12 安心 (3)汉字选择 检索到同音字后,首先显示的是上一次输入时选择的同音字即最后输入的汉字,再将其他同音字按字频从大到小的顺序依次读出.通过语音模块依次读出各汉字及其词语,以便盲人区别各个同音字.在盲人确定了某个汉字后,按下"ENTER"键选择语音当前所读出的字.在选择汉字后,需要对数据库中所选汉字对应的字频表项和最后输入的汉字表项加以修改. 第五章 系统测试与应用 5.1 系统功能及配置测试及性能分析 5.1.1 系统测试 (1)测试设备 北京博创公司提供的2410-S开发平台,硬件设备除了开发板上的外,还需要GPRS模块、语音合成模块和语音识别模块.软件方面要安装Berkeley DB软件和语音合成的驱动文件,以及PPP工具包等. (2)测试步骤 ① 启动浏览器,显示浏览器首页界面:左边区域为收藏夹,右边区域为网址输入,首页界面如图5.1所示. 图5.1 首页界面图 ② 双击屏幕左方,进入收藏夹,收藏夹页面如图5.2所示. 图5.2 收藏夹页面 ③ 双击屏幕中间位置即网页选择区,则选中当前语音所读的网址; ④ 双击右方区域,可退出收藏夹,并进入网页界面;网页界面如图5.3所示. 图5.3 网页界面 ⑤ 在网页界面分别对 "保存","刷新"进行测试. ⑥ 双击屏幕中间正文区,选中当前语音所读正文,双击"退出",回到网页界面; ⑦ 双击屏幕上方进入地址栏,调用盲文输入法,输入网页名链接. ⑧ 双击屏幕下方,退出浏览器 以上是对系统的初步测试步骤,测试过程中系统工作正常. 5.2系统特点及优势 本系统主要特点及优势如下: 融合多种先进技术,如嵌入式技术,语音技术及盲文汉字处理技术; 适合盲人的上网方式,帮助盲人方便快捷地获取信息; 盲文输入法实现从现行盲文到汉字转换,使盲人能互动地浏览网页; GPRS具有随时在线的特性,盲人能随时浏览网页; 具有广泛的应用前景. 5.3系统应用 (1)盲人应用: 盲人启动浏览器后,本系统提供的独特的"界面"设计和语音提示使盲人方便能快捷地操作该浏览器;浏览器下载网页后,盲人通过语音读出的网页结构层次内容,可方便地找到想要浏览的网页内容;盲人输入内容,可进行网络的互动,这使盲人浏览网络具有了交互性. (2)视力障碍者应用: 本系统的设计不仅是为盲人考虑,对于视力障碍者,本浏览器由于独特的语音和触摸屏交互的方法也同样适用,可为这类人群带来上网的乐趣. 第六章 结束语 残疾人平等参与社会的程度是社会进步的重要标志,特别是在信息技术和网络技术迅速发展的现在社会.便携式盲人浏览器的开发为盲人朋友打开了了解各种信息的窗口,提供了更多与外界交流的机会,也为他们的生活带来了更多的便利和乐趣. 随着其功能的不断完善,便携式盲人浏览器将会有更好的前景. 参考文献 李善平. Linux与嵌入式系统. 北京:清华大学出版社, 2006.1 李晶皎. 嵌入式语音技术及凌阳16位单片机应用.北京航空航天大学出版社,2003.11 康一梅等. 嵌入式软件设计.北京:机械工业出版社,2007.6 董清富. 盲人浏览器的设计与实现. 计算机工程,2001;27(2):110~111.
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • 大学生方程式汽车大赛  汽车设计大赛  现代汽车设计大赛  中国汽车设计大赛  起亚汽车设计大赛  2014中国汽车设计大赛  2014现代汽车设计大赛  汽车创意设计大赛作品  汽车设计大赛获奖作品  现代汽车设计大赛作品