圖像檢索引擎vearch安裝與測試使用

0 概述

Vearch 對大規模深度學習向量進行高效相似搜索的彈性分佈式系統。

參考文檔:

  • github地址:https://github.com/vearch/vearch
  • 中文文檔:https://vearch.readthedocs.io/zh_CN/latest/overview.html

參考實例:

  • 官方部署實例:https://github.com/vearch/vearch/blob/master/docs/Quickstart.md
  • 中文大佬ansj的文章:https://my.oschina.net/ansj/blog/3117596

1 安裝

由於公司服務器不能上網,所有操作儘量離線安裝。

參考:官方安裝部署教程:https://github.com/vearch/vearch/blob/master/docs/Deploy.md

參考:官方安裝部署教程:https://vearch.readthedocs.io/zh_CN/latest/quick-start-guide.html

1.1 安裝anaconda

參考《linux安裝jdk以及eclipse,安裝Anaconda與pyChram》 https://blog.csdn.net/u012052268/article/details/77160683

安裝完成後,別忘記配置環境變量:

vi ~/.bashrc

加入以下幾句話:

PATH=/home/myName/anaconda3/bin:$PATH
export PATH

使配置生效:

source ~/.bashrc

1.2 安裝docker

按照文章《20191120離線安裝docker》的方式安裝好docker。

並下哦那個docker hub離線下載鏡像 vearch_env 。這個鏡像是編譯 vearch的基礎環境,有了它就不用裝哪些那七八糟的東西了。

1.3 安裝vearch

1.3.1 下載vearch源碼

cd /home/vearch

1.3.2 準備編譯環境

docker pull ansj/vearch_env:0.3 # 或者 從離線的地方load進來,有了vearch_env 就可以編譯vearch了

1.3.3 運行

cd vearch/cloud/

bash run_docker.sh

這個打包命令將進行一下所有操作(1.2.3.1-1.2.3.4),以下的都不用做了。

如果啓動成功你將會看到如下信息:

2019/10/15 04:58:13 startup.go:63: [INFO] start server by version:[0.1] commitID:[3a0ed89b690ea2cf566a45fc5681b0a1ca170726]
2019/10/15 04:58:13 startup.go:72: [INFO] The Config File Is: /vearch/config.toml
2019/10/15 04:58:13 startup.go:76: [INFO] The configuration content is:

打開瀏覽器訪問 http://127.0.0.1:8817/ (或者 服務器地址加8817)可以看到下圖說明啓動是ok的:
image

1.3.3.1 編譯Vearch

docker pull ansj/vearch_env # 或者 從離線的地方load進來,有了vearch_env 就可以編譯vearch了

cd vearch/cloud/
bash compile.sh

這一步將自動生成容器vearch_env,運行docker ps -a命令可以看到;

並在vearch_env的容器中編譯vearch代碼;

然後自動把編譯後的代碼拷貝出容器 到宿主機的:$vearch/build/bin$vearch/build/lib文件夾中。

1.3.3.2 創建vearch可運行鏡像

# 繼續在cloud文件夾中:
bash build.sh

這一步會得到一個vearch的docker鏡像iamge。分爲7步:

  1. 構建centos7 基礎環境
  2. Step 2/7 : ADD compile/bin /vearch/bin/
  3. Step 3/7 : ADD compile/lib /vearch/lib/
  4. Step 4/7 : ENV MASTER_NAME="___MASTER_NAME___"
  5. Step 5/7 : ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/vearch/lib/"
  6. Step 6/7 : RUN yum install -y libgomp blas-devel lapack-devel
  7. ENTRYPOINT ["/vearch/bin/vearch","-conf" ,"/vearch/config.toml","-master","$MASTER_NAME"]

運行docker images命令可以看到,多了一個ansj/vearch:0.3 的image

1.3.3.3 copy exaple配置文件過來作爲單機配置

# 繼續在cloud中
cat ../config/config.toml.example > config.toml

1.3.3.4 啓動Vearch

# 直接運行
docker run -it -p 8817:8817 -p 9001:9001 -p 2378:2378 -p 2390:2390 -p 2370:2370 -p 6062:6062 -p 8818:8818 -p 6061:6061 -p 8081:8081 -p 8898:8898 -p 8899:8899 -p 6060:6060  -v $PWD/config.toml:/vearch/config.toml  ansj/vearch:0.3 all

### 其實 單機模式中 只對外暴露 8817、9001 兩個端口即可運行。 
### 但是爲了以後分佈式部署方便。 把所有使用到的端口 都暴露出來。這樣,多臺機器之間的數據連接端口無障礙。


1.3.4 運行圖像檢索插件

這裏會調用 python環境 以及訓練好的VGG16模型。 所以需要安裝一些python包,提前安裝好的可以忽略:

  1. shortuuid
  2. opencv-python-4.1.1.26
  3. opencv-python_headless (一定要裝,否則會報ImportError: libSM.so.6錯誤)
  4. msgpack
  5. torch1.2 (一定要在官網 安裝cpu版本啊 血的教訓)
  6. torchvision 0.4 (一定要在官網 安裝cpu版本啊 血的教訓)
  7. pytorch官網上下載的 vgg16.pth 放到 ~/.cache/torch/checkpoints/裏面
  8. 下載yolov3.weights 放入 /home/CVpy36/xuqingtang/vearch/plugin/model/

以上環境準備好了,啓動圖片插件

cd /home/vearch/vearch/plugin
nohup ./bin/run.sh image &

看到 ↓ 信息就成功了:

load model success

或者進入src直接運行python文件

cd /home/vearch/vearch/plugin/src
nohup python main.py --model_name=image_retrieval &

這個插件寫好了flask接口,所有的請求通過4101訪問,不用8817了。

2 測試使用

參考:

  • https://github.com/vearch/vearch/blob/master/docs/Quickstart.md
  • https://github.com/vearch/vearch/blob/master/docs/APIVisualSearch.md
  • https://vearch.readthedocs.io/zh_CN/latest/use_op/op_db.html

2.1 建庫建表:

建立一個名爲testDb 的庫,其中有名爲 testSpace的表;

並且使用 vgg16 建模。

curl -XPOST -H "content-type:application/json" -d '{
    "db": true,
    "method": 0,
    "columns": {
        "imageurl": {
            "type": "keyword"
        },
        "boundingbox": {
            "type": "keyword"
        },
        "label": {
            "type": "keyword"
        }
    },
    "feature": {
        "type": "vector",
        "filed": "imageurl",
        "model_id": "vgg16",
        "dimension": 512
    }
}' http://127.0.0.1:4101/testDb/testSpace/_create

如果成功之後,會返回:

{"code": 200, "db_msg": "success", "space_msg": "success"}

2.2 刪除表格

curl -XPOST -H "content-type:application/json" -d '{
    "db": false,
    "space": true
}' http://127.0.0.1:4101/test/test/_delete

成功的響應如下所示:

{"code": 200, "db_msg": null, "space_msg": "success"}

2.3 數據插入

  • 單條數據插入:
# single insert
curl -XPOST -H "content-type:application/json" -d '{
    "imageurl": "../images/image_retrieval/test/COCO_val2014_000000123599.jpg",
    "detection": false,
    "boundingbox": "10,10,290,290",
    "label": "coat"
}' http://127.0.0.1:4101/test/test/_insert

返回值爲:

{"db": "testDb", "space": "testSpace", "ids": [{"AW3tYgdsAkKsEQACQOnu": "successful"}], "successful": 1}

  • csv批量導入演示的方法:
# bulk insert
curl -XPOST -H "content-type:application/json" -d '{
    "method": "bulk",
    "imageurl": "../images/image_retrieval/test.csv",
    "detection": true
}' http://127.0.0.1:4101/test/test/_insert

imageurl 字段可以直接輸入base64字符串

2.4 嘗試圖片搜索

curl -XPOST -H "content-type:application/json" -d '{
    "imageurl": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg",
    "size": 5
}' http://127.0.0.1:4101/testDb/testSpace/_search

size爲你想獲取的幾個返回值。

插件內部編寫了多種圖像輸入格式,所以可以

  • 使用base64編碼的本地圖像進行搜索;
  • 也可以使用圖像URI搜索可公開訪問的在線圖像
  • 或存儲在本地圖像文件夾中的圖像。

搜索結果看起來像這樣:

undefined

image

2.5 刪除數據

使用以下curl命令按ID刪除記錄

# request
curl -XDELETE http://127.0.0.1:4101/test/test/AWz2IFBSJG6WicwQVTog

# response
{
    "code": 200,
    "msg": "success"
}

2.6 Update record by ID

# request
curl -XPOST -H "content-type:application/json" -d '{
    "imageurl": "../images/image_retrieval/test/COCO_val2014_000000123599.jpg",
    "detection": true
}' http://127.0.0.1:4101/test/test/_update?id=AWz2IFBSJG6WicwQVTog

# response
{
    "db": "test",
    "space": "test",
    "ids": [
        {
            "AWz2IFBSJG6WicwQVTog": "successful"
        }
    ],
    "successful": 1
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章