A visual search engine based on Elasticsearch and Tensorflow
There are serveral python libraries you must to install before building the search engine.
-
elasticsearch==5.2.0
-
Tensorflow==0.12.1
-
Flask
-
opencv-python
-
easydict
-
cython
-
numpy
-
Or
pip install -r requirements.txt
- Then
cd visual_search/lib & make
- Setup Elasticsearch
The easiest way to setup is using Docker with Docker Compose. With docker-compose
everything you have to do is so simple:
cd visual_search/elasticsearch
docker-compose up -d
- Building elasticsearch plugin
We need to build Elasticsearch plugin to compute distance between feature vectors. Make sure that you have Maven installed.
cd visual_search/es-plugin
mvn install
cd target/release
// create simple server to serve plugin
python -m 'SimpleHTTPServer' &
//install plugin
cd ../elasticsearch
docker exec -it elasticsearch_elasticsearch_1 elasticsearch-plugin install http://localhost:8000/esplugin-0.0.1.zip
docker-compose restart
- Index preparation
curl -XPUT http://localhost:9200/im_data -d @schema_es.json
- Setup faster r-cnn
I used earlier faster r-cnn
version implemented by @Endernewton for object detection. You can fetch pre-trained model here.
export WEIGHT_PATH=...
export MODEL_PATH=...
export INPUT=..
cd visual_search
python index_es.py --weight $WEIGHT_PATH --model_path $MODEL_PATH --input $INPUT
sudo python index_es.py --weight ./models/imagenet_weights/vgg16.weights --model_path ./models/faster_rcnn_models/coco_2014_train+coco_2014_valminusminival/default/vgg16_faster_rcnn_iter_490000.ckpt --input ../KGSoutput/2002-01-01-9.png
Before starting the server, you must to update IMGS_PATH
variable in visual_search/server.py
to the location of folder where images are stored.
cd visual_search
python server.py
and access the link http://localhost:5000/static/index.html
to test the search engine.
Have fun =))
export CFLAGS="-I /usr/local/lib/python3.5/dist-packages/numpy/core/include $CFLAGS"