本文介绍了以图搜图的概念,以及搭建以图搜图系统的流程。
概念
以图搜图是一种基于图像内容的检索技术,旨在通过输入一张图像来寻找相似或相关的图像。它基于图像的视觉特征,例如颜色、纹理、形状等,通过计算机视觉和机器学习技术,将图像转换为可计算的特征向量,并将其与数据库中的其他图像进行比较和匹配。
以图搜图的应用场景非常广泛。诸如:
在电子商务领域,用户可以通过拍照或上传一张商品图片来搜索相似的商品,从而提供更加精准的购物推荐。
在媒体管理领域,用户可以通过输入一张图片来寻找与之相关的图片,用于整理和管理大量的媒体资源。
在社交媒体领域,用户可以通过上传一张照片来搜索相关的图片,例如找到相同的地点或相似的主题。
此外,以图搜图系统还可以应用于版权保护和网络安全领域,用于检测和识别盗版图片或有害图片等。
搭建流程
创建图片数据存储表
创建图片数据存储表的SQL语句如下:
CREATE TABLE image(
id bigint(20) comment '主键id',
image_address varchar(255) comment '图片存储地址',
type int(8) comment '图片类型',
primary key(id)
);
其中,image_address
字段存储的是图片的公网地址。type
对应的值和类型如下:
1:bmp格式。
2:gif格式。
3:jpeg格式。
插入图片数据
插入图片数据的SQL语句如下:
INSERT INTO image(id,image_address,type) values(1,'https://xxx/image.bmp',1);
创建向量表
创建向量表的SQL语句如下:
/*polar4ai*/CREATE TABLE image_vector(
id int,
image_address varchar,
image_address_vector vector_512,
type int,
primary key(id)
);
其中,image_address_vector
为向量类型字段,维度为512。
将图片向量化
您可以根据实际场景,选择离线将图片向量化并写入向量表,或在线将图片向量化。
离线将图片向量化
离线将图片向量化并写入向量表的SQL语句如下:
/*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT id,image_address,type FROM image) with( primary_key='id', x_cols='image_address', mode='async', vec_col='image_address_vector' ) INTO image_vector;
其中,
_polar4ai_image2vec
为图片转向量模型,目前仅支持输出512维向量。primary_key
为向量表主键字段。x_cols
为存储图片地址字段。mode
为图片写入模式。vec_col
为向量表中存储向量的字段。在线将图片向量化
若图片来源于数据库,则在线将图片向量化的SQL语句如下:
/*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT image_address FROM image WHERE id=1) with();
若图片来源于互联网,则在线将图片向量化的SQL语句如下:
/*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT 'http://xxxx/image.png') with();
其中,
_polar4ai_image2vec
为图片转向量模型,目前仅支持输出512维向量。且目前仅支持将一张图片进行图片向量化。
进行图片检索
进行图片检索的SQL语句如下:
/*polar4ai*/SELECT id,'distance(image_address_vector,[1,2,3,4,5……,512])' FROM image_vector WHERE type=1 LIMIT 10;