Running a server with Docker

It is possible run a Mock VWS instance using Docker containers.

This allows you to run tests against a mock VWS instance regardless of the language or tooling you are using.

Running the mock

There are three containers required. One container mocks the VWS services, one container mocks the VWQ services and one container provides a shared target manager backend.

Each of these containers run their services on port 5000.

The VWS and VWQ containers must point to the target manager container using the TARGET_MANAGER_BACKEND variable.

Creating containers

docker network create -d bridge vws-bridge-network
docker run \
    --detach \
    --publish 5005:5000 \
    --name vuforia-target-manager-mock \
    --network vws-bridge-network \
    adamtheturtle/vuforia-target-manager-mock
docker run \
    --detach \
    --publish 5006:5000 \
    -e TARGET_MANAGER_BACKEND=vuforia-target-manager-mock:5000 \
    --network vws-bridge-network \
    adamtheturtle/vuforia-vws-mock
docker run \
    --detach \
    --publish 5007:5000 \
    -e TARGET_MANAGER_BACKEND=vuforia-target-manager-mock:5000 \
    --network vws-bridge-network \
    adamtheturtle/vuforia-vwq-mock

Adding a database to the mock target manager

When using Vuforia Web Services, it is necessary to create a database on the Target Manager. This is a web interface which does not have an HTTP API.

To mimic this functionality, this mock provides a target manager container which has an HTTP API.

To add a database, make a request to the following endpoint against the target manager container:

POST /databases

Create a new database.

Request Headers:
Response Headers:
Request JSON Object:
  • client_access_key (string) – (Optional) The client access key for the database.

  • client_secret_key (string) – (Optional) The client secret key for the database.

  • database_name (string) – (Optional) The name of the database.

  • server_access_key (string) – (Optional) The server access key for the database.

  • server_secret_key (string) – (Optional) The server secret key for the database.

  • state_name (string) – (Optional) The state of the database. This can be “WORKING” or “PROJECT_INACTIVE”. This defaults to “WORKING”.

Response JSON Object:
  • client_access_key (string) – The client access key for the database.

  • client_secret_key (string) – The client secret key for the database.

  • database_name (string) – The database name.

  • server_access_key (string) – The server access key for the database.

  • server_secret_key (string) – The server secret key for the database.

  • state_name (string) – The database state. This will be “WORKING” or “PROJECT_INACTIVE”.

Request JSON Array of Objects:
  • targets – The targets in the database.

Status Codes:
  • 201 Created – The database has been successfully created.

For example, with the containers set up as in Creating containers, use curl:

curl --request POST \
  --header "Content-Type: application/json" \
  --data '{}' \
  '127.0.0.1:5005/databases'
{
    "client_access_key": "2d61c1d17bb94694bee77c1f1f41e5d9",
    "client_secret_key": "b73f8170cf7d42728fa8ce66221ad147",
    "database_name": "e515df24ba944f43b8f7969bc98af107",
    "server_access_key": "cb1759871a504875ab5f96d6db5ff79b",
    "server_secret_key": "9b8533d912ad4aa79cb61b6ee197ece2",
    "state_name": "WORKING",
    "targets": []
}

Deleting a database

To delete a database use the following endpoint:

DELETE /databases/(string: database_name)

Delete a database.

Status Codes:
  • 200 OK – The database has been deleted.

Configuration options

Required configuration

TARGET_MANAGER_BACKEND

This is required by the VWS mock and the VWQ mock containers. This is the route to the target manager container from the other containers.

Optional configuration

Target manager container

TARGET_RATER

The rater to use for target tracking ratings.

Options include:

  • brisque: The rating is derived using the BRISQUE algorithm.

  • perfect: The rating is always 5.

  • random: The rating is random.

Default: brisque

Query container

QUERY_IMAGE_MATCHER

The matcher to use for the query endpoint.

Options include:

  • exact: The images must be exactly the same to match.

  • structural_similarity: The images must have a similar structural similarity to match.

Default: structural_similarity

VWS container

PROCESSING_TIME_SECONDS

The number of seconds to process each image for.

Default: 2

DUPLICATES_IMAGE_MATCHER

The matcher to use for the duplicates endpoint.

Options include:

  • exact: The images must be exactly the same to be duplicates.

  • structural_similarity: The images must have a similar structural similarity to be duplicates.

Default: structural_similarity

Building images from source

export REPOSITORY_ROOT=$PWD
export DOCKERFILE=$REPOSITORY_ROOT/src/mock_vws/_flask_server/Dockerfile

export TARGET_MANAGER_TAG=adamtheturtle/vuforia-target-manager-mock:latest
export VWS_TAG=adamtheturtle/vuforia-vws-mock:latest
export VWQ_TAG=adamtheturtle/vuforia-vwq-mock:latest

docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target target-manager --tag $TARGET_MANAGER_TAG
docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target vws --tag $VWS_TAG
docker buildx build $REPOSITORY_ROOT --file $DOCKERFILE --target vwq --tag $VWQ_TAG