Skip to main content

4.2 Python Inference Example

Last Version: 11/09/2025

This section demonstrates how to run model inference using Python, with image classification as the example task. Image classification identifies the main object category in an image (e.g., cats, dogs, cars).

We use MobileNetV2 for this example and run high-performance inference on the SpaceMIT platform using onnxruntime together with the spacemit-ort acceleration library.

Clone the Code

git clone https://gitee.com/bianbu/spacemit-demo.git ~

Installation Dependencies (Set Up Environment)

We recommend creating a Python virtual environment:

python -m venv .venv
source .venv/bin/activate

Install necessary dependencies using the SpaceMIT private source:

pip install opencv-python --index-url https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple
pip install spacemit-ort --index-url https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple

Run the Test

Navigate to the project's example directory and execute the inference script:

cd ~/spacemit_demo/examples/CV/mobilenet_v2/python
python test_mobilenet_v2.py

Example output:

Final result: class=n02123045 tabby, tabby cat;

Inference Process and Code Analysis

Import the Acceleration Library

import spacemit_ort  

Image Loading and Preprocessing

from PIL import Image
import numpy as np
import cv2

def preprocess(img):
img = img / 255.0 # Normalize to [0, 1]
img = cv2.resize(img, (256, 256)) # Resize
y0, x0 = (256 - 224) // 2, (256 - 224) // 2
img = img[y0:y0+224, x0:x0+224, :] # Center Crop
img = (img - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225] # Normalization
img = np.transpose(img, (2, 0, 1)) # HWC → CHW
img = np.expand_dims(img.astype(np.float32), axis=0) # Add Batch Dimension
return img

# Load and Preprocess Image
img = Image.open(args.image_path).convert('RGB')
img = preprocess(np.array(img))

Model Loading and Inference Session Setup

session_options = onnxruntime.SessionOptions() # Create Onnxruntime Session
session_options.intra_op_num_threads = 4 # Set Number of Threads (Recommended: 4)

# Load Model and Set Up Inference Session
session = onnxruntime.InferenceSession(
args.model,
sess_options=session_options,
providers=["SpaceMITExecutionProvider"]
)

Model Inference Execution

input_name = session.get_inputs()[0].name # Get Input Node Name
output_name = session.get_outputs()[0].name # Get Output Node Name

# Execute Inference and Store Results in Result
result = session.run([output_name], {input_name: img})[0]

Post-processing of Inference Results

# Get Top-5 Class Indices, Sorted by Probability (High to Low)
top_k = result.argsort()[-5:][::-1]