电子相册搭建 | 学习笔记

简介: 快速学习电子相册搭建

开发者学堂课程【视觉AI应用开发课程电子相册搭建】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/749/detail/13217


电子相册搭建

 

主要内容

一、搭建电子相册

二、后端结构及功能、操作

三、前端结构及功能、操作

四、课后操作

 

一、搭建电子相册

电子相册是阿里云平台提供的算法进行图片识别,根据图片识别的结果对以上图片进行分类。

1、运行项目项目在8080端口运行网址 index.html就是主页

image.png

2、上传图片。通过点击上传或拖拽可以上传图片。

image.png

3、图片识别。例如拖拽上传的人模图,下面的图片分类运用了两类识别算法,一类是表情识别,一类是场景识别。可以通过点选不同图片看到不同的效果。有惊讶、生气的表情,以及露营户外人物等场景类别,通过这种方式可以查看图片和功能。

image.png

 

二、后端结构及功能、操作

1、后端功能

1)打开后可以看到 AlbumApplication , 这是入口函数。

image.png

(2)common 中有公共的类,常量或枚举值都可以放在中。

(3)Config 的功能为装载或数据库的配置。WebAPPconfig 功能为对静态资源如css gs以及图片做的映射。例如将static 映射到classpath:/static/ 路径下,在目录中写下格式,可以自动找到对应的资源。

(4)大部分的web 项目都是采用了mac 方式提供服务,Controller 的作用为接收web的请求,参数校验,通过接口调用得到的数据再返回前端。

image.png

(5)Service 功能为把不同的请求和服务抽样例如在本项目当中,一共有两个模块

Resource 的作用加载数据时为了简单保存数据,不做复杂的数据接入,例如持久化到数据库为了简单起见且方便学习,将数据直接保存到本地文件当中。

image.png

vision 功能是为图片的识别算法部分提供服务。

Recognizescene 函数可以用来识别图片符合哪些场景。

RecognizeExpression 函数可以用来识别人脸图片包含哪些表情。

image.png

本期将以上述两个识别的场景作为讲解内容。

6)utils 里面可以放公共的类工具函数。

2、后端操作

1)service 模块主要逻辑

controller主要实现功能,第一获取图片所有图片都是通过get all photos 获取的。通过获取分类以及标签获取图片包括通过分类获取图片列表。

image.png

第二上传文件,在其中会做几件事。第一件事要完成上传把上传的文件保存到文件当中。并调用两个识别函数,即在service 当中提到的两个函数。

image.png

注意事项通过MaltipartFile 获取的是文件的输入流,输入流只能读取一次,若重复读取会变成空。所以需要转换成ByteArrayInputStream 流,在每次用完之后可以进行reset ,在进行mark  0这时可以重新使用。ByteArrayInputStream 会将流保存在内存当中线下尽量不要用这种方法,图片较大会占用内存空间。由于上传图片可能会有重名,为了避免重名可以给图片取一个md5值作为函数名 。

image.png

resourceservice ,可以将其看做一个资源管理器,其中postconstruct predestroy 是比较特殊的两个函数,postconstruct 功能为装载bean的时候会先执行这个函数 ,之后在切入点把保存在本地的数据取出来并加载到内存里。销毁对象的时候把这些数据保存到本地文件data.json 数据中。

image.png

里面为空是由于需要停止之后再去打开才可以看到内容,停止时会执行函数。这时便可以将数据保存。

3、后端结构。

浏览器中输入json.cn 即可以看到整个数据存储结构

image.png

(1)Allimg 中是上传的图片

(2)Catemap 中将图片按两类场景进行分类,一类是场景识别一类是表情识别。

表情识别中放所有识别出来的表情如惊讶生气等,场景识别中有如户外人物运动等,这些是为了更快查询,通过分类可以快速找到某一个分类下所有的识别标签。

(3)Expressionmap 中存放的内容是表情标签中存放图片,scenemap 与其功能类似。

image.png

(4)Imglabels 存放的是反向查找的过程,通过图片识别其中具有的标签。如此可以通过不同维度的查询实现简洁删除图片而不用变动结构。

image.png

(5)Addimg 即上述讲解的上传图片如何构造结构方便查询。

image.png

(6)visionservice ,的作用是识别不同的场景和表情。将上传的图片流传到接口,可以从服务端识别场景和表情

image.png

早期版本是通过UR这种方式上传,但其中有限制必须使用 oss的对象才能够识别。

新版本则可以通过本地上传图片来识别

image.png


三、前端结构及功能、操作

index.html 就是通过网页访问照片的页面。

image.png

前端页面是通过vue 加上gallery 来实现前端的逻辑。

1、结构及功能

(1)第一部分作用为通过上传的组件实现拖拽上传和点选。组件中有不同的功能

action 的作用为显示上传的图片将要访问后端的某个接口,事件是指产生后要做什么事,后面对应的是将要执行的函数。

image.png

uploadSuccess 意为上传之后要刷新页面,添加下面的标签分类等。

(2)第二部分的作用为实现页面下方的轮廓图和列表。

image.png

v-tag 是一个自定义标签组件,对应的是表情类和场景类不同的分类不同的标签。

vue-gallery 功能为实现的自定义的标签名,可以在index 中看到。

image.png

Photos 是定义的属性,将后台取回来的数据渲染到前端的html页面中,组件有其对应的模板。

image.png

可以在模板中进行对背景图片的处理 以及事件的定义。

回到html 中,vue 是一个事件的数据流,通过数据不同的变化可以触发渲染,例如上传一张图片可以通过不同的组件进行不同的交互,下面会显示新上传的图片所具备的标签这些都是通过事件来驱动数据的变化。

image.png

mounted 定义的是事件,例如图片变化如何调用,按下不同的键要如何操作,是前一张图片还是后一张图片,定义的是方法,这些方法都在模板当中。例如点击next photo  就可以访问下一张图片页面与代码之间的变化是对应的。

image.png

vue 有自己的模板语言,可以生成一个变量,可以认为是vue 的视图,下图则是vue 的控制器部分。

image.png

data 里的数据定义的是模板当中需要用到的数据。El 后面是ID的绑定,可以将组件放在div 从而根据模版进行渲染。

2、渲染

1)v-for

在script 中,刷新页面之后可以请求接口来获取图片放在photos 属性里面。当属性出现值就会渲染模板,即通过数据触发渲染流程。把属性变动到photos 变量上就可以在script 中使用。v-for 是一个vue 的for 循环把里面取到的数据如索引位置以及图片的地址放到背景图片里来完成整个渲染过程

image.png

(2)v-tag

图片下方的标签就是v-tag 渲染的结果。

data 的作用是在处理化的时候进行渲染,可以自己定义颜色。

image.png

catmap 后面返回的是英文需要转化成汉字在页面中显示出来 

通过取随机的下标可以将其渲染成不同的颜色 

index 中的tags 就是绑定在script 中的数据。这个数据是一个两层的map 结构,所以渲染时会对两层的map 进行渲染 

3、触发

(1)不同触发的实现运用的是scrape 中的uploadsuccess 这是绑定成功之后执行的一个函数。这个函数可以执行各项逻辑,利用技术不同的组件之间进行通信定义一个虚拟的event的实例,通过把所有不同的vue 实例串联起来例如通过emit Uploadsuccess 发送事件,就是通过这个实例给其他的实例发送事件。上传成功之后要把加到图片的人模图里。

(2) customevent on 其中的on 代表接收下面的emit 传过来的uploadSuccess 事件,如果得到了uploadsuccess 事件可以通过从后端获取数据对页面进行刷新操作。

(3)refresh ,成功后要对整个tag刷新把识别出来的不同的场景标签进行刷新 

image.png

 

四、课后操作

1、把本地存储的逻辑替换为数据库存储,方便查询

image.png

2、扩充更多的识别算法,可以在文档当中实现不同的识别对图片进行美妆美型美颜等以及对文字进行识别 

相关文章
|
7月前
|
SQL 存储 数据库
基于Web技术的在线考试系统的设计与实现(论文+源码)_kaic
基于Web技术的在线考试系统的设计与实现(论文+源码)_kaic
|
7月前
|
Java 关系型数据库 MySQL
基于Java的校园点餐系统的设计与实现(论文+源码)_kaic
基于Java的校园点餐系统的设计与实现(论文+源码)_kaic
|
7月前
|
Web App开发 Java 关系型数据库
javaWeb在线考试系统
javaWeb在线考试系统
117 0
|
存储 C语言 C++
实战C++:如何开发一个完整的学生信息管理系统?
先简单介绍一下这篇文章,这是一篇关于C++的学生管理系统的文章,作为从C语言到C++过渡的项目。
299 0
|
Java 数据安全/隐私保护 索引
Java实训项目一一拼图游戏(附源码)
Java实训项目一一拼图游戏(附源码)
442 1
|
SQL 存储 Java
Java实训项目一一考试系统(附源码)
Java实训项目一一考试系统(附源码)
268 0
|
前端开发 关系型数据库 MySQL
基于SSM的教务管理系统的设计与实现(论文+源码)_kaic
学校教务管理信息化是提高办公效率的主要途径。随着中国高等教育的快速发展和学校规模的不断扩大,在校学生人数不断增加,办学层次出现多元化,由一地办学发展到多地多点办学,同时进一步推行学分制。这些变化使得教务部门的管理任务愈发繁重,不仅工作量增加了,而且工作难度和复杂性也日益攀升。按照传统的管理模式,单凭有限的人力已无法胜任学校管理之重任。
|
Web App开发 JavaScript 前端开发
学生宿舍管理系统的设计与实现(论文+源码)_kaic
在信息社会占据主导地位的今天,互联网的发展让人们的生活更加智能便利。设计与实现学生宿舍管理系统为管理者提供了方便智能的查询平台,对于高校管理工作向信息化、社会化、智能化的迈进有着关键作用。高校宿舍管理也必须精细化,透明化,通过宿舍管理系统来提高宿舍管理的质量和进度。此学生宿舍管理系统的开发在逻辑上由三个子系统组合而成,分别是面对管理员、学生、宿舍管理员开发的宿舍管理系统。设计一套适合各个高校特点的学生宿舍管理系统可以避免浪费人力与物力,还能够降低管理成本,实现学校管理工作现代化、科学化的管理目标,管理信息系统的设计是高校发展的必然选择,也是互联网发展趋势的具体表现。 本系统采用当下流行的前后端
|
运维 BI
基层医院信息管理系统(云HIS)源码
一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能,还能与公卫、PACS等各类外部系统融合,实现多层机构之间的融合管理。
470 0
|
前端开发 JavaScript Java
基于Javaweb 开发的个人博客系统心灵小阁
基于Javaweb 开发的个人博客系统心灵小阁
293 0
基于Javaweb 开发的个人博客系统心灵小阁