软件架构项目报告.docx

上传人:wux****ua 文档编号:9099880 上传时间:2020-04-03 格式:DOCX 页数:27 大小:1.35MB
返回 下载 相关 举报
软件架构项目报告.docx_第1页
第1页 / 共27页
软件架构项目报告.docx_第2页
第2页 / 共27页
软件架构项目报告.docx_第3页
第3页 / 共27页
点击查看更多>>
资源描述
软件架构项目报告目录1 项目概述42 需求分析42.1系统用例图和流程图42.2功能需求52.3非功能性需求62.3.1性能需求62.3.2 质量需求62.3.3安全性需求62.4可行性分析62.4.1技术可行性72.4.2经济可行性72.4.3操作可行性73 总体设计74 详细设计74.1感知哈希算法74.1.1算法概述74.1.2 算法详细步骤84.2 Levenshtein距离算法104.2.1算法概述104.2.2生成图片的指纹114.2.3计算编辑距离,得出相似度134.3 欧式距离相似度算法164.3.1算法概述164.3.2算法步骤164.4 加权最优解194.4.1算法概述194.4.2算法步骤195 系统实现205.1界面设计215.2系统集成215.2.1系统目录结构215.2.2 structs具体实现225.3系统环境和运行235.3.1系统环境235.3.2运行效果236 测试271 项目概述2 需求分析2.1系统用例图和流程图使用基于场景的用例分析方法可知,在操作系统的场景中用户可进行的操作如下:(1)用户加载目标股票的TXT文件,将目标股票的TXT文件生成股票走势图(2)将目标走势图与其他走势图进行比较,计算两两之间的相似度(3)选取与目标走势图相似度最高的走势图(4)输出结果并保存系统用例图如下所示:相应的流程图如下:2.2功能需求通过上面对系统的分析可知,系统核心的功能主要有如下几种:(1) 批量导入样本文件;(2) 形成走势图,即股市中的K线图;(3) 计算相似度,并选取相似度最大的走势图;因此可以将整个系统分为两大功能模块,功能模块图如下所示:2.3非功能性需求2.3.1性能需求由于系统运行需要导入大量的数据,因此要求系统在算法实现上能保证尽可能的提供运行效率,降低反应时间。同时,本系统是对股市行情的研究比较,开发的系统要求结果准确。2.3.2 质量需求对于系统的相关质量的属性需求如下表:质量属性序列号 质量属性要求说明 1 有导入目标股票的TXT文件方法2 有三种不同算法来计算相似度3界面简洁大方,方便操作 2.3.3安全性需求1. 服务器应该在合适温度、适度的环境下工作,避免剧烈的震动;2. 各种电源线和数据线的铺设要合理而安全,避免出现意外脱接现象的发生;3. 服务器所在地区应保持电压稳定及电源的持续供应,尽量避免高频率的人为断电现象(例如:错拉电闸、保险丝熔断等),以保持服务器中数据的一致性;4. 当提前获知断电时间时,应在网页上及时发布相关信息(例如:服务器将于几时几分关闭),避免站点的突然关闭;5. 服务器管理员应确保服务器密码不泄漏;6. 服务器所在房间应做好安全防盗工作,避免盗窃现象的发生。2.4可行性分析2.4.1技术可行性系统实现依靠相对比较熟悉的HTML、JavaScript、java语言,功能实现也相对简单。因此完成此项目的风险较小。2.4.2经济可行性本系统所用到的应用软件、硬件系统都易于获得.因此,开发成本较低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。2.4.3操作可行性本系统是直接面对用户的,而用户往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。界面简洁友好,操作方便。3 总体设计4 详细设计4.1感知哈希算法4.1.1算法概述感知哈希算法pHash(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似.。为降低均值对算法的影响程度,pHash算法使用离散余弦变换(DCT)来获取图片的低频成分。而对于两张图片相似度的计算则是基于汉明距离的。离散余弦变换(DCT)是种图像压缩算法,它将图像从像素域变换到频率域。然后一般图像都存在很多冗余和相关性的,所以转换到频率域之后,只有很少的一部分频率分量的系数才不为0,大部分系数都为0(或者说接近于0)。汉明距离是以理查德卫斯里汉明的名字命名的。在信息论中,汉明距离描述的是两个n长码字x=(x1x2xn),y=(y1y2yn)之间的距离,Dx,y=k=1nxkyk其中,表示模2加运算,xk0,1,yk0,1.D(x,y)表示两码字在相同位置上不同码符号的数目的总和,它能够反映两码字之间的差异,进而提供码字之间的相似程度的客观依据。4.1.2 算法详细步骤(1)缩小尺寸:pHash以小图片开始,但图片大于8*8,32*32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。具体的代码实现如下图:(2)简化色彩:将图片转化成灰度图像,进一步简化计算量。下图是转化为灰度图像的函数grayscale()的实现;(3)计算DCT:计算图片的DCT变换,得到32*32的DCT系数矩阵。下图是进行二维DCT变换的函数applyDCT()的实现。(4)缩小DCT:虽然DCT的结果是32*32大小的矩阵,但我们只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。(5)计算平均值:如同均值哈希一样,计算DCT的均值。(6)计算hash值:这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为“1”,小于DCT均值的设为“0”。组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。(7)对比图片指纹:得到图片的指纹后, 就可以对比不同的图片的指纹, 计算出64位中有多少位是不一样的。一般情况下,如果不相同的数据位数不超过5, 就说明两张图片很相似, 如果大于10, 说明它们是两张不同的图片。这里是基于汉明距离来对相似度进行计算,定义的相似度计算公式为:sim=1-汉明距离位数下面两张图片分别是对汉明距离和相似度的实现函数,具体如下:. 4.2 Levenshtein距离算法4.2.1算法概述我们这里所要研究的相似度算法是这样进行的,UML图如上。4.2.2生成图片的指纹在我们的程序中,生成图片哈希值的方法是produceFingerPrint(),他返回的是一个String类型的字符串类型。这个方法里面主要涉及6个部分:(1)读取图片实现这个功能的方法是通过readImage(filename)方法来完成的,这个方法封装在ImageRead类中,它通过获取图片的路径名来得到该图片。代码如下:(2)将图片缩小到固定尺寸因为我们得到的图片可能会大小不一致,多以我们需要将他们缩小成一致的格式,这里我们将他们缩小成8*8的尺寸,总共64个像素,除去了图片的细节,只保留了结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。实现方法是:thumb(BufferedImage source, int width,int height, boolean b),代码如下:(3)简化色彩将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。通过灰度值的计算来实现的,方法为rgbToGray()(4)计算平均值计算64个像素的灰度平均值,通过方法average()来实现。代码如下:(5)比较像素灰度将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。(6)计算哈希值将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。代码如下:4.2.3计算编辑距离,得出相似度计算图片指纹的相似度。进而算出图片的相似度。(1)编辑距离概述Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。(2)举例说明a.首先是有两个字符串,这里写一个简单的 abc和abeb.将字符串想象成下面的结构。A处是一个标记,为了方便讲解,不是这个表的内容。abcabcabe0123a1A处b2e3c.来计算A处出得值它的值取决于:左边的1、上边的1、左上角的0.按照Levenshtein distance的意思:上面的值和左面的值都要求加1,这样得到1+1=2。A处由于是两个a相同,左上角的值加0.这样得到0+0=0。这是后有三个值,左边的计算后为2,上边的计算后为2,左上角的计算为0,所以A处取他们里面最小的0.d.于是表成为下面的样子abcabcabe0123a10b2B处e3在B处会同样得到三个值,左边计算后为3,上边计算后为1,在B处由于对应的字符为a、b,不相等,所以左上角应该在当前值的基础上加1,这样得到1+1=2,在(3,1,2)中选出最小的为B处的值。e.于是表就更新了abcabcabe0123a10b21e3C处C处计算后:上面的值为2,左边的值为4,左上角的:a和e不相同,所以加1,即2+1,左上角的为3。在(2,4,3)中取最小的为C处的值。f.于是依次推得到abc0123a1A处0D处1G处2b2B处1E处0H处1e3C处2F处1I处1I处:表示abc 和abe 有1个需要编辑的操作。这个是需要计算出来的。同时,也获得一些额外的信息。A处:表示a 和a 需要有0个操作。字符串一样B处:表示ab 和a 需要有1个操作。C处:表示abe 和a 需要有2个操作。D处:表示a 和ab 需要有1个操作。E处:表示ab 和ab 需要有0个操作。字符串一样F处:表示abe 和ab 需要有1个操作。G处:表示a 和abc 需要有2个操作。H处:表示ab 和abc 需要有1个操作。I处:表示abe 和abc 需要有1个操作。g.计算相似度先取两个字符串长度的最大值maxLen,用1-(需要操作数除maxLen),得到相似度。例如abc 和abe 一个操作,长度为3,所以相似度为1-1/3=0.666(3)具体实现具体实现代码如下:4.3 欧式距离相似度算法4.3.1算法概述该算法的核心思想是计算两条直线的欧氏距离。4.3.2算法步骤运用道格拉斯-普克算法将折线简化,提取出折线的特征点。步骤如下,(1)在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离,如下图(1)。(2)选其最大者与阈值相比较,若大于阈值,则离该直线距离最大的点保留,否则将直线两端点间各点全部舍去,如下图(2),第4点保留。(3)依据所保留的点,将已知曲线分成两部分处理,重复第1、2步操作,迭代操作,即仍选距离最大者与阈值比较,依次取舍,直到无点可舍去,最后得到满足给定精度限差的曲线点坐标,如下图(3)、(4)依次保留第6点、第7点,舍去其他点,即完成线的化简。具体的代码实现如下:将两条折线A,B垂直平移至X轴,如下图二。将其中一条折线A缩放一定比例得到A;使得A上所有点的平均值与B相等,如下图三。通过A上的点向B做垂线,求出垂距H,得出累计垂距Hs如下图四。相似度用1/Hs表示,当Hs=0时,取相似度为1,算法实现为代码二、代码三。具体的代码实现如下:4.4 加权最优解4.4.1算法概述上面三种算法或多或少有相应的侧重,因此我们小组决定根据上面三种算法提供一个加权的最优解。在获得三种算法得出的相关的相似度值后,为每种算法赋予相关的加权值,通过加权运算获得最优的结果。4.4.2算法步骤(1)获得三面三种算法的结果;(2)进行加权运算。分别给算法A(感知哈希算法)、算法B(Levenshtein距离算法)和算法C(欧式距离相似度算法)权数为0.5、0.3、0.2。 具体代码实现如下:5 系统实现整个系统架构思想是基于构件的软件开发思想,通过运用structs框架,将前端界面设计和后台功能实现相结合。具体的界面设计和系统集成如下介绍。5.1界面设计界面设计秉承简单实用的设计思想,将整个系统需求的具体功能在首界面就全部展现出来了。同时,为增加用户的体验好感度,运用了相关的JavaScript技术实现。具体的界面效果如下图:5.2系统集成5.2.1系统目录结构整个项目既有前台界面编写,又有后台算法实现,由于不同的模块代码编写的人员不同,最终需要进行代码的集成整合。通过对代码的集成最后形成的代码系统目录如下图所示:5.2.2 structs具体实现Structs部分的实现包括相关的VO层、action、service以及structs配置文件实现。在这里就不对其一一截图展示了,其中核心的action源码如下图所示:5.3系统环境和运行5.3.1系统环境集成开发环境为MyEclipse 10服务器部署环境为TomcatJava运行环境为JDK1.85.3.2运行效果在首页进行导入样本文件后,可以分别进行三种算法的计算得出相应的结果。然后还能进行加权最优解的获得。(1) 算法A(感知哈希算法)运行效果后台运行如下图:结果展示如下:(2) 算法B(Levenshtein距离算法运行效果后台运行如下:结果展示如下:(3) 算法C(欧式距离相似度算法运行效果结果展示如下:(4) 加权最优解运行效果6 测试
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!