第一篇:基于深度学习的世纪晟3D动态人脸识别技术大总结
基于深度学习的世纪晟3D动态人脸识别技术大总结
1、前言:
如今,在人与人相连的时代,围绕人提供的服务首先要解决的是辨识人的身份,人脸识别便是从这个需求中产生。
简单来说,人脸识别技术指的是通过比较人脸的视觉特征信息从而进行身份鉴别的技术,既属于图像识别,也属于生物特征识别,是人工智能领域一项典型的细分技术应用。顺应时代的潮流,人脸识别通过过去十年的发展,逐渐从静态的人脸识别走向动态的人脸识别,逐渐在2D到3D之间转换。
在深入了解最新的3D动态人脸识别技术前,需要明确明白几个概念——静态/动态人脸识别;2D/3D面部识别技术,我们将结合案例<世纪晟科技3D 动态人脸识别>讲解。
2、概念解说
静态人脸识别——
静态人脸识别指的是在特定的区域或范围之内进行识别。这项技术有个很明显的缺点,就是用户容量会比较小,只能适合小型公司的考勤
动态人脸识别——
动态人脸识别与静态人脸识别不同,它实现了在一定识别范围内,人以自然的形态走过去,摄像头会进行信息的抓拍和采集,发出相应的指令,进行动态人脸识别,实现相关功能。这个的优点就相当明确,识别过程不需要停驻等待,而且识别率也蛮高。
2D面部识别技术——
说到2D面部识别技术,要求就相对简单,它只需要你在检测时露出脸部的眼睛就可以基本完成解锁,即使挡住鼻子、戴上口罩也不会受到影响。
3D面部识别技术——
而3D面部识别技术,针对识别到的图像会比较苛刻,先感知判断物体的靠近,接着扫描并传输给深度神经网络系统进行初步判断,进行活体检测之后再进一步获取空间深度信息,这才完成整个识别过程。
而如今,随着iPhone 8将人脸的应用提升到更高的层次,人脸识别技术已经成为未来短时间内最炙手可热的技术之一。3、3D动态人脸识别方法
人脸图像处理在诸如人脸表情识别、人动作识别、头部跟踪等已经广泛应用,世纪晟科技在它的技术核心——3D动态人脸识别中有比较详细的运用,接下来分别对应基于深度学习的世纪晟科技动态3D人脸识别技术结构,对人脸检测、活体检测、3D人脸建模、特征点提取、特征点比对做详细的技术分析。
(一)动态3D人脸识别大体流程 人脸检测→活体检测→3D人脸建模→特征点提取→特征点比对→识别输出结果
(二)基于深度学习的动态3D人脸识别技术步骤
A、人脸检测
人脸检测的目的就是在一张图中找到所有的人脸,这里采用了MTCNN(多任务级联卷积神经网络)人脸检测算法。
MTCNN主要分为三步:
最初先对图像进行多尺度变换,获取图像金字塔,获取图像多尺度信息。(这部分内容,世纪晟科技人脸识别已经对人脸检测效果不错的MTCNN算法做一个梳理,本文便直接借鉴。)
主要使用一个全卷机网络,获取候选框和这些候选框的bounding box regression向量组。然后评估这些候选向量,并进行校准。最后使用非极大化抑制来去除大量重复的候选区域。
B、活体检测
考虑到一旦虚假人脸攻击成功,极有可能对用户造成重大损失,所以还有一项必不可少的活体检测,为现有的人脸识别系统保障可靠且高效。这一方面,行业内也研发了不少属于自己的活体检测sdk,本文案例中世纪晟科技人脸识别也对此有所研发。
活体检测技术可以有效阻挡PS换脸、视频、三维人脸模型、高清人像照片等各种不同类型的攻击。
C、3D人脸建模
人脸是塑性变形体,对于人脸的特征抽取和识别,更适合用弹性模型来描述。人脸建模任务即根据输入的人脸图像,自动定位出面部关键特征点,如眼睛、鼻尖、嘴角点、眉毛以及人脸各部件轮廓点等。D、特征点提取
DeepID网特征提取
DeepID的目标是人脸验证,也就是判断两张图片是否是一个人,同时衍生出人脸识别、多次人脸验证。
softmax分类
为了逼近最佳,Softmax将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类,然后把所有相关全部拉出来评分,最后还归一化。
比较好的特征点提取就是本文举例世纪晟人脸识别技术,采用的是DeepID网特征提取+softmax分类两种相结合的方式,可以参考一下。
E、特征点比对
人脸关键点检测有很多应用,大致可以分为六类:(1)灰度信息的方法;(2)先验规则的方法;(3)几何形状的方法;(4)统计模型的方法;(5)小波的方法;(6)3D 方法
将整体特征点结合局部特征点进行三维人脸识别,能更好地使合成的模型图像最佳匹配输入图像,从而得到人脸3D形状和纹理,输出比对结果。
动态3D人脸识别技术市场趋势
广阔的市场需求,让人脸识别产业更加积极研发人脸识别相关技术。
目前,市场已经布局或正在布局的人脸识别厂商逐渐增多,主要都在于攻克3D识别技术领域。与此同时,动态3D人脸识别技术不断成熟,但市场应用还不是很多。“像人脸识别这种的,关键的不能只有算法,还要关注技术实际生活场景中的应用。”来自国内专注计算机视觉领域创业公司——世纪晟科技的谈话。在今年人工智能、人脸识别技术全面发酵的趋势下,不难预见,人脸识别还将得到更进一步的应用,而动态3D人脸识别技术也将成今年行业生物识别的新趋势。虽指纹识别仍是主流应用,但是增长空间有限,发展速度已然不及人脸识别。
第二篇:2018最新:综述深度学习下的世纪晟人像抓拍识别技术特点
人像抓拍识别特点 附世纪晟科技案例
前言
“刷脸支付”、“刷脸解锁”等人脸识别技术的最新应用,让我们看到了人工智能为我们的生活带来的便利。在提供便利服务的同时,人脸识别的准确率也在大幅度提升,这方面尤其离不开中国科技企业的努力。
NIST曾经把中国和俄罗斯供应商的算法排名置于其他供应商之上,表明中俄人脸识别准确度世界领先。目前在全球范围内,从事人脸识别技术的企业很多,如海康威视、世纪晟科技、旷视科技、云从科技等。类似世纪晟科技人脸识别企业为人工智能时代提供的不仅仅是便利,它更可以在社会的每个角落保卫我们的人身安全。
目录
人脸抓拍识别 人脸抓拍识别技术组成 人脸抓拍识别技术特点 系统总体设计 3D动态人脸识别
人像抓拍识别
人像抓拍主要设于布控区域,在人流量较大或者较少的区域对人脸信息(外形、肤色等)和人像数据库(脸部特征等)进行抓拍、比对识别。在人脸识别技术中,人像抓拍与实时识别总是同时进行。随着深度学习方法的应用,人像抓拍识别技术的识别率已经得到质的提升,与其他生物特征识别技术相比,在实际应用中具有天然独到的优势:通过摄像头直接获取,可以非接触的方式完成识别过程,方便快捷。
人像抓拍识别技术组成
人像抓拍识别技术主要分为两部分:
第一部为前端人脸人脸活体认证技术,主要支持
android、ios平台,在前端通过眨眼、张嘴、摇头、点头等组合动作,确保操作的为真实活体人脸。
第二部为后台人像抓拍识别技术,该环节通过在人脸活体认证技术环节取得整张人脸图像后,再通过扫描识别身份证,取到身份证头像后,将现场人脸与身份证上的人脸进行比对识别,判断是否为同一张人脸。
接下来举个实际企业的例子,我们可以从世纪晟科技3D动态人脸识别这一核心技术比较全面地了解人像抓拍识别这一技术。(目前世纪晟科技人像抓拍识别技术率已经达到99%,而且已应用在安防、社区、养老院、酒店、商业大厦等领域,这方面可以结合更多的实际案例做更多的解释。)
系统总体设计
世纪晟科技人脸识别系统采用具有完全自主知识产权的3D动态人脸识别算法为核心算法,配合人脸跟踪算法、人脸抓拍算法、人脸质量评分算法和人脸识别算法,结合配套的硬件设备及后端3Dface云平台系统,实现了3D人脸比对、动态N:N人脸图片检索等功能。
人脸抓拍识别系统采用分布式架构,支持10亿级别以上人脸注册库/人脸抓拍库、30万黑名单库,极大的满足公安对重点人员的事前预警和事后追查需求
依托综合可靠的通信网络、分布式数据库和集群计算等多项技术,充分考虑系统安全性、可靠性、可扩展性。
3D动态人脸识别 世纪晟科技对人脸识别算法进行了全面优化,从视频中分析出人脸,并在人脸达到最佳角度时进行抓拍,人脸抓拍大小范围可达到80像素到500像素,为人脸比对与分析提供最高质量的人脸数据来源
第一代人像抓拍识别技术
一个屏幕多人多种角度全部不能识别
第二代人像抓拍识别技术
· 复杂场景:室内、室外、侧光、背光、仰视等 · 复杂对象:黑框眼镜、长刘海、化妆、年龄变化、胖瘦变化
· 复杂条件:镜面、偏转、多人
基于深度学习的3D动态人脸识别技术
人脸检测
人脸检测的目的就是在一张图中找到所有的人脸。类似世纪晟科技就采用了MTCNN(多任务级联卷积神经网络)人脸检测算法,解决了传统算法对环
境要求高,人脸要求高,检测耗时高的弊端。
活体检测
利用3D摄像头拍摄人脸,得到相应的人脸区域的3D数据,并基于这些数据做进一步的分析, 最终判断出这个人脸是来自活体还是非活体。
3D人脸建模
根据输入的人脸图像,自动定位出面部关键特征点
特征点提取及比对
我们说的关键特征点,包括了人脸轮廓、眼睛、眉毛、嘴唇以及鼻子轮廓。这部分我研究并借鉴了世纪晟科技采用的DeepID网特征提取+softmax分类的方式,可以提取人脸中200多个关键点,达到高精度,高识别率的效果
人像抓拍识别技术特点综述
高智能,实时抓拍
前端设备智能检测、追踪和识别人脸,不需要人员配合,被动无感知
速度快,抓拍率高达99.8%
高速采集人像特征照片,每帧最多可抓拍出 100 张以上的人脸照片,世纪晟科技在人脸捕捉识别上已经能在每秒抓取图像突破25张。
过滤重复数据,不高于10% 重复抓拍率是目前智能人像抓拍机在实际应用过程中不可避免的现象,这主要是由于实际场景中人群的相互遮挡,人员长时间逗留,移动规律不定等原因而致。那么,世纪晟科技经历长期检测试验,发现在运动预测的基础上结合特征识别智能分析,便能有效过滤掉重复人脸数据,在复杂场景中将人脸重复抓拍率控制在 10% 以内。
多人脸动态识别,视频流全帧率、全画幅人脸检测 世纪晟科技基于深度学习的人脸检测识别算法,克服识别检测捕捉难题,支持多人同屏识别,只要在取景范围内,满足一定像素要求的人像都会被抓取检测。
处理迅速,人脸多表情精准识别
以自主研发的3D动态人脸识别算法为核心技术,一次性克服了侧脸、半遮脸、模糊人脸、表情复杂多变的捕捉人脸识别,几大提升了各种现实情况中的捕捉人脸的检测效果。
因此该技术在公安业务中的应用需求非常大。并且随着近年来深度学习等新理论和方法的突破,人脸抓拍识别技术的准确性有了大幅度提升。
写在最后
个人身份确认是社会较为普遍的基本需求,自古以来面相是确定人身份的重要依据。
印象中,世纪晟专注于计算机视觉的人工智能,他们采用灵活的模块化设计,自主研发的3D动态识别算法技术为核心,满足不同项目的人像捕捉识别需求。同时,设置、操作颇为简洁、具有很强的抗干扰性能,对夸张表情、大角度斜侧等条件下也可识别,实现了高效的人像识别效果,已经具备实战实力,其对人像特征点提取之多,增强了人像识别的抗干扰能力。
计算机人脸抓拍识别技术是一项非常具有挑战性的任务,相比指纹、虹膜等生物特征的身份鉴别技术,人脸图像信息的获取可以在非合作条件下完成,
第三篇:JSP动态开发技术课程学习总结
《JSP动态Web技术》
课程学习总结
本学期在学习“JSP动态Web技术”的时候,我深刻的明白了,作为现今高校计算机专业学生必修的一门专业课程,我们应当主要学习目前流行的JSP开发语言及掌握先进的Web开发技术。课程的重点是用JSP开发Web应用程序,如开发电子商务网站;课程的难点是JavaBean技术、Java Servlet技术和JSP的开发模型。
通过一学期这门课程的学习,我掌握了JSP语言基础知识、JSP内置对象,能熟练运用JSP的文件操作、JSP数据库访问技术、JavaBean技术和Servlet技术。掌握编写基本JSP程序、JSP的文件操作及JSP的数据库系统开发方法,能利用JSP应用模式JSP+JavaBean和JSP+JavaBean+Servlet进行Web应用系统设计、开发能力。
一、学习内容 第一章 JSP概述
本章主要学习了JSP技术的特点以及JSP程序的结构及运行原理;JSP网站运行环境的配置;在Eclipse环境中开发JSP程序的方法。
JSP技术的优势:一次编写到处运行、系统的多平台支持、强大的可伸缩性、多样化和功能强大的开发工具支持。在原理上,JSP是编译成Servlet执行的,所以JSP和Servlet一样,具有功能强大、跨平台等特点,但JSP比Servlet更加容易编写。
在配置JSP开发环境时,首先需要安装JDK,完成设置后,需要安装Web服务器。
Eclipse和My Eclipse是现金国内企业最流行的开发工具。除了使用Eclipse和My Eclipse进行JSP的开发外,常用的其他J2EE应有服务器有WebSphere、JBoss、WebLogic等。
SP使得创建和维护HTML更容易,同时依旧提供对servlet的完全访问(即
可以使用各种servlet的特性)。
其他技术使用类似的方式,但移植性上有差距并且不允许我们使用Java来编写实际的代码。
第二章 JSP语法与内置对象
本章主要学习了JSP的基本语法;JSP的内置对象;JSP的开发环境。1.JSP语法基础
JSP指令标签,主要用来提供整个JSP网页相关的信息。JSP动作标签,利用它可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。JSP表达式,在JSP程序中,可以采用表达式将指定结果输出到客户端HTML中。
2.JSP内置对象
JSP有9种内置对象,其中request、response、session、application、out对象是最常用的。
Request内置对象,代表的是来自客户端的请求。在客户端输入表单信息后,需要提交到相关的服务器端JSP程序进行处理。
response内置对象,代表的是对客户端的响应。用于产生可以发送到客户端的回应信息。
session内置对象,属于javax.servlet.http.Httpsession接口的一个实现类。
applicatio内置对象,属于javax.servlet.ServletContext接口的一个实现类,主要是获取或更改Servlet的设定。
out内置对象,属于javax.servlet.jsp.JSPWriter接口的一个实现类,主要是将结果输出到网页上。
学习一门语言,主要就是学习这门语言的基本语法,就如同学习英语是一个道理。学习了本章之后,我对Java语言有了进一步的了解。对学习以后的知识非常地有帮助。但在学习的过程中,也遇到了一些问题。语法作为一门语言的基础,非常的重要。一门语言学的好与坏,就看你对语法的掌握程度。
第三章 JSP文件操作
本章主要学习了File类及其常用方法;文件流进行文件的在线读写;文件上传下载的应用开发技术。
1.File类及相关属性
创建File对象File(String Path)获取文件属性 2.文件上传 3.文件读写类
4.文件输入流FileInputStream和文件输出流FileOutputStream 5.文件字符流类FileReader和FileWriter 6.文件随即访问流RandomAccessFile类
通过本章的文件操作的学习,学会了如何利用JSP进行文件/目录的创建、删除和获取属性,会利用字符流进行文件的读写,以及文件上传的方法。文件的创建、删除和获取属性都比较简单,而对于文件的读写却比较难记住。
第四章 JSP数据库访问技术
本章主要学习了使用JDBC连接数据库的技术;在Web页面实现浏览、查询、维护数据库数据技术;数据分页显示技术;网站后台的开发和管理思想。
1.JDBC的概念和技术特点。2.JDBC中的常用接口及其方法: 驱动程序接口Driver 驱动程序管理器DriverManager 数据库连接接口Connection 执行SQL语句接口Statement 执行动态SQL语句接口PreparedStatement 执行存储过程接口CallableStatement 访问结果集接口ResultSet 3.掌握连接数据库的步骤:“加载JDBC驱动程序”、“创建数据库连接”、“执行SQL语句”、“获得查询结果”和“关闭连接”。
4.掌握“SQL Server 2000数据库的连接”、“Access数据库的连接”以及“MySQL数据库的连接”的方法。
5.掌握数据库的常用操作技术(查询、添加、修改、删除等)。6.理解连接池的优缺点。
7.掌握在Tomcat中配置连接池的方法。
第五章 JSP与JavaBean JavaBean是一种Java语言写成的可重用组件,实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者某个业务的对象。
1.JavaBean的基本组成 2.JavaBean的工作原理
3.利用JavaBean进行抽象,简化JSP 4.编写和配置JavaBean程序的方法 5.JSP中调用JavaBean基本方式 6.JavaBean与JSP想结合编程的策略
通过本章的学习,掌握了JavaBean的结构及生命周期,JSP调用JavaBean的方法。学会用JavaBean操作数据库,检索数据分页处理的方法。
JavaBean描述的是Java的软件组件模型。在Java模型中,通过JavaBean可以无限扩展Java程序的功能,通过JavaBean的组合可以快速地生成新的应用程序。JavaBean主要应用在非可视化领域,在服务器端应用方面表现出了越来越强的生命力。非可视化的JavaBean,顾名思义就是没有GUI界面的JavaBean。在Web项目中常用用来封装业务逻辑、数据库操作等,可以很好地实现业务逻辑和前台程序的分离,使得系统具有更好的健壮性和灵活性。
第六章 JSP与Servlet Java Servlet是一些能够动态扩展Web服务器功能的Java组件,JSP技术本身就是基于Servlet的,当客户请求一个JSP页面时,JSP引擎根据JSP页面生成Servlet文件。
1.Servlet的生命周期
2.Servlet与JSP交互技术 3.常用的Servlet API应用 4.基本的 Web应用开发模式
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
Servlet是一种独立于平台和协议的服务器端的Java技术,它是使用Java Servlet应用程序设计接口(API)及相关的类和方法的Java程序,可以用来生成动态的Web页面。Servlet主要用于处理客户端传来的HTTP请求,并返回一个响应。在开发Servlet时,可以直接继承javax.servlet.http.HttpServlet类,并在web.xml中进行描述(映射执行Servlet的名字、配置Servlet类、初始化参数、安全配置、URL映射和启动优先权的设置等)。
第七章 Web项目开发
本章主要学习了一个典型的Web应用项目:网上书店。学习如何灵活运用JSP的技术,将业务逻辑和业务表现尽量地分开。
1.网上书店系统的功能 2.网上书店流程 前台流程 会员操作流程 后台管理流程 完整的购书流程 3.系统功能模块划分 项目开发流程
1.SWOT(优势,劣势,机遇,挑战)分析
也就是系统的定位,系统的愿景规划,系统地目的,系统自身分析,和外部因素分析。
2.需求分析
客户需求或者用户需求分析,也就是系统的功能,使用流程,界面,开发平台,维护和升级等
3.系统架构(解决技术问题)
也就是让需求实现,对开发系统的人员,系统模块,系统平台,界面搭出一个大的框架。
4.信息架构(解决内容问题),UE 系统的内容,使用流程,用户体验,毕竟web的本身就是信息的载体。5.用户界面设计(UI),UE 信息架构完成就可以进入用户交互界面设计阶段。风格,界面,交互,体验,动画等。
6.网页设计及制作 | 系统程序编写 | 文档编写(真正开发阶段)设计部门/页面制作:XHTML(信息架构)|XML/XSLT + CSS(用户界面设计)+ DOM | AJAX(表现)+ Flash等
技术部门/系统程序编写:模块(类)开发,数据库,服务器 文档撰写,让每个开发阶段内部透明,达到团队的良好沟通
(个人觉得DOM和AJAX应该更多的属于设计和体验,应该属于设计部,虽然也是编程。)
7.系统整合
模块的整合,程序和数据库的整合,程序和界面的整合,系统和服务器的整合等
8.系统测试
系统调试找出bug,用户体验,改善细节等 9.系统发布
系统正式发布,确定版本,说明书,帮助文档|FAQ,SEO等
10.系统维护
系统更新和系统和服务器维护等
二、学习总结
通过本学习对JSP的系统学习了,在足下的实训,运用到具体的JSP专业知识,在系统开发、程序设计的过程中,让我学会了如果灵活运用JSP的技术及项目开发的流程,了解了大型Web项目的JSP开发思路与方法;以及大型项目的开发方法。在学习的过程中对大型项目开发的方法不能够完全的理解,所以在做项目的时候遇到了不少的问题,但都在老师的指导下完成了项目的开发。
对于本时的专业学习了,由于前期未能对其高度重识,故有一些实作内容未能认真完成,即使完成的总结,有一些也有待完善,进步的空间还较大,本学期的专业学习过程中,让我对JSP当中的很多的知识有了深刻的理解,对于动态网站、静态网站也有明确的概念。
当然对于本学期的专业,也有一些不足,希望,以后在工作过程中,还能不断学习JSP技术,让自己的专业知识得到更进一步的提升。
第四篇:总结:谈谈学习ASP动态网页制作技术的编程心得
总结:谈谈学习ASP动态网页制作技术的编程心得
学好一门编程语言有两个条件是必不可少的,一是理论和实践结合,在实际例程去验证书本上的理论能加深你对理论的理解;二是学会总结,把学习、运用中的心得体会记下来,当成一种经验或教训加以提炼并在日后的应用中加以改进,一定能提高你对这门编程语言的认识。以下是笔者在学习和运用ASP编程中的两点经验,希望能对大家有所帮助。
ASP页面内VBScript和JScript的交互
ASP具有管理不同语言脚本程式的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP研发环境提供了两种脚本引擎,即VBScript(缺省)和JScript。不过,研发者并没有被限制于只能使用这两种语言,只要能够提供合适的ActiveX脚本引擎就能使用所有脚本语言。
脚本语言的选择往往基于许多不同原因:他可能是研发者最为熟悉的语言,可能是对给定工程来说能够提供最多特色支持的,也有可能是最具效率的。不同的环境和需求使得我们在选择脚本语言时注重不同的因素,同时也使得我们在某些时候面临选定的脚本语言不能直接提供其他语言固有的函数这一问题,或某个脚本已写成但用的却是另外一种脚本语言。
此时应该怎么办?是否需要用当前所用的脚本语言重写这些脚本?或说,是否有可能在一种脚本语言中调用其他脚本语言的内置函数?本文要说明的就是在ASP应用中怎么让VBScript脚本和JScript脚本交互以最大限度地获得两种脚本语言的特色支持。
一、VBScript和JScript的内置函数
在VBScript和JScript中,有大量的内置函数功能是相同或类似的。然而,在一种脚本语言中内置的函数并非总是在另外一种脚本语言中也有对应的函数。例如,VBScript提供了许多用于操作字符串和格式化数据的函数,这些函数在JScript中并不存在。这些函数包括StrReverse()、Filter()及FormatCurrency()等。在另一方面,JScript所提供的用于管理数组、字符串编码等的函数在VBScript中也没有定义,如join()、reverse()、pow()、位操作、escape()和unescape()等。
那么,如果在JScript程式中需要一个VBscript函数该怎么办呢?
二、异种脚本的互相调用
如果需要在JScript脚本中调用一个VBScript中内置的函数,则应该写一个VBScript用户定义函数(在这里调用VBScript内置函数),然后在JScript脚本中象调用公用JScript函数相同调用这个用户定义函数。
例如,如果要调用的VBSCript内置函数是FormatCurrency(),则能声明如下自定义函数:
< SCRIPT LANGUAGE=“VBSCRIPT” RUNAT=“SERVER”> Function FormatValue(Value)
FormatValue = FormatCurrency(Value)End Function
< /SCRIPT>
接下来在JScript代码中就能象普通JScript函数相同调用FormatValue()了。用类似的方法也能实现VBScript代码调用JScript函数。
应用同样的规则,我们能在所有脚本内调用所有用户定义函数。不过,从JScript脚本内调用一个不带参数的VBScript过程(Sub)时应略加注意,此时在JScript中应该象调用一个不带参数的JScript函数相同调用他,如用foo()调用VBScript Sub foo过程。
三、数据共享
在某些情形下混合运用VBScript和JScript函数是非常有用的,但在不同语言脚本之间共享数据也可能非常有用。实现这种共享的方法非常简单:不管使用的是什么语言,只要是在页面级声明的变量就能任意引用。
对象的使用方法也相似,能任意选用合适的语言读取、修改属性或调用对象的方法。当然给定对象的属性和方法是由创建该对象实例的语言所定义的。正如上例VBScript的过程调用,当从JScript中调用一个不带参数的VBScript对象的方法时,其调用方法也遵从JScript的调用规则,反之亦然。
四、数组管理
数组共享问题稍微复杂一点。虽然数组也象其他变量相同能在不同语言脚本之间共享,但必须注意兼容方面的问题。
VBScript数组在JScript下能用VBScript的符号引用,即用myArray(2)引用数组元素而不是JScript的数组元素引用符号myArray[2]。此外,还能使用一个特别的JScript对象??VBArray对象将VBScript数组转换为JScript数组。下面的代码从VBScript数组myVBArray创建JScript数组myJSArray:
var Temp = new VBArray(myVBArray)
var myJSArray
myJSArray = Temp.toArray()
上述代码首先创建一个临时的VBArray对象,然后使用他的toArray()方法将自己转换为JScript数组。此后就能象普通JScript数组相同使用myJSArray,如myJSArray[1]。但应当注意的是,toArray()方法将把一个多维的VBArray转换为一维的JScript数组。
从VBScript中引用JScript数组更为复杂。虽然在VBScript中我们能直接访问JScript数组相关的方法和属性,但没有直接访问JScript数组的单个元素的方法。也就是说,我们能在VBScript脚本中读取JScript数组的长度属性,如下所示:
x = myJSArray.length
但无法直接读取该数组的单个元素,下面的VBScript代码是不正确的:
x = myJSArray(3)
解决该问题的一个可行的方法是执行一个转换过程,如下面的代码所示,此处假定VBScript是缺省的脚本语言:
< %
Dim Temp
Dim myVBArray
Temp = myJSArray.join(“, ”)
myVBArray = Split(Temp, “, ”)%>
此处的JScript join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串,VBScript Split()函数将字符串转换为VBScript数组。注意这里我们是在VBScript环境下调用JScript的join方法。依照此例,我们能通过自定义VBScript函数来模拟JScript的VBArray对象的toArray()方法以实现JScript数组到VBScript数组的转换。
用模板建立动态ASP页
对于模板,我想大家可能都有一些概念,在word中非常多模板,设计好了大概的版面,你只要用你自己的话填充那些占位字符就好了。这儿的模板大概也就是这个意思,页面中相对稳定的部分固定下来,其他的部分根不同的情况在输入不同的内容。其实在DreamWeaver中也有模板的功能,不过那个静态的,只能手动填充内容,而这儿讲的是动态的自动的内容填充。
首先,我先来解释一下为什么要用到模板文件。有时候,模板能够带给你对网页功能和布局更为完整的概念。当你看到Word的模板格式之后,就知道最后版面是个什么样子的了,在这儿也是如此。例如,你能保留ASP语句,而使用不同的模板来建立不同的页面风格。
这样,你就不用为每种不同风格的网页分别来写不同的ASP页面了,这显然能为我们节省非常多时间和精力。而且,模板文件能够让你更容易的浏览页面代码,不用担心ASP和HTML的混杂搞的你头昏脑胀。你能只用把注意力集中在HTML上,而完全不用去管ASP了。再有就是,摸板非常简单,你绝对非常快就能搞懂搞定。在这篇文章中,将会用到一个数据库??一个用的非常广泛的雇员表。包括雇员ID,姓名,照片,及工作摘要和照片的注脚。下面是这个Access数据库的结构:
文件名Employees ID
自动计数(Autonumber)FullName
文本最多255个字符
Duties 注释类型
PicCaption
文本-最多50个字符
一个非常简单的数据库,是吧。当然你能按需求来扩展他,那就是你自己的事了。我假设你已了解数据库的基本操作,这样我不用在这上面花太多的笔墨,其实这儿的代码都是非常简单的,只要你知道一些基本的东西,就能把他看懂。建立了数据库之后,我们能开始建立模板文件了。这个文件是每个页面的骨架。我没有用到表格,那样有些麻烦,而我非常懒,而且,也不用加入,标签,因为那是要加在ASP页面中的。所以到最后,他的样子就是这样了:
Full Name:
%name% < br>Description of duties:
%duties%
This picture was taken: %date%
Employee ID: %empID%
就是这样了!这就是个简单的模板。把他存为template.tmp,在后面的ASP页面中将要引用到他。要注意的是:我们能在模板中加入各种HTML标签,你完万能在摸版中定义好网页的结构和样式,就像实际写一个网页相同,只是要把关键的地方标出来??注意到了那些%围着的东西了吗?那就是模板的精髓了。或许你已注意到,那些%围着的是和数据库中的字段意义对应的。看看下面的ASP代码,是怎么读入模板和数据库文件,把他们揉和在一起,然后输出我们想要的HTML页面。
这就是所有的代码了,非常简单,不是吗?他所作的只是打开模板文件,按顺序读入每一行,然后用冲数据库中读入的实际的字段值来代替模版中那些%img%,%name%标记。而且,他还把在“Duties”字段内大段文本中的回车解释成HTML的回车,这样就不至于打乱整个的排版格式了。怎么样?轻松搞定吧。模板在某些应用上真的是能发挥奇效,省时省力。理论上,你还能修改这段代码,用FileSystemObject来读写文本,这样数据就不一定要存储在数据库中了。在一些应用中,比如即时的新闻发布,这样也许更为方便一些。