第四节课——【图像识别项目及使用说明】(一)|学习笔记

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
简介: 快速学习第四节课——【图像识别项目及使用说明】

开发者学堂课程【达摩院视觉 AI 精品课第四节课——【图像识别项目及使用说明】笔记与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/912/detail/14421


第四节课——【图像识别项目及使用说明】(一)

内容介绍:

一、数据库

二、代码

三、PostConstruct 注解

四、整个数据存储的结构:

五、VisionService

六、前端页面

七、mounted

八、控制器部分

九、识别实现的方法

大概结构:

AlbumApplication 是启动的入口函数

common 一般是存放公共的类、常量等

config 是装载数据库等(图片.jpg)

controller 是接收外部的请求

service 这里有两个模块:第一个可以持久到数据库;第二个是所有算法如对图像算法的识别

utils 是放一些类或公共函数

一、数据库

首先看装载的数据库:

import...

@Configuration

public class WebAppConfig implements WebMvcConfigurer {

@Value("./img/")

public String imgPath;

@Bean

public WebAppConfig newWebAppConfig() {

return new WebAppConfig()

}

@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {

newWebAppConfig();registry.addResourceHandler( ...pathPattoms:"/static/**").addResourceLocations("“classpath:/static/"");registry.addResourcetiandler. ...pathPlattems:"/templates/**" ).addResourceLocations("classpath:/templates/”);registry.addResourceHandler( ...pathPattens:"/img/**" ) ,addResourceLocations("file:"+imgPath);

}

}


二、代码

通过 MultipartFile 是一个文件的输入流,输入流只能读取一次,如果要重新读就会是空。

所以把它转化成 ByteArrayInputAtream 这个流然后在每次用完之后可以把它进行reset、mark 流,这个时候就可以重新去使用这个 ByteArrayInputAtream 流,函数就会把这个流保存在内存中(这个方式不适用于内存太大的图片,只是一个简单的实现)。

为了避免上传的图片重名,对图片的 Input 流取了 MD5 的值作为函数名,基本上可以避免重复。

@RequestMapping(value = "/list", method = RequestMethod.GET)

public Object getList() throws Exception { return resourceService.getAllPhotos();

}@RequestMapping(value = "/allcates", method = RequestMethod.GET)

public Object getCates() throws Exception {

return resourceService.getAllCates();

}@RequestNapping(value = "/getPhotosByCateAndLabel", method = RequestMethod.GET)public Object getPhotosByCateAndLabel(@RequestParam(name="cate") String cate, @RequestParam(name="tag”) String tag) throws Eaception {

return resourceService.getPhotosByCateAndLabel(cate, tag);

}@RequestMapping(value = "/getPhotosByCate", method = RequestMethod.GET)public Object getPhotosByCate(@RequestParam(name="cate") String cate) throws Exception {

return resourceService.getPhotosBycate(cate);

}

@PostMapping("/upload")public Object upload(@RequestParam("file') MultipartFile file) throws Exception {

//计算上传文件的md5值,作为文件名

byte[] bytes = file.getBytes();ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);

String md5Str = Md5CaculateUtil.getMD5(inputStream);

inputStream.reset();

inputStream.mark( readAheadLimit: 0);

String fileName = file.getOriginalFilename();String fType = fileName.substring(fileName.lastIndexOf( str: "."));

fileName = String.format("%s%s", md5Str, fType);

resourceService.saveAndRecognizeImage(fileName,inputStream);

return fileName;

}

三、PostConstruct注解

PostConstruct 注解:在装载 bin 的时候先执行这个函数,可以把保存在本地的数据取出来加到内存里面去;在销毁对象的时候再把数据保存在本地文件→date.json。

@PostConstruct

public void loadMetaData() {

log.info("load");

try {InputStream inputStream = new FileInputStream( name. storagePath + fileName);

labelModel =JSONObject.parseObject(inputStream,LabelModel.class);

}catch (IOException e) {

log.error(e.toString());

labelModel = new LabelModel();

}

}

@PreDestroy

public void saveMetaData() {

log.info("save");

try {System.out.println(JSON.toJSONString( labelModel));OutputStream outputStream = new FileOutputStream( name: storagePath + fileName);OutputStream.write(JSON.toJSONBytes( labe lhode1));

}catch (Exception e) {

log.error(e.toString());

}

}

四、整个数据存储的结构

整个数据存储的结构:

"allImg": [

"bddbe77275ff7595603d4cce8ce1828c.jpg”,

"73c666ab97fa4646d168585b256c5fcc.jpg",

"53c92f57ad4aea47fba6e6a45d317fa1.jpg",

"1afc6966899d7e8b5b408ce194a322b9.jpg"

],

"cateMap":Object{…},

"expressionMap" :Object{…},

"imgLabels":Object{…},

"sceneMap":Object{…},

"styleMap":{

}

可以通过分类找到标签:

"cateMap":Object{…},

"expressionMap": {

"expression_生气": [

"lafc6966899d7e0b5b408c0194a322b9.jpg”,

"53c92f57ad4aea47fba6e6a45d317fa1.jpg"

]

"expression_惊讶": [

"bddbe77275ff7595603d4ccece1828c.jpg"

]

},

"imgLabels": {

"1afc6966899d7e8b5b408c0194a322b9.jpg": [

"scene_人物",

"scene_其他",

"scen_运动",

"expression_生气",

"scene_演出“

],

"73c666ab97fa4646d168585b256c5fcc.jpg" : [

"scene_户外",

"scene_室外",

"scene_建筑",

"scene_物品",

"scene_露营"

],

}

相关文章
|
4月前
|
机器学习/深度学习 算法
284张机器学习漫画手册吃透所有基础知识!
前几天淘到一份斯坦福大佬整理的漫画集,几乎讲到了机器学习所有的知识点,包括特征工程、算法模型、评估、优化……熬夜肝完了,真的很不错! 用284张漫画几乎可以吃透机器学习所有知识,就想着赶紧分享给小伙伴们了!
|
6月前
|
机器学习/深度学习 人工智能 安全
面向企业的 ChatGPT 究极手册:第九章到附录 A
面向企业的 ChatGPT 究极手册:第九章到附录 A
111 0
|
机器学习/深度学习
深度学习复习总览(五)
深度学习复习总览(五)
53 0
|
机器学习/深度学习
深度学习复习总览(四)
深度学习复习总览(四)
91 0
|
机器学习/深度学习
深度学习复习总览(三)
深度学习复习总览(三)
82 0
|
机器学习/深度学习 人工智能 算法
深度学习复习总览(一)
深度学习复习总览(一)
114 0
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习复习总览(二)
深度学习复习总览(二)
62 0
|
机器学习/深度学习 自然语言处理 算法
课时3 :高级能力和算法效果优化(一)|学习笔记
快速学习课时3 :高级能力和算法效果优化
101 0
课时3 :高级能力和算法效果优化(一)|学习笔记
|
机器学习/深度学习 自然语言处理 算法
课时3 :高级能力和算法效果优化(三)|学习笔记
快速学习课时3 :高级能力和算法效果优化
150 0
课时3 :高级能力和算法效果优化(三)|学习笔记
|
自然语言处理 算法 机器人
课时3 :高级能力和算法效果优化(二)|学习笔记
快速学习课时3 :高级能力和算法效果优化
119 0
课时3 :高级能力和算法效果优化(二)|学习笔记