离线手写中文签名检索——软件设计方案

离线手写中文签名检索——软件设计方案

一、项目背景

  我的工程实践是脱机/离线手写中文签名的智能检索系统,首先通过人工智能和深入学习技术,搭建一个深度学习网络,再利用数据库对网络进行训练,最后通过自制框架集成到网页端,搭建一个签名检测系统,实现一个在Web端根据输入的签名从签名数据库中根据每个签名的相似度选取出所有正确签名的系统。本文我将用我这个工程实践的项目作为例子,来学习软件设计方案。从设计模式,软件架构,各类视图,以及API接口,软件开发目录的角度进行分析,最终实现软件系统概念原型。

我项目用的网络模型为Resnet,18层包括全连接层和卷积层,不包括池化层和BN层。

 

二、项目设计方案

软件架构

常见的软件架构有:三层架构,MVC架构,MVVM架构。本项目采用MVC架构,MVC即为Model-View-Controller(模型-视图-控制器),MVC开始是存在于桌面程序中的,MVC中M、V和C所代表的含义如下:Model(模型)代表一个存取数据的对象及其数据模型。View(视图)代表模型包含的数据的表达方式,一般表达为可视化的界面接口。Controller(控制器)作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

在我的这个系统中,可以分为三个部分:

第一个部分是前端网页接口将用户上传的签名图片传输给服务器中的模型,让服务器对图片进行分析处理。

主服务器:对传输进来的图片通过深度学习模型对其进行分析处理,将数据库中的相似度排名前列的图片进行输出。

网页端:在网页上搭建人机交互界面,主要用来展示输出的图片等。用户通过界面查看识别结果,通过界面上的按钮,进行操作上传图片和下载签名图片和位置,系统通过函数实现用户所要求的任务。

三、软件系统概念原型的不同视图以及API

 3.1分解视图

  分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。

 3.2依赖视图

   依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。 依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。 依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。

 

3.3执行视图

  泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。 泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

3.4 执行视图

  执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。 执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

 3.5实现视图

实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。

3.6API

模型:class ResNet18(nn.Module):

前向传播:def forward(self, x)

模型搭建 :create_model(input_shape, anchors, num_classes, load_pretrained,freeze_body,weights_path)

图像预处理 :class utils

图像生成 :cv2.imshow("show", img)

损失函数:val_acc = evalute(model, val_loader)

3.7工作分配视图

  工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在各项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。

  离线手写中文签名
成员A 模型的搭建和优化 
成员B 网站前后台的搭建
成员C 图片的预处理和模型优化

 

 

 

 

 

 

四、数据库设计

1.用户:

序号 字段 描述 类型
1 user_ID 用户ID String
2 user_name 用户名 String
3 account_num 账号 int
4 user_class 用户类别 String
5 others 其他信息 String

 

 

 

 

 

 

 

 2 模型:

序号属性数据类型描述
1 pictureID int 训练用图片
2 addr String 图片位置
3 tag int 标签值
4 box float 标注框

 

 

 

 

 

 

3.图片:

序号 字段 描述 类型
1 picture_ID 图片ID String
2 label_ID 标签ID String

 

 

   

 

五  软件系统运行环境和技术选型说明

     开发环境:python 3.6,TensorFlow 2.0,pytorch,opencv-python4.4.0

    数据库:MySQL.8.0.21

    IDE : Pycharm

    技术选型: 模型采用resnet18为主干网络的双通道卷积神经网络,网站采用MVC架构框架设计。

六、概念原型的核心工作机制

 本项目是B/S架构,项目概念原型的核心工作机制可以从下面两方面阐述:

  •     服务器端:包括离线手写签名检索的后台框架模块,模型使用pytorch编写,结合keras、tensorflow等深度学习框架来实现。通过对数据库中的签名图片进行分析        处理来搭建网络学习模型,包括图片的预处理和网络学习过程,再根据网页端传输过来的图片进行分析相似度,选出相似度排名高的返回网页端。
  •     网页端:登记注册,上传需要检索的签名图片,下载由服务器返回的相似度高的图片

 

posted @ 2020-12-30 10:57  阿斯巴甜可  阅读(241)  评论(0编辑  收藏  举报