Loïc Rollus edited this page Apr 16, 2015 · 41 revisions

Welcome to the CBIRetrieval wiki!


Content-based image retrieval (CBIR), also known as query by image content (QBIC) and content-based visual information retrieval (CBVIR) is the application of computer vision techniques to the image retrieval problem, that is, the problem of searching for digital images in large databases. Content-based image retrieval is opposed to traditional concept-based approaches (see Concept based image indexing). "Content-based" means that the search analyzes the contents of the image rather than the metadata such as keywords, tags, or descriptions associated with the image. The term "content" in this context might refer to colors, shapes, textures, or any other information that can be derived from the image itself. Schema

The CBIRetrieval library is:

  • Incremental: You can add new images all over the time.
  • Scalable: Run as many server as you want. Client performs search on all servers.
  • Flexible: Run as a simple app (command line) or use the JAR in your own JVM app/server (java import)
  • Opensource/Free: Apache 2.0

There are 2 softwares from the same authors:

  • CBIRetrieval (this repo): a java library for CBIR,
  • CBIRest: a server with a REST HTTP API with CBIRetrieval embedded. If you want to connect a software/webapp with a CBIR engine, you should use CBIRest.


  • Java 8


  1. Download last release from https://github.com/loic911/CBIRetrieval/releases
  2. unzip CBIRetrieval-*.zip

You can:

  • import target/JavaImageRetrieval-$VERSION.jar in your JVM application
  • use target/JavaImageRetrieval-$VERSION-with-dependencies.jar as a self-run application. All scripts undier bin/ directory use this jar.


# Start 1 server on port 1234
bin/server.sh config/ConfigServer.prop 1234 &

# Index image 1,2,3,4,5,6.jpg on this server. We only use one storage (storage "1")
bin/indexer.sh localhost 1234 images/1.jpg sync 1 1
bin/indexer.sh localhost 1234 images/2.jpg sync 1 2
bin/indexer.sh localhost 1234 images/3.jpg sync 1 3
bin/indexer.sh localhost 1234 images/4.jpg sync 1 4
bin/indexer.sh localhost 1234 images/5.jpg sync 1 5

# Search for similar images based on image 1.jpg (ask max 3 images)
bin/client.sh config/ConfigClient.prop localhost:1234 images/1.jpg 3

The result may be something like this:

1 ====> 1.3519999999999987E-4 //first result is the same image, no surprise :-)
5 ====> 4.633333333333334E-6
2 ====> 3.168548387096774E-6

By default, the database is in memory. This means that if the server is shutdown, you need to index again all images. You can use REDIS database instead of MEMORY.


* How to have a distribued architecture