/cv_img_matcher

图片相似度匹配器.

Primary LanguagePython

OPENCV 匹配器

快速开始

conda环境

  1. 安装conda
    https://docs.anaconda.com/free/miniconda/
  2. conda环境安装
conda env create -f environment.yml & conda activate matcher
  1. 在根目录的 static 文件夹创建文件夹foo,并将图片放入 foo 文件夹中
mkdir -p static/foo
  1. 体验
  • 提取图片特征
python fast_build.py

--debug 开启debug --force 强制覆盖数据集

  • 对图片集匹配并寻找最匹配的图
python fast_match.py

--debug 开启debug
--show 显示匹配图

注意: 存储之后的数据集的特征检测模式必须和匹配时候设置的相同!

  1. 检测耗时情况
python -m line_profiler fast_build.lprof
python -m line_profiler fast_match.lprof

本地环境

  1. 安装pip包
pip install --no-cache-dir -r requirements.txt
  1. 运行fast_build.py 或 fast_match.py 快速体验
  2. 运行本地服务
python -m server.app

docker环境(flask服务)

  1. 安装docker

桌面版:https://www.docker.com/products/docker-desktop

服务器版:https://docs.docker.com/engine/install/#server

  1. 打镜像
docker build -t matcher_flask:v1 .
  1. 运行容器
docker run --rm -d -p 5000:5000 matcher_flask:v1

网络层

内核 (匹配、特征提取)

特征检测方法对比:

- 时间(ms) 存储(M) 图片 测试次数
SIFT 1680 ~ 1770 12 4 10
ORB 172 ~ 179 8.5 4 10

特征匹配方法对比:

- 时间(ms) 图片 测试次数 精确度
BF 87 ~ 89 4 10 较FLANN好
FLANN 135 ~ 147 4 10 -

以上是在SIFT特征的KNN匹配情况, FLANN在其他情况未知错误待处理!

打包/上传

conda env export --no-builds > environment.yml
pip freeze > requirements.txt

TODO:

  • 图片的特征提取并持久化存储与获取
  • 增加server包
  • docker容器化
  • 本地服务部署, 图片集放OSS存储
  • 功能 toB
  • upload上传的图片使用buffer, imread读取buffer直接提取