A flask-based cbir system
利用Flask^1框架实现的基于内容的图像检索(Content Based Image Retrieval, CBIR)系统
python
版本:3.5.2
pip
版本: 9.0.3
相关组件要求见requirements.txt
程序在虚拟环境下运行,首先确保安装virtualenv
,之后创建并激活虚拟环境,接着在虚拟环境下安装所有必要的组件,并设置相关环境变量的值.
在运行应用之前,需要提取图像特征,其中初始数据集使用的是ukbench^2数据集的前4096幅图,提取的特征是SIFT的改进版,即RootSIFT特征.
在Linux下所有的命令为:
# 复制仓库并进入相应目录
$ git clone https://github.com/zysite/SoTu.git
$ cd SoTu
# 激活虚拟环境并安装所有必要的组件
$ virtualenv venv
$ . venv/bin/activate
$ pip install -r requirements.txt
# 设置环境变量FLASK_APP和FLASK_ENV的值
$ export FLASK_APP=sotu.py
$ export FLASK_ENV=development
# 设置最大线程数
# $ export OMP_NUM_THREADS=8
# 提取图像特征
$ flask extract
其中激活虚拟环境的命令在Windows的环境下有所不同:
$ venv\Scripts\activate
如果用cmd设置环境变量,需要用set
代替上面的export
.
如果用powershell设置,则命令为:
$ $env:FLASK_APP="sotu.py"
最后退出虚拟环境的命令为:
$ deactivate
检索系统的实现基于特征袋模型(Bag of Feature, BoF),并在此基础上利用了汉明嵌入(Hamming Embedding, HE)方法、弱几何一致性(Weak Geometric Consistency, WGC)约束和基于RANSAC算法的几何重排.
运行web应用使用下面的命令,可以指定主机和端口:
$ flask run -h localhost -p 8080
检索系统支持文件上传、拖拽上传和URL上传三种图片上传方式.
这里使用的评估指标是mAP(mean Average Precision, mAP)指标,执行评估使用下面的命令:
$ flask evaluate
不同方法的评价结果如下表,其中BoF模型设置的聚类数为5000,HE的阈值ht为23:
methods | mAP |
---|---|
BoF | 0.713298 |
BoF+HE | 0.878229 |
BoF+HE+Reranking | 0.898573 |
Jégou提到对于ukbench数据集而言,WGC方法的效果较差^3,因此评估没有采用WGC方法.