首页   >   R   >
    人脸检索实现下篇

人脸检索实现下篇

2020-09-08

5. 使用AnalyticDB搭建以图搜图系统

下面我们来介绍如何使用AnalyticDB来实现上一章节介绍的以图搜图和人脸检索系统。

5.1 创建插件

分别创建AnalyticDB的非结构化分析插件OpenAnalytic和向量检索插件fastann

CREAT EXTENSION IF NOT EXISTS open_analytic;
CREAT EXTENSION IF NOT EXISTS fastann;

5.2 建表

我们可以使用如下sql语句建表, 表中保存了图片的名称, 二进制文件和图像的特征向量(用户也可以将图片的文件保存至阿里云的OSS对象存储服务上.这里不做详细介绍)

CREATE TABLE image_search_table (
image_name TEXT NOT NULL, # 图像文件名
image_data BYTEA NOT NULL, # 图像二进制文件
feature REAL[] NOT NULL, # 图像特征
PRIMARY KEY (image_name)
);

5.3 建索引

为图像的特征向量列构建ANN索引加快查询速度.

CREATE INDEX image_search_feature_index 
ON image_search_table USING ann (feature) WITH (dim = 1024);

5.4 创建特征提取算法pipeline

通过以下sql可以执行4.3创建的pipeline。 这个UDF的输入是pipeline名称和图像的byte array。 输出是包含图像特征向量的JSON串

SELECT open_analytic.pipeline_run_dist_random('general_feature_extractor', 
<image_byte_array>);

5.5 提取图片特征向量

通过以下sql可以执行4.3创建的pipeline. 这个UDF的输入是pipeline名称和图像的byte array. 输出是包含图像特征向量的JSON串

SELECT open_analytic.pipeline_run_dist_random('general_feature_extractor', 
<image_byte_array>);

5.6 图像数据导入

在获取图像特征以后, 可以将图像数据导入4.1创建的 image_search_table表中。

INSERT INTO image_search_table VALUES (<image_name>, 
<image_byte_array>, <image_feature>);

5.7以图搜图查询

通过以下sql可以检索与查询图片向量最相似的前10条记录。

SELECT image_name, image_data, l2_distance(feature,  <feature_vector>) 
FROM image_search_table
ORDER BY feature <-> <feature_vector>
LIMIT 10;

5.8 人脸检索系统

以上我们介绍了如何使用Analytic来实现以图搜图, 搭建人脸检索系统的逻辑与以图搜图系统几乎是一样的 只需要将5.1-5.6章节中使用的的pipeline名称从 'general_feature_extractor' 替换为 'face_feature_extractor' 就可以将以图搜图系统变成一个人脸检索系统. 非常的方便.

6. AnalyticDB介绍

分析型数据库(AnalyticDB)是阿里云上的一种高并发低延时的PB级实时数据仓库,可以毫秒级针对万亿级数据进行即时的多维分析透视和业务探索。AnalyticDB for MySQL 全面兼容MySQL协议以及SQL:2003 语法标准, AnalyticDB forPostgreSQL 支持标准 SQL:2003,高度兼容 Oracle 语法生态。

向量检索和非结构化数据分析是AnalyticDB的进阶功能. 目前两款产品都包含向量检索功能, 可以支持人脸, 人体, 车辆等的相似查询和推荐系统。AnalyticDB在真实应用场景中可以支持10亿级别的向量数据的查询, 毫秒级别的响应时间. AnalyticDB已经在多个城市的重大项目中大规模部署。

在一般的包含向量检索的的应用系统中, 通常开发者会使用向量检索引擎(例如Faiss)来存储向量数据, 然后使用关系型数据库存储结构化数据. 在查询时也需要交替查询两个系统, 这种方案会有额外的开发工作并且性能也不是最优. AnalyticDB支持结构化数据和非结构化数据(向量)的检索,仅仅使用SQL接口就可以快速的搭建起以图搜图或者图片+结构化数据混合检索等功能. AnalyticDB的优化器在混合检索场景中会根据数据的分布和查询的条件选择最优的执行计划,在保证召回的同时,得到最优的性能。AnalyticDB向量版采用了多项创新性技术, 这些技术在我们的论文 AnalyticDB-V: A Hybrid Analytical Engine Towards Query Fusion for Structured and Unstructured Data 中有详细介绍介绍. 目前论文已经被数据库三大顶会之一的VLDB接受, 具有技术领先性.

结构化信息+非结构化信息(图片)混合检索在实际应用中被广泛使用的. 例如人脸门禁系统被部署在多个小区时, 我们使用一张表存储了所有小区的人脸特征, 在人脸检索时我们只需要检索当前小区的人脸特征. 在这种情况下, 使用AnalyticDB我们只需要在SQL中增加where 小区名 ='xxx' 就可以轻易实现。AnalyticDB同时提供了先进的图像文本分析算法, 能够提取非结构化数据的特征和标签, 用户仅仅需要使用SQL就可以完成图像文本内容的分析.
更多信息可以参考文章: https://zhuanlan.zhihu.com/p/82284704

7. 结语

本文介绍了如何使用AnalyticDB来搭建以图搜图, 人脸识别系统. 演示系统的源码可以在https://github.com/aliyun/alibabacloud-AnalyticDB-python-demo-AI 下载. AnalyticDB还支持其他多种多样人工智能算法如目标检测, 商品识别, 声纹识别, 基因识别等等.

展开阅读全文 icon
其他推荐内容