English Readme is here.
本项目 forked from plippe/faiss-web-service。 添加了提取图片特征向量、构建 Faiss 索引以及构建运行docker三部分。
关于 Faiss 以及其他此项目的详细信息,可以在我的blog上找到,地址在这里。
使用opencv 的SIFT 特征提取算法,代码位置:src/utils/feature_detect.py
代码位置为:src/train_index/train_index.py
。
这个代码里面使用的是不需要 train
的索引。
在真实使用场景下,我们会使用一些需要预训练的索引,比如"IVFx,Flat"等,关于如何选择合适的索引,请参考这里。
代码位置为:src/train_index/train_index_with_pre_train.py
。
因为SIFT默认输出维度为128维,如果觉得太低,可以使用词袋模型(BOW)。
代码实现位置在:src/train_index/train_index_bow.py
。
代码实现位置在:src/train_index/train_index_from_java.py
。
直接使用docker, 由于提取图片特征向量时,需要用到Opencv,所以我在 plippe 镜像的基础上又安装了 Opencv 3.2 ,这样子就可以直接在镜像内部训练 Fiass 索引了。 可以到 the docker hub image 下载基础镜像:
docker pull waltyou/faiss-api-service:1.2.1-gpu
如果对本项目代码进行了更新,可以重新build docker 镜像, dockerfile 内容可以参考以下:
FROM waltyou/faiss-api-service:1.2.1-gpu
COPY src /opt/faiss-web-service/src
COPY bin /opt/faiss-web-service/bin
进入docker container 中,运行 bin/faiss_web_service.sh 即可。
启动docker 容器,进入容器中:
docker run -it --rm waltyou/faiss-api-service:1.2.1-gpu bash
在容器内部运行:
cd src/train_index
python train_index.py
# Faiss search for ids 1, 2, and 3
curl 'localhost:5000/faiss/search' -X POST -d '{"k": 5, "ids": [1, 2, 3]}'
# Faiss search for image path
curl 'localhost:5000/faiss/search' -X POST -d '{"k": 5, "image": “/image/path/imagename”}'
# Faiss search for vector file path
curl 'localhost:5000/faiss/search' -X POST -d '{"k": 5, "vectors": “/vector/file/path”}'
检测镜像是否成功启动:
# Healthcheck
curl 'localhost:5000/ping'
可以忽略这个报错,如果你觉得这个错误很烦人的话,可以注释掉 src/faiss_index/blueprint.py
中的第9、10行。原因可以参考这里:https://www.cnblogs.com/lazyboy/archive/2013/06/03/3115451.html 。