OpenVINO™ Model Server Client Library Samples

This document contains examples of how to run GetModelStatus, GetModelMetadata, Predict functions via the gRPC API.

It covers following topics:

Requirement

Install samples dependencies using the command below:

pip3 install -r requirements.txt

Download Resnet50-tf Model and convert it into Intermediate Representation format:

mkdir models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models openvino/ubuntu18_dev:latest deployment_tools/open_model_zoo/tools/downloader/downloader.py --name resnet-50-tf --output_dir /models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models:rw openvino/ubuntu18_dev:latest deployment_tools/open_model_zoo/tools/downloader/converter.py --name resnet-50-tf --download_dir /models --output_dir /models --precisions FP32
mv ${PWD}/models/public/resnet-50-tf/FP32 ${PWD}/models/public/resnet-50-tf/1

OVMS can be started using a command:

docker run -d --rm -v ${PWD}/models/public/resnet-50-tf:/models/public/resnet-50-tf -p 8000:8000 -p 9000:9000 openvino/model_server:latest --model_name resnet --model_path /models/public/resnet-50-tf --port 9000 --rest_port 8000

gRPC Client Examples

Model Status

  • Command

python grpc_get_model_status.py -h
usage: grpc_get_model_status.py [-h] [--service_url SERVICE_URL]
                                [--model_name MODEL_NAME]
                                [--model_version MODEL_VERSION]
                                [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --service_url SERVICE_URL Specify url to grpc service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. Lists all versions if omitted
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage Example

python grpc_get_model_status.py --model_name resnet
{1: {'state': 'AVAILABLE', 'error_code': 0, 'error_message': 'OK'}}

Model Metadata

  • Command

python grpc_get_model_metadata.py --help
usage: grpc_get__model_metadata.py [-h] [--service_url SERVICE_URL]
                                  [--model_name MODEL_NAME]
                                  [--model_version MODEL_VERSION]
                                  [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --service_url SERVICE_URL Specify url to grpc service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. If ommited or set to 0 returns result for latest version
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage Example

python grpc_get_model_metadata.py --model_name resnet --model_version 1
{'inputs': {'map/TensorArrayStack/TensorArrayGatherV3': {'shape': [1, 224, 224, 3], 'dtype': 'DT_FLOAT'}}, 'outputs': {'softmax_tensor': {'shape': [1, 1001], 'dtype': 'DT_FLOAT'}}}

Predict numeric format

  • Command

usage: grpc_predict_resnet.py [-h] [--images_numpy IMAGES_NUMPY]
                              [--service_url SERVICE_URL]
                              [--model_name MODEL_NAME]
                              [--model_version MODEL_VERSION]
                              [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_numpy IMAGES_NUMPY Path to a .npy file with data to infer
  --service_url SERVICE_URL Specify url to grpc service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. default: latest available
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python grpc_predict_resnet.py --images_dir images --model_name resnet
Image images/magnetic_compass.jpeg has been classified as magnetic compass
Image images/pelican.jpeg has been classified as pelican
Image images/gorilla.jpeg has been classified as gorilla, Gorilla gorilla
Image images/snail.jpeg has been classified as snail
Image images/zebra.jpeg has been classified as zebra
Image images/arctic-fox.jpeg has been classified as Arctic fox, white fox, Alopex lagopus
Image images/bee.jpeg has been classified as bee
Image images/peacock.jpeg has been classified as peacock
Image images/airliner.jpeg has been classified as airliner
Image images/golden_retriever.jpeg has been classified as golden retriever

To serve Resnet with support for binary input data, the model needs to be configured with NHWC layout. That can be acheived by starting the OVMS container with --layout NHWC parameter. new OVMS instance with layout MHWC parameter.

docker run -d --rm -v ${PWD}/models/public/resnet-50-tf:/models/public/resnet-50-tf -p 8000:8000 -p 9000:9000 openvino/model_server:latest --model_name resnet --model_path /models/public/resnet-50-tf --port 9000 --rest_port 8000 --layout NHWC

Predict binary format

  • Command

usage: grpc_predict_binary_resnet.py [-h] [--images_dir IMAGES_DIR]
                              [--service_url SERVICE_URL]
                              [--model_name MODEL_NAME]
                              [--model_version MODEL_VERSION]
                              [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_dir IMAGES_DIR Path to a directory with images in JPG or PNG format
  --service_url SERVICE_URL Specify url to grpc service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. default: latest available
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python grpc_predict_binary_resnet.py --images_dir images --model_name resnet
Image images/magnetic_compass.jpeg has been classified as magnetic compass
Image images/pelican.jpeg has been classified as pelican
Image images/gorilla.jpeg has been classified as gorilla, Gorilla gorilla
Image images/snail.jpeg has been classified as snail
Image images/zebra.jpeg has been classified as zebra
Image images/arctic-fox.jpeg has been classified as Arctic fox, white fox, Alopex lagopus
Image images/bee.jpeg has been classified as bee
Image images/peacock.jpeg has been classified as peacock
Image images/airliner.jpeg has been classified as warplane, military plane
Image images/golden_retriever.jpeg has been classified as golden retriever

Prepare the model from OpenVINO Model Zoo

Vehicle detection model

mkdir -p models
curl --create-dirs https://storage.openvinotoolkit.org/repositories/open_model_zoo/2021.3/models_bin/2/vehicle-detection-0202/FP32/vehicle-detection-0202.xml -o ${PWD}/models/vehicle-detection/1/vehicle-detection-0202.xml
curl --create-dirs https://storage.openvinotoolkit.org/repositories/open_model_zoo/2021.3/models_bin/2/vehicle-detection-0202/FP32/vehicle-detection-0202.bin -o ${PWD}/models/vehicle-detection/1/vehicle-detection-0202.bin
chmod -R 755 ${PWD}/models/vehicle-detection

OVMS container can be started using a command:

docker run -d --rm -v ${PWD}/models/vehicle-detection:/models/vehicle-detection -p 8000:8000 -p 9000:9000 openvino/model_server:latest --model_name vehicle-detection --model_path /models/vehicle-detection --port 9000 --rest_port 8000 --layout NHWC

Detect vehicle

  • Command

usage: grpc_predict_binary_vehicle_detection.py [-h] [--images_dir IMAGES_DIR]
                                           [--service_url SERVICE_URL]
                                           [--model_name MODEL_NAME]
                                           [--model_version MODEL_VERSION]
                                           [--output_dir OUTPUT_DIR]
                                           [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_dir IMAGES_DIR Path to a directory with images in JPG or PNG format
  --service_url SERVICE_URL Specify url to grpc service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: vehicle-detection
  --model_version MODEL_VERSION Model version to query. default: latest available
  --output_dir OUTPUT_DIR Path to store output.
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python grpc_predict_binary_vehicle_detection.py --images_dir ./images/cars/ --output_dir ./output
Making directory for output: ./output
Detection results in file:  ./output/road1.jpg

HTTP Client Examples

Model Status

  • Command

python http_get_model_status.py -h
usage: http_get_model_status.py [-h] [--service_url SERVICE_URL]
                                [--model_name MODEL_NAME]
                                [--model_version MODEL_VERSION]
                                [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --service_url SERVICE_URL Specify url to http service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. Lists all versions if omitted
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage Example

python http_get_model_status.py --model_name resnet
{1: {'state': 'AVAILABLE', 'error_code': 0, 'error_message': 'OK'}}

Model Metadata

  • Command

python http_get_model_metadata.py --help
usage: http_get_model_metadata.py [-h] [--service_url SERVICE_URL]
                                  [--model_name MODEL_NAME]
                                  [--model_version MODEL_VERSION]
                                  [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --service_url SERVICE_URL Specify url to http service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. If ommited or set to 0 returns result for latest version
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage Example

python http_get_model_metadata.py --model_name resnet --model_version 1
{'inputs': {'map/TensorArrayStack/TensorArrayGatherV3': {'shape': [1, 224, 224, 3], 'dtype': 'DT_FLOAT'}}, 'outputs': {'softmax_tensor': {'shape': [1, 1001], 'dtype': 'DT_FLOAT'}}}

Predict numeric format

  • Command

usage: http_predict_resnet.py [-h] [--images_numpy IMAGES_NUMPY]
                              [--service_url SERVICE_URL]
                              [--model_name MODEL_NAME]
                              [--model_version MODEL_VERSION]
                              [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_numpy IMAGES_NUMPY Path to a .npy file with data to infer
  --service_url SERVICE_URL Specify url to http service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. default: latest available
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python http_predict_resnet.py --images_dir images --model_name resnet
Image images/magnetic_compass.jpeg has been classified as magnetic compass
Image images/pelican.jpeg has been classified as pelican
Image images/gorilla.jpeg has been classified as gorilla, Gorilla gorilla
Image images/snail.jpeg has been classified as snail
Image images/zebra.jpeg has been classified as zebra
Image images/arctic-fox.jpeg has been classified as Arctic fox, white fox, Alopex lagopus
Image images/bee.jpeg has been classified as bee
Image images/peacock.jpeg has been classified as peacock
Image images/airliner.jpeg has been classified as airliner
Image images/golden_retriever.jpeg has been classified as golden retriever

To serve Resnet with support for binary input data, the model needs to be configured with NHWC layout. That can be acheived by starting the OVMS container with --layout NHWC parameter. new OVMS instance with layout MHWC parameter.

docker run -d --rm -v ${PWD}/models/public/resnet-50-tf:/models/public/resnet-50-tf -p 8000:8000 -p 9000:9000 openvino/model_server:latest --model_name resnet --model_path /models/public/resnet-50-tf --port 9000 --rest_port 8000 --layout NHWC

Predict binary format

  • Command

usage: http_predict_binary_resnet.py [-h] [--images_dir IMAGES_DIR]
                              [--service_url SERVICE_URL]
                              [--model_name MODEL_NAME]
                              [--model_version MODEL_VERSION]
                              [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_dir IMAGES_DIR Path to a directory with images in JPG or PNG format
  --service_url SERVICE_URL Specify url to http service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: resnet
  --model_version MODEL_VERSION Model version to query. default: latest available
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python http_predict_binary_resnet.py --images_dir images --model_name resnet
Image images/magnetic_compass.jpeg has been classified as magnetic compass
Image images/pelican.jpeg has been classified as pelican
Image images/gorilla.jpeg has been classified as gorilla, Gorilla gorilla
Image images/snail.jpeg has been classified as snail
Image images/zebra.jpeg has been classified as zebra
Image images/arctic-fox.jpeg has been classified as Arctic fox, white fox, Alopex lagopus
Image images/bee.jpeg has been classified as bee
Image images/peacock.jpeg has been classified as peacock
Image images/airliner.jpeg has been classified as warplane, military plane
Image images/golden_retriever.jpeg has been classified as golden retriever

Prepare the model from OpenVINO Model Zoo

Vehicle detection model

mkdir -p models
curl --create-dirs https://storage.openvinotoolkit.org/repositories/open_model_zoo/2021.3/models_bin/2/vehicle-detection-0202/FP32/vehicle-detection-0202.xml -o ${PWD}/models/vehicle-detection/1/vehicle-detection-0202.xml
curl --create-dirs https://storage.openvinotoolkit.org/repositories/open_model_zoo/2021.3/models_bin/2/vehicle-detection-0202/FP32/vehicle-detection-0202.bin -o ${PWD}/models/vehicle-detection/1/vehicle-detection-0202.bin
chmod -R 755 ${PWD}/models/vehicle-detection

OVMS container can be started using a command:

docker run -d --rm -v ${PWD}/models/vehicle-detection:/models/vehicle-detection -p 8000:8000 -p 9000:9000 openvino/model_server:latest --model_name vehicle-detection --model_path /models/vehicle-detection --port 9000 --rest_port 8000 --layout NHWC

Detect vehicle

  • Command

usage: http_predict_binary_vehicle_detection.py [-h] [--images_dir IMAGES_DIR]
                                           [--service_url SERVICE_URL]
                                           [--model_name MODEL_NAME]
                                           [--model_version MODEL_VERSION]
                                           [--output_dir OUTPUT_DIR]
                                           [--timeout TIMEOUT]


optional arguments:
  -h, --help            show this help message and exit
  --images_dir IMAGES_DIR Path to a directory with images in JPG or PNG format
  --service_url SERVICE_URL Specify url to http service. default:localhost:9000
  --model_name MODEL_NAME Model name to query. default: vehicle-detection
  --model_version MODEL_VERSION Model version to query. default: latest available
  --output_dir OUTPUT_DIR Path to store output.
  --timeout TIMEOUT Request timeout. default: 10.0
  • Usage example

python http_predict_binary_vehicle_detection.py --images_dir ./images/cars/ --output_dir ./output
Making directory for output: ./output
Detection results in file:  ./output/road1.jpg