关于图像数据库的问题

如何将海量图片整理到到数据库中?
现实业务中,应用数据库通过筛选关键字就可以找到相对应的图片?
都需要怎么做呢?
先搭建数据库?
如何将数据和图片实现联动呢?
或者现在有什么成熟的软件或平台可以实现此类想法呢?
求各位指引~

在数据库设计一张表,字段包含主键,图片名称、图片描述、图片路径等相关信息,其中图片描述为text类型,存放图片关键字信息,
当筛选图片时,如果描述信息中包含关键字,就把图片对应的url取出来放到list中,直至筛选完成,最后将list返回给前端进行显示,望采纳

看需求功能的设计以及数据库搭建 倒不是什么难事,难的是海量的图片怎么去整理关键词。

  1. 如果本地每个图片都已经整理好直接将图片和图片关键词信息对应关系存入数据库就行了,
  2. 如果没有 完全人工去梳理的话工作量还是很可怕的,有能力的话可以考虑做个深度学习图像解读程序批量去对图片进行关键词解读(解读准确度不好说) 然后上一步

无论你是什么数据库,先在后台建立一张表,
包含文件名、主键
不同的数据库有不同的数据类型,
sql server 有个IMage类型
其它数据库建议用BINARY /Blob
这种数据类型可以直接赋值给编程控件
实现联动的话,其它表用主键关联即可
例如主键命名为IMAGE_ID、其它表关联这个IMAGE_ID(也就是建立一个同样字段名,存储和图片IMAGE_ID同样的数据类型)
关联可以用函数,也可以用查询语句直接关联。
就看你的程序需不需要节约资源。

如果你的数据库不需要联网,我建议你使用sqlite数据库,这个数据库使用非常简易。并且能存储海量数据。
图片是肯定不能存入数据库的,存入数据库的只能是图片路径。将图片的一些属性,如名字,格式,图片路径等等存入数据库,当需要查询的时候。调用select命令进行查询,最后使用获取到的图片路径,然后进行显示

1.这里我先说一下思路,需求是要把海量的图片存储起来使用数据库可以快速的搜索到图片。这里搭建数据库是必须的,不然也没办法查询啊;
2.如果只需要根据图片名称进行查询,只需要递归获取到所有图片的路径,然后把图片信息存储到数据库中就可以了。
3.如果需要对图片进行分类,而且图片的类型要和图片相符合,那就需要通过图像识别分析是什么类型的图片了。而大量数据看具体数据量有多大了,如果是10万左右的数据使用常规的就可以,
4.如果是百万或者上千万的图片那就需要考虑一下使用什么架构了;
常规方案:
数据库使用mysql,语言都可以,存储图片可以不动位置,通过递归获取所有图片的路径,然后保存的数据库中(当然也包含图片的信息,如大小、名称、等),
如果需要给图片做分离可以通过图像识别来完成,可以看一下我的博客有开源的图像识别技术;
大数据量方案:
数据库可以使用oracle当然myslq也可以,语言使用java、c都可以,文件建议放到文件系统中可以方便查找,识别技术参考开源技术,

参考这个:https://blog.csdn.net/u011410254/article/details/51233830?utm_source=blogxgwz3

我的想法是,建数据库,里面存图像路径,名称等,然后与图像联动

可以用sqlite,有个image类型

1、我前两天刚做这样的业务,我的是用于将海量图片存到数据库,前端逐张显示出来进行打分,用的是springboot+vue,首先将图片批量上传到服务器并保存在mysql;

第一步新建springboot项目,然后配置数据库:

server:
  port: 8081
spring:
 #数据源配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库
    url: jdbc:mysql://localhost:3306/image_database?characterEncoding=UTF-8 #数据源地址
    username: root # 用户名
    password: root # 密码



图像数据库实体类

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;

/**
 * 开发人员: Justin Fan
 * 版本日志: 1.0
 * 创建日期: 2022/3/23  17:11
 * 功能描述: 图像及图像评分实体类
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@TableName(value = "image" )  //默认将表名作为类名,如果一致可以省略不写
public class Image {

    private int id;
    @TableField(value = "image_content")
    private Byte[] imageContent;
    private float score;
    private String url;

}


上传图片工具类


import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.security.PrivateKey;

/**
 * 开发人员: Justin Fan
 * 版本日志: 1.0
 * 创建日期: 2022/3/22  16:27
 * 功能描述: 上传图片所用的工具类
 */

public class UploadUtils {
    //定义一个目标路径,就是我们要把图片上传到的位置
    private static final String BASE_PATH="E:\\研究生\\开题\\数据集\\绝缘子数据集\\InsulatorDataSet\\Normal_Insulators\\images";
    

    //定义访问图片的路径
    private static final String SERVER_PATH="http://localhost:8081/upload/";

    //上传方法
    public static String upload(MultipartFile file){
        //获得上传文件的名称
        String filename = file.getOriginalFilename();
        //保证图片在存储时候的唯一性,需要用到工具方法UUIDUtils.getUUID()
        String uuid = UUIDUtils.getUUID();
        //将uuid和文件名字拼接
        String newFilename = uuid + "_" + filename;
        //创建一个文件实列对象
        File image = new File(BASE_PATH, newFilename);

        try {
            file.transferTo(image);
        } catch (IOException e) {
            return null;
        }
        return SERVER_PATH+newFilename;
    }


}

将图片路径全部保存到数据库


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fyj.cn.dao.ImageDao;
import com.fyj.cn.entity.DataJSON;
import com.fyj.cn.entity.Image;
import com.fyj.cn.utils.UploadUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * 开发人员: Justin Fan
 * 版本日志: 1.0
 * 创建日期: 2022/3/22  16:52
 * 功能描述: 用于上传文件的
 */

@Controller
@RequestMapping("upload")
public class UploadController {

    @Resource
    private ImageDao imageDao;

    @RequestMapping("image")
    @ResponseBody
    public DataJSON uploadImage(@RequestParam(value = "file") MultipartFile[] multipartFile){

        DataJSON dataJSON = null;
        ArrayList<DataJSON> dataJSONList = new ArrayList<>();


        for (MultipartFile file : multipartFile) {
            //调用我们写的上传文件的工具类
            String imagePath = UploadUtils.upload(file);

            dataJSON = new DataJSON();

            if (imagePath!=null){
                dataJSON.setCode(200);
                dataJSON.setMsg("上传成功");
                HashMap<String, String> map = new HashMap<>();
                map.put("src",imagePath);
                dataJSON.setData(map);

                String src = dataJSON.getData().get("src");
                Image image = new Image();
                image.setUrl(src);
                imageDao.insert(image);

                dataJSONList.add(dataJSON);


            }else {
                dataJSON.setCode(0);
                dataJSON.setMsg("上传失败");
            }
        }
        for (DataJSON dataJson : dataJSONList) {
            System.out.println(dataJson);
        }
        return dataJSON;

    }

}

img

2、用vue开发前端页面,用来显示图片,下面是效果,可以私信一起学习

img

img

img

深度学习实际系统架构中,图片数据是不直接存入数据库的,每张图像都将创建一个独立的id,然后在数据库以这个id未独立键值,然后其它的属性,比如场景、变迁、描述等就可以关联起来了