首页 新闻中心 基于柏睿向量数据库,一分钟构建“以图搜图”功能

基于柏睿向量数据库,一分钟构建“以图搜图”功能

发布时间:2023-12-19  |  阅读:

1992年,T. Kato提出了基于内容的图像检索(Content-Based Image Retrieval,CBIR)的概念,它使用图像的颜色、形状等信息作为特征构建索引以实现图像检索,即我们通常所说的“以图搜图”。基于这一概念,IBM开发了第一个商用的CBIR系统QBIC(Query By Image Content),用户只需输入一幅草图或图像,便可以搜索出相似的图像。“以图搜图”正式的名称应该叫“相似图像搜索”,也称为“反向图片搜索”。

如今我们日常使用的百度、搜狗等通用搜索引擎均提供了相似图像检索功能。淘宝、京东等电商平台也利用自己庞大的商品图像库开发了垂直领域内的图像检索功能来满足消费者们不易用文字描述的商品搜索需求。

 

虽然图像检索技术已广泛应用于我们的生活当中,但目前这一技术还未完全成熟,仍有许多问题需要解决,改进和提高的空间还很大,比如传统使用机器学习方法,先从海量图形库中训练如何认识图像,然后再根据训练后的AI算法,实现以图搜图的能力,流程与实现相对比较复杂。

 

本文将介绍如何使用柏睿向量数据库的向量相似搜索功能,在不需要提前AI训练模型,仅使用通用图像识别算法,就能实现简单的“以图搜图”功能。

 

除去将图片数据Embedding入库的过程,基本1分钟就能构建“以图搜图”功能。在讲解代码前,先看看2种以图搜图的功能演示:

 

 

场景1:搜物

 

使用Imagenet-1k素材库中test数据集,共10万张图片,写入柏睿向量数据库中。

 

以互联网上找到的图片做为搜索图:

 

 

我们通过这张新的图片,从向量数据库中搜索,要求返回4个结果。结果如下:

 

 

搜出的都是与搜索图类似的图片。

 

 

 

场景2:搜人

 

我们从互联网找一些图片素材库,存入柏睿向量数据库中,其中有某明星的图片有4张。接下来,我们再从互联网找一张不在素材库中的该明星单人图片。

 

我们通过这张新的单人照,从向量数据库中搜索,要求返回4个结果,同样可以实现。(出于版权及隐私,搜人具体图像过程不做演示)

 

注:本文示例为小范围测试场景,并不能代表向量搜索可以完全替代图像识别算法。

 

 

 

示例代码

from rapidsvdb_client import RapidsClient
import rapidsvdb_client.embedding_functions as em
import numpy as np
from PIL import Image


client = RapidsClient(host='192.168.31.62', port=3456)
#连接到柏睿向量数据库


embedding_function = em.OpenCLIP_ViTB32_EmbeddingFunction()
collection = client.get_or_create_collection(

      name="rapidsvdb_pic_db",

      embedding_function=embedding_function)
#使用测试图片向量数据集


query_image = np.array(Image.open("search1.jpeg"))
#定义要查询的图片search1.jpeg
retrieved = collection.query(query_images=[query_image], include=[uris], n_results=4)
#从柏睿向量数据库中查询与search1.jpeg相似的4张图的存储位置,其中uris是指图片存储位置
print (retrieved)
#显示查询结果

 

热门新闻