前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础快速搭建一个图像检索系统

零基础快速搭建一个图像检索系统

作者头像
用户3147702
发布2022-06-27 16:58:10
1.5K0
发布2022-06-27 16:58:10
举报
文章被收录于专栏:小脑斧科技博客

1. 引言

随着计算机视觉领域的发展,图像识别已经被广泛应用在各个领域,比如在疫情期间各个住宅、办公场所出入口位置广泛使用的人脸识别系统等等。

那么,如何快速入门图像识别领域,怎么快速搭建一套自己的图像识别引擎呢?

lfaidata 提供了一套非常简单易用的开源框架,实现了图像识别引擎的快速搭建,本文我们就基于这套框架来搭建一套图像识别平台的 demo。

2. 图像识别的基本流程

简单的来说,图像识别就是一个这样的过程:

  1. 构建被搜索的图像数据库:
    1. 输入一系列图像用来作为被搜索的基础数据;
    2. 对这些图像分别进行特征向量抽取,将图像转化为可处理的矩阵向量;
    3. 存储上述计算后的矩阵向量。
  2. 执行图像识别与搜索:
    1. 输入用于查询的图像数据;
    2. 对输入的图像进行特征向量抽取,将图像转化为矩阵向量;
    3. 通过某个匹配算法,将这个输入的矩阵向量与图像数据库中已有的矩阵向量进行匹配;
    4. 输出匹配结果。

3. 所需的组件

3.1 如何抽取特征向量

图像的特征提取就是从原始像素点中提取更高级的特征,从而用来代表和区分不同的图像。

目前来说,卷积神经网络算法在特征提取上的表现是最佳的,比如流行的 AlexNet、VGG、Inception 和 ResNet 算法等等。相比传统的算法,卷积神经网络可以识别出图像中的关键区域进行提取,从而让效果更好。

下面的 demo 中,我们就使用 ResNet50 来实现图像特征向量的提取,它表示有 50 层深度的 ResNet 神经网络算法。

3.2 如何构建向量查询数据库

经过特征提取,实现了从图像到向量的转化,我们的图像检索的核心就进入到了向量数据库的构建环节,只要有了向量数据库,就可以实现向量的存储和搜索功能了。

lfaidata 就提供了这样一个开源的向量查询数据库 – milvus。它是一个基于 K 近邻算法实现的向量查询库。K 近邻算法虽然具有实现简单、结果准确性高等方面的优点,但 K 近邻算法最为人诟病的就是它的性能相对较差。为了优化这一点,milvus 对原始向量构建了索引,来优化性能,实际使用来看,性能相对还是不错的。

milvus 提供了一整套 grpc 封装的接口,我们可以十分方便地用各种语言来进行调用。

4. 运行官方 demo

4.1 demo 简介

如图所示,官方使用 ResNet50 提取特征向量,结合 milvus 向量查询数据库提供了一个基于 python uvicorn web 框架的可视化 demo。

有了这个 demo,我们不仅可以快速实现一个可视化的图片搜索引擎的搭建,通过阅读 demo 的代码,我们也可以学习特征提取、图像搜索等的代码实现。

4.2 demo server

官方 demo 通过 python 编写了一个 http 协议的 web server,封装了图片的上传、特征抽取、查询以及图像数量查询、图像的硬盘 path 查询、清空等操作。

4.3 docker 启动 demo server

官方已经打好了这个 demo server 的 docker 镜像,只需要拉取并且启动即可。

首先拉取 demo 工程:

$ git clone https://github.com/milvus-io/bootcamp.git

在 solutions/reverse_image_search/quick_deploy 目录下,有 docker-compose.yaml 文件,执行下面的命令启动即可:

$ docker-compose up -d

你可以看到:

Creating network “quick_deploy_app_net” with driver “bridge” Creating milvus-etcd … done Creating milvus-minio … done Creating img-search-mysql … done Creating img-search-webclient … done Creating milvus-standalone … done Creating img-search-webserver … done

通过 docker ps 命令,可以看到启动了以下几个 docker:

  • milvusdb/milvus – milvus 核心服务
  • minio/minio – milvus 的输入输出服务
  • quay.io/coreos/etcd – milvus 配置服务
  • milvusbootcamp/img-search-server – demo 的查询 server
  • milvusbootcamp/img-search-client – demo 的查询 client
  • mysql

4.4 源码启动 demo server

当然,我们也可以通过源码来启动这个 demo 的 server 程序。

4.4.1 环境搭建

最基础的环境,我们需要 python3 和 docker 运行环境,这里就不赘述了。

除此以外,我们需要拉取 demo 源码:

$ git clone https://github.com/milvus-io/bootcamp.git

进入 solutions/reverse_image_search/quick_deploy/server 目录,执行下面的命令安装必须的 python 依赖:

$ pip install -r requirements.txt

4.4.2 启动 milvus 服务

首先,我们先启动上述的三个 milvus 的 docker:

$ wget https://github.com/milvus-io/milvus/releases/download/v2.0.1/milvus-standalone-docker-compose.yml -O docker-compose.yml $ sudo docker-compose up -d

这样就会启动下面三个 docker:

  • milvus-etcd
  • milvus-minio
  • milvus-standalone

4.4.3 启动 mysql

由于 milvus 对于每个向量的 id 都只支持数值类型,所以我们需要一个从数值型的向量 id 到图片在硬盘上的 path 之间的映射存储,这个 demo 将这个映射关系存储在了 mysql 中,所以我们需要启动一个 mysql 镜像,当然了,如果你本地就有 mysql 的 server 的话,直接启动就可以,如果没有的话,可以通过 docker 启动:

$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d --name qa_mysql mysql:5.7

4.4.4 配置和启动 demo

在 solutions/reverse_image_search/quick_deploy/server/src 目录下,有一个 config.py 文件,你可以通过它配置以下信息:

参数

说明

默认值

MILVUS_HOST

milvus 服务 ip 地址

127.0.0.1

MILVUS_PORT

milvus 服务端口

19530

VECTOR_DIMENSION

向量维度数

1000

MYSQL_HOST

mysql ip

127.0.0.1

MYSQL_PORT

mysql 端口

3306

DEFAULT_TABLE

mysql 表名

milvus_img_search

而 server 启动的 ip 和端口则在 src/main.py 中,可以编辑修改。

一切配置妥当以后,执行下面命令启动即可运行:

$ python src/main.py

运行起来以后,通过浏览器访问 http://127.0.0.1:5000/docs 即可访问接口的说明页面。

4. 5 启动 demo client

demo 的 client 通过调用上述 server 的 http 接口并且渲染可视化 GUI 界面,提供了简单方便的操作界面。

官方已经打好 docker,直接执行下面的命令启动即可:

$ docker run -d \-p 8001:80 \-e "API_URL=http://${API_HOST}:${API_PORT}" \milvusbootcamp/img-search-client:1.0

5. 运行结果

通过浏览器访问 http://127.0.0.1:8001 就可以打开如下页面:

在输入框中输入硬盘上的图库文件夹路劲,点击 + 号,server 端就开始了图片的特征向量提取与存储等操作,可以通过 server 端日志来查看进度。

等待一段时间,server 端完成你所需的图库录入工作后,你就可以上传图片进行搜索了:

在搜索结果中,每幅图还附带有偏离度数字,数字越小表示与原图越接近。

附录 – 参考资料

https://github.com/milvus-io/bootcamp/tree/master/solutions/reverse_image_search/quick_deploy

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小脑斧科技博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 图像识别的基本流程
  • 3. 所需的组件
    • 3.1 如何抽取特征向量
      • 3.2 如何构建向量查询数据库
      • 4. 运行官方 demo
        • 4.1 demo 简介
          • 4.2 demo server
            • 4.3 docker 启动 demo server
              • 4.4 源码启动 demo server
                • 4.4.1 环境搭建
                • 4.4.2 启动 milvus 服务
                • 4.4.3 启动 mysql
                • 4.4.4 配置和启动 demo
              • 4. 5 启动 demo client
              • 5. 运行结果
              • 附录 – 参考资料
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档